summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore29
-rw-r--r--docs/access_api.rst14
-rw-r--r--docs/conf.py4
-rw-r--r--docs/docs.conf4
-rw-r--r--docs/index.rst2
-rw-r--r--docs/module_overview.rst20
-rw-r--r--docs/write_hooks.rst40
-rw-r--r--docs/write_plugins.rst18
-rw-r--r--locale/af/LC_MESSAGES/django.po420
-rw-r--r--locale/af/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/af/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/af/LC_MESSAGES/setup.po222
-rw-r--r--locale/ar/LC_MESSAGES/django.po420
-rw-r--r--locale/ar/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/ar/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ar/LC_MESSAGES/setup.po222
-rw-r--r--locale/bn/LC_MESSAGES/django.po420
-rw-r--r--locale/bn/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/bn/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/bn/LC_MESSAGES/setup.po222
-rw-r--r--locale/ca/LC_MESSAGES/django.po420
-rw-r--r--locale/ca/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/ca/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ca/LC_MESSAGES/setup.po224
-rw-r--r--locale/cli.pot138
-rw-r--r--locale/core.pot436
-rw-r--r--locale/cs/LC_MESSAGES/django.po420
-rw-r--r--locale/cs/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/cs/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/cs/LC_MESSAGES/setup.po224
-rw-r--r--locale/da/LC_MESSAGES/django.po420
-rw-r--r--locale/da/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/da/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/da/LC_MESSAGES/setup.po222
-rw-r--r--locale/de/LC_MESSAGES/django.po420
-rw-r--r--locale/de/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/de/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/de/LC_MESSAGES/setup.po224
-rw-r--r--locale/django.pot420
-rw-r--r--locale/el/LC_MESSAGES/django.po420
-rw-r--r--locale/el/LC_MESSAGES/pyLoad.po422
-rw-r--r--locale/el/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/el/LC_MESSAGES/setup.po224
-rw-r--r--locale/eo/LC_MESSAGES/django.po420
-rw-r--r--locale/eo/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/eo/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/eo/LC_MESSAGES/setup.po222
-rw-r--r--locale/es/LC_MESSAGES/django.po420
-rw-r--r--locale/es/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/es/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/es/LC_MESSAGES/setup.po224
-rw-r--r--locale/fa/LC_MESSAGES/django.po420
-rw-r--r--locale/fa/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/fa/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/fa/LC_MESSAGES/setup.po222
-rw-r--r--locale/fi/LC_MESSAGES/django.po420
-rw-r--r--locale/fi/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/fi/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/fi/LC_MESSAGES/setup.po222
-rw-r--r--locale/fr/LC_MESSAGES/django.po420
-rw-r--r--locale/fr/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/fr/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/fr/LC_MESSAGES/setup.po224
-rw-r--r--locale/ga/LC_MESSAGES/django.po420
-rw-r--r--locale/ga/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/ga/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ga/LC_MESSAGES/setup.po222
-rw-r--r--locale/gl/LC_MESSAGES/django.po420
-rw-r--r--locale/gl/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/gl/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/gl/LC_MESSAGES/setup.po224
-rw-r--r--locale/he/LC_MESSAGES/django.po420
-rw-r--r--locale/he/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/he/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/he/LC_MESSAGES/setup.po222
-rw-r--r--locale/hi/LC_MESSAGES/django.po420
-rw-r--r--locale/hi/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/hi/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/hi/LC_MESSAGES/setup.po222
-rw-r--r--locale/hr/LC_MESSAGES/django.po420
-rw-r--r--locale/hr/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/hr/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/hr/LC_MESSAGES/setup.po222
-rw-r--r--locale/hu/LC_MESSAGES/django.po420
-rw-r--r--locale/hu/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/hu/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/hu/LC_MESSAGES/setup.po222
-rw-r--r--locale/id/LC_MESSAGES/django.po420
-rw-r--r--locale/id/LC_MESSAGES/pyLoad.po423
-rw-r--r--locale/id/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/id/LC_MESSAGES/setup.po222
-rw-r--r--locale/it/LC_MESSAGES/django.po420
-rw-r--r--locale/it/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/it/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/it/LC_MESSAGES/setup.po224
-rw-r--r--locale/ja/LC_MESSAGES/django.po420
-rw-r--r--locale/ja/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/ja/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ja/LC_MESSAGES/setup.po222
-rw-r--r--locale/ko/LC_MESSAGES/django.po420
-rw-r--r--locale/ko/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/ko/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ko/LC_MESSAGES/setup.po222
-rw-r--r--locale/ms/LC_MESSAGES/django.po420
-rw-r--r--locale/ms/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/ms/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ms/LC_MESSAGES/setup.po222
-rw-r--r--locale/nl/LC_MESSAGES/django.po420
-rw-r--r--locale/nl/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/nl/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/nl/LC_MESSAGES/setup.po222
-rw-r--r--locale/no/LC_MESSAGES/django.po420
-rw-r--r--locale/no/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/no/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/no/LC_MESSAGES/setup.po222
-rw-r--r--locale/pa/LC_MESSAGES/django.po420
-rw-r--r--locale/pa/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/pa/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/pa/LC_MESSAGES/setup.po222
-rw-r--r--locale/pl/LC_MESSAGES/django.po420
-rw-r--r--locale/pl/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/pl/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/pl/LC_MESSAGES/setup.po224
-rw-r--r--locale/pt/LC_MESSAGES/django.po420
-rw-r--r--locale/pt/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/pt/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/pt/LC_MESSAGES/setup.po222
-rw-r--r--locale/ro/LC_MESSAGES/django.po420
-rw-r--r--locale/ro/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/ro/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ro/LC_MESSAGES/setup.po222
-rw-r--r--locale/ru/LC_MESSAGES/django.po420
-rw-r--r--locale/ru/LC_MESSAGES/pyLoad.po422
-rw-r--r--locale/ru/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/ru/LC_MESSAGES/setup.po222
-rw-r--r--locale/setup.pot214
-rw-r--r--locale/si/LC_MESSAGES/django.po420
-rw-r--r--locale/si/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/si/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/si/LC_MESSAGES/setup.po222
-rw-r--r--locale/sq/LC_MESSAGES/django.po420
-rw-r--r--locale/sq/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/sq/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/sq/LC_MESSAGES/setup.po222
-rw-r--r--locale/sr/LC_MESSAGES/django.po420
-rw-r--r--locale/sr/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/sr/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/sr/LC_MESSAGES/setup.po224
-rw-r--r--locale/sv/LC_MESSAGES/django.po420
-rw-r--r--locale/sv/LC_MESSAGES/pyLoad.po424
-rw-r--r--locale/sv/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/sv/LC_MESSAGES/setup.po224
-rw-r--r--locale/te/LC_MESSAGES/django.po420
-rw-r--r--locale/te/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/te/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/te/LC_MESSAGES/setup.po222
-rw-r--r--locale/tr/LC_MESSAGES/django.po420
-rw-r--r--locale/tr/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/tr/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/tr/LC_MESSAGES/setup.po222
-rw-r--r--locale/uk/LC_MESSAGES/django.po420
-rw-r--r--locale/uk/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/uk/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/uk/LC_MESSAGES/setup.po222
-rw-r--r--locale/vi/LC_MESSAGES/django.po420
-rw-r--r--locale/vi/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/vi/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/vi/LC_MESSAGES/setup.po222
-rw-r--r--locale/zh/LC_MESSAGES/django.po420
-rw-r--r--locale/zh/LC_MESSAGES/pyLoad.po420
-rw-r--r--locale/zh/LC_MESSAGES/pyLoadCli.po138
-rw-r--r--locale/zh/LC_MESSAGES/setup.po222
-rw-r--r--module/ConfigParser.py373
-rw-r--r--module/Core.py663
-rw-r--r--module/HookManager.py305
-rw-r--r--module/InitHomeDir.py79
-rw-r--r--module/PullEvents.py120
-rw-r--r--module/PyFile.py284
-rw-r--r--module/PyPackage.py79
-rw-r--r--module/ThreadManager.py317
-rw-r--r--module/cli/Cli.py585
-rw-r--r--module/cli/ManageFiles.py203
-rw-r--r--module/common/APIExerciser.py157
-rw-r--r--module/common/pavement.py412
-rw-r--r--module/common/test_api.py20
-rw-r--r--module/database/DatabaseBackend.py305
-rw-r--r--module/database/FileDatabase.py891
-rw-r--r--module/database/StorageDatabase.py49
-rw-r--r--module/network/HTTPChunk.py292
-rw-r--r--module/network/HTTPDownload.py325
-rw-r--r--module/network/HTTPRequest.py303
-rw-r--r--module/network/XDCCRequest.py159
-rw-r--r--module/plugins/Account.py281
-rw-r--r--module/plugins/AccountManager.py173
-rw-r--r--module/plugins/Container.py61
-rw-r--r--module/plugins/Crypter.py64
-rw-r--r--module/plugins/Hook.py149
-rw-r--r--module/plugins/Hoster.py20
-rw-r--r--module/plugins/Plugin.py629
-rw-r--r--module/plugins/PluginManager.py356
-rw-r--r--module/plugins/accounts/AlldebridCom.py58
-rw-r--r--module/plugins/accounts/BayfilesCom.py36
-rw-r--r--module/plugins/accounts/BitshareCom.py31
-rw-r--r--module/plugins/accounts/CramitIn.py15
-rw-r--r--module/plugins/accounts/CyberlockerCh.py35
-rw-r--r--module/plugins/accounts/CzshareCom.py41
-rw-r--r--module/plugins/accounts/DebridItaliaCom.py36
-rw-r--r--module/plugins/accounts/DepositfilesCom.py32
-rw-r--r--module/plugins/accounts/EasybytezCom.py61
-rw-r--r--module/plugins/accounts/EgoFilesCom.py44
-rw-r--r--module/plugins/accounts/EuroshareEu.py41
-rw-r--r--module/plugins/accounts/FastixRu.py36
-rw-r--r--module/plugins/accounts/FastshareCz.py41
-rw-r--r--module/plugins/accounts/File4safeCom.py18
-rw-r--r--module/plugins/accounts/FilecloudIo.py57
-rw-r--r--module/plugins/accounts/FilefactoryCom.py46
-rw-r--r--module/plugins/accounts/FilejungleCom.py47
-rw-r--r--module/plugins/accounts/FilerNet.py49
-rw-r--r--module/plugins/accounts/FilerioCom.py15
-rw-r--r--module/plugins/accounts/FilesMailRu.py27
-rw-r--r--module/plugins/accounts/FileserveCom.py43
-rw-r--r--module/plugins/accounts/FourSharedCom.py34
-rw-r--r--module/plugins/accounts/FreakshareCom.py39
-rw-r--r--module/plugins/accounts/FreeWayMe.py52
-rw-r--r--module/plugins/accounts/FshareVn.py59
-rw-r--r--module/plugins/accounts/Ftp.py16
-rw-r--r--module/plugins/accounts/HellshareCz.py74
-rw-r--r--module/plugins/accounts/HotfileCom.py74
-rw-r--r--module/plugins/accounts/Http.py16
-rw-r--r--module/plugins/accounts/LetitbitNet.py33
-rw-r--r--module/plugins/accounts/LinksnappyCom.py49
-rw-r--r--module/plugins/accounts/MegaDebridEu.py37
-rw-r--r--module/plugins/accounts/MegasharesCom.py46
-rw-r--r--module/plugins/accounts/MovReelCom.py21
-rw-r--r--module/plugins/accounts/MultiDebridCom.py34
-rw-r--r--module/plugins/accounts/MultishareCz.py44
-rwxr-xr-xmodule/plugins/accounts/NetloadIn.py38
-rw-r--r--module/plugins/accounts/OboomCom.py53
-rw-r--r--module/plugins/accounts/OneFichierCom.py48
-rw-r--r--module/plugins/accounts/OverLoadMe.py35
-rw-r--r--module/plugins/accounts/Premium4Me.py29
-rw-r--r--module/plugins/accounts/PremiumizeMe.py46
-rw-r--r--module/plugins/accounts/QuickshareCz.py39
-rw-r--r--module/plugins/accounts/RPNetBiz.py49
-rw-r--r--module/plugins/accounts/RapidgatorNet.py56
-rw-r--r--module/plugins/accounts/RapidshareCom.py54
-rw-r--r--module/plugins/accounts/RarefileNet.py15
-rw-r--r--module/plugins/accounts/RealdebridCom.py35
-rw-r--r--module/plugins/accounts/RehostTo.py37
-rw-r--r--module/plugins/accounts/RyushareCom.py23
-rw-r--r--module/plugins/accounts/ShareRapidCom.py52
-rw-r--r--module/plugins/accounts/ShareonlineBiz.py42
-rw-r--r--module/plugins/accounts/SimplyPremiumCom.py45
-rw-r--r--module/plugins/accounts/SimplydebridCom.py33
-rw-r--r--module/plugins/accounts/StahnuTo.py34
-rw-r--r--module/plugins/accounts/TurbobitNet.py41
-rw-r--r--module/plugins/accounts/UlozTo.py45
-rw-r--r--module/plugins/accounts/UnrestrictLi.py43
-rw-r--r--module/plugins/accounts/UploadedTo.py53
-rw-r--r--module/plugins/accounts/UploadheroCom.py40
-rw-r--r--module/plugins/accounts/UploadingCom.py40
-rw-r--r--module/plugins/accounts/UptoboxCom.py17
-rw-r--r--module/plugins/accounts/YibaishiwuCom.py38
-rw-r--r--module/plugins/accounts/ZeveraCom.py54
-rw-r--r--module/plugins/container/CCF.py43
-rw-r--r--module/plugins/container/LinkList.py73
-rw-r--r--module/plugins/container/RSDF.py51
-rw-r--r--module/plugins/crypter/BitshareComFolder.py18
-rw-r--r--module/plugins/crypter/C1neonCom.py15
-rw-r--r--module/plugins/crypter/ChipDe.py27
-rw-r--r--module/plugins/crypter/CrockoComFolder.py17
-rw-r--r--module/plugins/crypter/CryptItCom.py15
-rw-r--r--module/plugins/crypter/CzshareComFolder.py31
-rw-r--r--module/plugins/crypter/DDLMusicOrg.py48
-rw-r--r--module/plugins/crypter/DailymotionBatch.py98
-rw-r--r--module/plugins/crypter/DataHuFolder.py43
-rw-r--r--module/plugins/crypter/DdlstorageComFolder.py18
-rw-r--r--module/plugins/crypter/DepositfilesComFolder.py17
-rw-r--r--module/plugins/crypter/Dereferer.py24
-rw-r--r--module/plugins/crypter/DlProtectCom.py62
-rw-r--r--module/plugins/crypter/DontKnowMe.py26
-rw-r--r--module/plugins/crypter/DuckCryptInfo.py59
-rw-r--r--module/plugins/crypter/DuploadOrgFolder.py17
-rw-r--r--module/plugins/crypter/EasybytezComFolder.py20
-rw-r--r--module/plugins/crypter/EmbeduploadCom.py55
-rw-r--r--module/plugins/crypter/FilebeerInfoFolder.py15
-rw-r--r--module/plugins/crypter/FilecloudIoFolder.py18
-rw-r--r--module/plugins/crypter/FilefactoryComFolder.py25
-rw-r--r--module/plugins/crypter/FilerNetFolder.py22
-rw-r--r--module/plugins/crypter/FileserveComFolder.py37
-rw-r--r--module/plugins/crypter/FilestubeCom.py18
-rw-r--r--module/plugins/crypter/FiletramCom.py18
-rw-r--r--module/plugins/crypter/FiredriveComFolder.py28
-rw-r--r--module/plugins/crypter/FourChanOrg.py25
-rw-r--r--module/plugins/crypter/FreakhareComFolder.py35
-rw-r--r--module/plugins/crypter/FreetexthostCom.py25
-rw-r--r--module/plugins/crypter/FshareVnFolder.py17
-rw-r--r--module/plugins/crypter/GooGl.py29
-rw-r--r--module/plugins/crypter/HoerbuchIn.py57
-rw-r--r--module/plugins/crypter/HotfileFolderCom.py30
-rw-r--r--module/plugins/crypter/ILoadTo.py15
-rw-r--r--module/plugins/crypter/ImgurComAlbum.py24
-rw-r--r--module/plugins/crypter/LetitbitNetFolder.py32
-rw-r--r--module/plugins/crypter/LinkSaveIn.py225
-rw-r--r--module/plugins/crypter/LinkdecrypterCom.py91
-rw-r--r--module/plugins/crypter/LixIn.py59
-rw-r--r--module/plugins/crypter/LofCc.py15
-rw-r--r--module/plugins/crypter/MBLinkInfo.py15
-rw-r--r--module/plugins/crypter/MediafireComFolder.py56
-rw-r--r--module/plugins/crypter/Movie2kTo.py15
-rw-r--r--module/plugins/crypter/MultiUpOrg.py35
-rw-r--r--module/plugins/crypter/MultiloadCz.py42
-rw-r--r--module/plugins/crypter/MultiuploadCom.py64
-rw-r--r--module/plugins/crypter/NCryptIn.py303
-rw-r--r--module/plugins/crypter/NetfolderIn.py73
-rw-r--r--module/plugins/crypter/NosvideoCom.py18
-rw-r--r--module/plugins/crypter/OneKhDe.py38
-rwxr-xr-xmodule/plugins/crypter/OronComFolder.py15
-rw-r--r--module/plugins/crypter/PastebinCom.py18
-rw-r--r--module/plugins/crypter/QuickshareCzFolder.py31
-rw-r--r--module/plugins/crypter/RSLayerCom.py15
-rw-r--r--module/plugins/crypter/RelinkUs.py263
-rw-r--r--module/plugins/crypter/SafelinkingNet.py82
-rw-r--r--module/plugins/crypter/SecuredIn.py15
-rw-r--r--module/plugins/crypter/SerienjunkiesOrg.py324
-rw-r--r--module/plugins/crypter/ShareLinksBiz.py269
-rw-r--r--module/plugins/crypter/ShareRapidComFolder.py17
-rw-r--r--module/plugins/crypter/SpeedLoadOrgFolder.py15
-rw-r--r--module/plugins/crypter/StealthTo.py15
-rw-r--r--module/plugins/crypter/TnyCz.py24
-rw-r--r--module/plugins/crypter/TrailerzoneInfo.py15
-rw-r--r--module/plugins/crypter/TurbobitNetFolder.py39
-rw-r--r--module/plugins/crypter/TusfilesNetFolder.py40
-rw-r--r--module/plugins/crypter/UlozToFolder.py45
-rw-r--r--module/plugins/crypter/UploadableChFolder.py21
-rw-r--r--module/plugins/crypter/UploadedToFolder.py38
-rw-r--r--module/plugins/crypter/WiiReloadedOrg.py15
-rw-r--r--module/plugins/crypter/XupPl.py23
-rw-r--r--module/plugins/crypter/YoutubeBatch.py138
-rw-r--r--module/plugins/hooks/AlldebridCom.py28
-rw-r--r--module/plugins/hooks/BypassCaptcha.py127
-rwxr-xr-xmodule/plugins/hooks/Captcha9kw.py156
-rw-r--r--module/plugins/hooks/CaptchaBrotherhood.py157
-rw-r--r--module/plugins/hooks/Checksum.py175
-rw-r--r--module/plugins/hooks/ClickAndLoad.py76
-rw-r--r--module/plugins/hooks/DeathByCaptcha.py202
-rw-r--r--module/plugins/hooks/DebridItaliaCom.py29
-rw-r--r--module/plugins/hooks/DeleteFinished.py69
-rw-r--r--module/plugins/hooks/DownloadScheduler.py75
-rw-r--r--module/plugins/hooks/EasybytezCom.py37
-rw-r--r--module/plugins/hooks/Ev0InFetcher.py81
-rw-r--r--module/plugins/hooks/ExpertDecoders.py94
-rw-r--r--module/plugins/hooks/ExternalScripts.py104
-rw-r--r--module/plugins/hooks/ExtractArchive.py320
-rw-r--r--module/plugins/hooks/FastixRu.py28
-rw-r--r--module/plugins/hooks/FreeWayMe.py26
-rw-r--r--module/plugins/hooks/HotFolder.py65
-rw-r--r--module/plugins/hooks/IRCInterface.py404
-rw-r--r--module/plugins/hooks/ImageTyperz.py143
-rw-r--r--module/plugins/hooks/LinkdecrypterCom.py55
-rw-r--r--module/plugins/hooks/LinksnappyCom.py28
-rw-r--r--module/plugins/hooks/MegaDebridEu.py31
-rw-r--r--module/plugins/hooks/MergeFiles.py76
-rw-r--r--module/plugins/hooks/MultiDebridCom.py29
-rw-r--r--module/plugins/hooks/MultiHome.py75
-rw-r--r--module/plugins/hooks/MultishareCz.py27
-rw-r--r--module/plugins/hooks/OverLoadMe.py31
-rw-r--r--module/plugins/hooks/Premium4Me.py34
-rw-r--r--module/plugins/hooks/PremiumizeMe.py54
-rw-r--r--module/plugins/hooks/RPNetBiz.py52
-rw-r--r--module/plugins/hooks/RealdebridCom.py28
-rw-r--r--module/plugins/hooks/RehostTo.py40
-rw-r--r--module/plugins/hooks/RestartFailed.py42
-rw-r--r--module/plugins/hooks/SimplyPremiumCom.py30
-rw-r--r--module/plugins/hooks/SimplydebridCom.py23
-rw-r--r--module/plugins/hooks/UnSkipOnFail.py85
-rw-r--r--module/plugins/hooks/UnrestrictLi.py31
-rw-r--r--module/plugins/hooks/UpdateManager.py281
-rw-r--r--module/plugins/hooks/WindowsPhoneToastNotify.py59
-rw-r--r--module/plugins/hooks/XFileSharingPro.py78
-rw-r--r--module/plugins/hooks/XMPPInterface.py233
-rw-r--r--module/plugins/hooks/ZeveraCom.py23
-rw-r--r--module/plugins/hoster/AlldebridCom.py87
-rw-r--r--module/plugins/hoster/BasePlugin.py116
-rw-r--r--module/plugins/hoster/BayfilesCom.py84
-rw-r--r--module/plugins/hoster/BezvadataCz.py87
-rw-r--r--module/plugins/hoster/BillionuploadsCom.py23
-rw-r--r--module/plugins/hoster/BitshareCom.py151
-rw-r--r--module/plugins/hoster/BoltsharingCom.py18
-rw-r--r--module/plugins/hoster/CatShareNet.py44
-rw-r--r--module/plugins/hoster/CloudzerNet.py18
-rw-r--r--module/plugins/hoster/CramitIn.py27
-rw-r--r--module/plugins/hoster/CrockoCom.py75
-rw-r--r--module/plugins/hoster/CyberlockerCh.py18
-rw-r--r--module/plugins/hoster/CzshareCom.py148
-rw-r--r--module/plugins/hoster/DailymotionCom.py111
-rw-r--r--module/plugins/hoster/DataHu.py41
-rw-r--r--module/plugins/hoster/DataportCz.py56
-rw-r--r--module/plugins/hoster/DateiTo.py83
-rw-r--r--module/plugins/hoster/DdlstorageCom.py18
-rw-r--r--module/plugins/hoster/DebridItaliaCom.py49
-rw-r--r--module/plugins/hoster/DepositfilesCom.py129
-rw-r--r--module/plugins/hoster/DlFreeFr.py205
-rw-r--r--module/plugins/hoster/DuploadOrg.py22
-rw-r--r--module/plugins/hoster/EasybytezCom.py31
-rw-r--r--module/plugins/hoster/EdiskCz.py54
-rw-r--r--module/plugins/hoster/EgoFilesCom.py89
-rw-r--r--module/plugins/hoster/EpicShareNet.py26
-rw-r--r--module/plugins/hoster/EuroshareEu.py64
-rw-r--r--module/plugins/hoster/ExtabitCom.py77
-rw-r--r--module/plugins/hoster/FastixRu.py71
-rw-r--r--module/plugins/hoster/FastshareCz.py88
-rw-r--r--module/plugins/hoster/File4safeCom.py40
-rw-r--r--module/plugins/hoster/FileApeCom.py18
-rw-r--r--module/plugins/hoster/FileParadoxIn.py25
-rw-r--r--module/plugins/hoster/FileStoreTo.py34
-rw-r--r--module/plugins/hoster/FilebeerInfo.py18
-rw-r--r--module/plugins/hoster/FilecloudIo.py115
-rw-r--r--module/plugins/hoster/FilefactoryCom.py106
-rw-r--r--module/plugins/hoster/FilejungleCom.py28
-rw-r--r--module/plugins/hoster/FileomCom.py39
-rw-r--r--module/plugins/hoster/FilepostCom.py129
-rw-r--r--module/plugins/hoster/FilerNet.py109
-rw-r--r--module/plugins/hoster/FilerioCom.py27
-rw-r--r--module/plugins/hoster/FilesMailRu.py101
-rw-r--r--module/plugins/hoster/FileserveCom.py209
-rw-r--r--module/plugins/hoster/FileshareInUa.py83
-rw-r--r--module/plugins/hoster/FilezyNet.py42
-rw-r--r--module/plugins/hoster/FiredriveCom.py51
-rw-r--r--module/plugins/hoster/FlyFilesNet.py46
-rw-r--r--module/plugins/hoster/FourSharedCom.py59
-rw-r--r--module/plugins/hoster/FreakshareCom.py173
-rw-r--r--module/plugins/hoster/FreeWayMe.py35
-rw-r--r--module/plugins/hoster/FreevideoCz.py18
-rw-r--r--module/plugins/hoster/FshareVn.py120
-rw-r--r--module/plugins/hoster/Ftp.py74
-rw-r--r--module/plugins/hoster/GamefrontCom.py84
-rw-r--r--module/plugins/hoster/GigapetaCom.py64
-rw-r--r--module/plugins/hoster/GooIm.py36
-rw-r--r--module/plugins/hoster/HellshareCz.py47
-rw-r--r--module/plugins/hoster/HellspyCz.py18
-rw-r--r--module/plugins/hoster/HotfileCom.py18
-rw-r--r--module/plugins/hoster/HugefilesNet.py25
-rw-r--r--module/plugins/hoster/HundredEightyUploadCom.py26
-rw-r--r--module/plugins/hoster/IFileWs.py23
-rw-r--r--module/plugins/hoster/IcyFilesCom.py18
-rw-r--r--module/plugins/hoster/IfileIt.py62
-rw-r--r--module/plugins/hoster/IfolderRu.py75
-rw-r--r--module/plugins/hoster/JumbofilesCom.py36
-rw-r--r--module/plugins/hoster/Keep2shareCC.py110
-rw-r--r--module/plugins/hoster/LemUploadsCom.py26
-rw-r--r--module/plugins/hoster/LetitbitNet.py160
-rw-r--r--module/plugins/hoster/LinksnappyCom.py72
-rw-r--r--module/plugins/hoster/LoadTo.py69
-rw-r--r--module/plugins/hoster/LomafileCom.py61
-rw-r--r--module/plugins/hoster/LuckyShareNet.py75
-rw-r--r--module/plugins/hoster/MediafireCom.py125
-rw-r--r--module/plugins/hoster/MegaDebridEu.py89
-rw-r--r--module/plugins/hoster/MegaFilesSe.py23
-rw-r--r--module/plugins/hoster/MegaNz.py132
-rw-r--r--module/plugins/hoster/MegacrypterCom.py53
-rw-r--r--module/plugins/hoster/MegareleaseOrg.py22
-rw-r--r--module/plugins/hoster/MegasharesCom.py105
-rw-r--r--module/plugins/hoster/MovReelCom.py24
-rw-r--r--module/plugins/hoster/MultiDebridCom.py45
-rw-r--r--module/plugins/hoster/MultishareCz.py72
-rw-r--r--module/plugins/hoster/MyvideoDe.py45
-rw-r--r--module/plugins/hoster/NarodRu.py60
-rw-r--r--module/plugins/hoster/NetloadIn.py258
-rw-r--r--module/plugins/hoster/NosuploadCom.py42
-rw-r--r--module/plugins/hoster/NovafileCom.py33
-rw-r--r--module/plugins/hoster/NowDownloadEu.py60
-rw-r--r--module/plugins/hoster/OboomCom.py132
-rw-r--r--module/plugins/hoster/OneFichierCom.py90
-rw-r--r--module/plugins/hoster/OverLoadMe.py82
-rw-r--r--module/plugins/hoster/PandaPlanet.py28
-rw-r--r--module/plugins/hoster/PornhostCom.py76
-rw-r--r--module/plugins/hoster/PornhubCom.py85
-rw-r--r--module/plugins/hoster/PotloadCom.py22
-rw-r--r--module/plugins/hoster/Premium4Me.py72
-rw-r--r--module/plugins/hoster/PremiumizeMe.py55
-rw-r--r--module/plugins/hoster/PromptfileCom.py45
-rw-r--r--module/plugins/hoster/QuickshareCz.py92
-rw-r--r--module/plugins/hoster/RPNetBiz.py80
-rw-r--r--module/plugins/hoster/RapidgatorNet.py191
-rw-r--r--module/plugins/hoster/RapidshareCom.py223
-rw-r--r--module/plugins/hoster/RarefileNet.py39
-rw-r--r--module/plugins/hoster/RealdebridCom.py91
-rw-r--r--module/plugins/hoster/RedtubeCom.py58
-rw-r--r--module/plugins/hoster/RehostTo.py41
-rw-r--r--module/plugins/hoster/RemixshareCom.py59
-rw-r--r--module/plugins/hoster/RgHostNet.py32
-rw-r--r--module/plugins/hoster/RyushareCom.py85
-rw-r--r--module/plugins/hoster/SecureUploadEu.py23
-rw-r--r--module/plugins/hoster/SendmywayCom.py23
-rw-r--r--module/plugins/hoster/SendspaceCom.py60
-rw-r--r--module/plugins/hoster/Share4webCom.py21
-rw-r--r--module/plugins/hoster/Share76Com.py18
-rw-r--r--module/plugins/hoster/ShareFilesCo.py18
-rw-r--r--module/plugins/hoster/ShareRapidCom.py66
-rw-r--r--module/plugins/hoster/SharebeesCom.py18
-rw-r--r--module/plugins/hoster/ShareonlineBiz.py199
-rw-r--r--module/plugins/hoster/ShareplaceCom.py84
-rw-r--r--module/plugins/hoster/ShragleCom.py18
-rw-r--r--module/plugins/hoster/SimplyPremiumCom.py81
-rw-r--r--module/plugins/hoster/SimplydebridCom.py62
-rw-r--r--module/plugins/hoster/SockshareCom.py88
-rw-r--r--module/plugins/hoster/SoundcloudCom.py57
-rw-r--r--module/plugins/hoster/SpeedLoadOrg.py18
-rw-r--r--module/plugins/hoster/SpeedfileCz.py18
-rw-r--r--module/plugins/hoster/SpeedyshareCom.py43
-rw-r--r--module/plugins/hoster/StreamCz.py70
-rw-r--r--module/plugins/hoster/StreamcloudEu.py124
-rw-r--r--module/plugins/hoster/TurbobitNet.py167
-rw-r--r--module/plugins/hoster/TurbouploadCom.py18
-rw-r--r--module/plugins/hoster/TusfilesNet.py31
-rw-r--r--module/plugins/hoster/TwoSharedCom.py39
-rw-r--r--module/plugins/hoster/UlozTo.py158
-rw-r--r--module/plugins/hoster/UloziskoSk.py70
-rw-r--r--module/plugins/hoster/UnibytesCom.py71
-rw-r--r--module/plugins/hoster/UnrestrictLi.py89
-rw-r--r--module/plugins/hoster/UploadStationCom.py18
-rw-r--r--module/plugins/hoster/UploadedTo.py240
-rw-r--r--module/plugins/hoster/UploadheroCom.py77
-rw-r--r--module/plugins/hoster/UploadingCom.py99
-rw-r--r--module/plugins/hoster/UpstoreNet.py75
-rw-r--r--module/plugins/hoster/UptoboxCom.py69
-rw-r--r--module/plugins/hoster/VeehdCom.py79
-rw-r--r--module/plugins/hoster/VeohCom.py51
-rw-r--r--module/plugins/hoster/VidPlayNet.py27
-rw-r--r--module/plugins/hoster/VimeoCom.py72
-rw-r--r--module/plugins/hoster/Vipleech4uCom.py18
-rw-r--r--module/plugins/hoster/WarserverCz.py18
-rw-r--r--module/plugins/hoster/WebshareCz.py60
-rw-r--r--module/plugins/hoster/WrzucTo.py51
-rw-r--r--module/plugins/hoster/WuploadCom.py18
-rw-r--r--module/plugins/hoster/X7To.py18
-rw-r--r--module/plugins/hoster/XFileSharingPro.py324
-rw-r--r--module/plugins/hoster/XHamsterCom.py123
-rw-r--r--module/plugins/hoster/XVideosCom.py28
-rw-r--r--module/plugins/hoster/Xdcc.py205
-rw-r--r--module/plugins/hoster/YibaishiwuCom.py54
-rw-r--r--module/plugins/hoster/YoupornCom.py56
-rw-r--r--module/plugins/hoster/YourfilesTo.py81
-rw-r--r--module/plugins/hoster/YoutubeCom.py180
-rw-r--r--module/plugins/hoster/ZDF.py56
-rw-r--r--module/plugins/hoster/ZeveraCom.py108
-rw-r--r--module/plugins/hoster/ZippyshareCom.py74
-rw-r--r--module/plugins/internal/DeadCrypter.py19
-rw-r--r--module/plugins/internal/DeadHoster.py27
-rw-r--r--module/plugins/internal/MultiHoster.py192
-rw-r--r--module/plugins/internal/SimpleCrypter.py118
-rw-r--r--module/plugins/internal/SimpleHoster.py292
-rw-r--r--module/plugins/internal/UnRar.py212
-rw-r--r--module/plugins/internal/UnZip.py38
-rw-r--r--module/plugins/internal/XFSPAccount.py69
-rw-r--r--module/plugins/ocr/GigasizeCom.py23
-rw-r--r--module/plugins/ocr/LinksaveIn.py148
-rw-r--r--module/plugins/ocr/NetloadIn.py27
-rw-r--r--module/plugins/ocr/ShareonlineBiz.py38
-rw-r--r--module/remote/RemoteManager.py91
-rw-r--r--module/remote/ThriftBackend.py56
-rw-r--r--module/setup.py538
-rw-r--r--module/threads/PluginThread.py675
-rw-r--r--module/threads/ServerThread.py108
-rw-r--r--module/unescape.py3
-rw-r--r--module/webui/__init__.py147
-rw-r--r--module/webui/app/__init__.py3
-rw-r--r--module/webui/app/api.py101
-rw-r--r--module/webui/app/cnl.py168
-rw-r--r--module/webui/app/json.py311
-rw-r--r--module/webui/app/pyload.py544
-rw-r--r--module/webui/app/utils.py138
-rw-r--r--module/webui/servers/lighttpd_default.conf153
-rw-r--r--pyload-cli.py2
-rw-r--r--pyload.py2
-rw-r--r--pyload/Api.py (renamed from module/Api.py)0
-rw-r--r--pyload/CaptchaManager.py (renamed from module/CaptchaManager.py)0
-rw-r--r--pyload/ConfigParser.py373
-rw-r--r--pyload/Core.py663
-rw-r--r--pyload/HookManager.py305
-rw-r--r--pyload/InitHomeDir.py79
-rw-r--r--pyload/PullEvents.py120
-rw-r--r--pyload/PyFile.py284
-rw-r--r--pyload/PyPackage.py79
-rw-r--r--pyload/Scheduler.py (renamed from module/Scheduler.py)0
-rw-r--r--pyload/ThreadManager.py317
-rw-r--r--pyload/__init__.py (renamed from module/__init__.py)0
-rw-r--r--pyload/cli/AddPackage.py (renamed from module/cli/AddPackage.py)0
-rw-r--r--pyload/cli/Cli.py585
-rw-r--r--pyload/cli/Handler.py (renamed from module/cli/Handler.py)0
-rw-r--r--pyload/cli/ManageFiles.py203
-rw-r--r--pyload/cli/__init__.py (renamed from module/cli/__init__.py)0
-rw-r--r--pyload/cli/printer.py (renamed from module/cli/printer.py)0
-rw-r--r--pyload/common/APIExerciser.py157
-rw-r--r--pyload/common/ImportDebugger.py (renamed from module/common/ImportDebugger.py)0
-rw-r--r--pyload/common/JsEngine.py (renamed from module/common/JsEngine.py)0
-rw-r--r--pyload/common/__init__.py (renamed from module/common/__init__.py)0
-rw-r--r--pyload/common/json_layer.py (renamed from module/common/json_layer.py)0
-rw-r--r--pyload/common/packagetools.py (renamed from module/common/packagetools.py)0
-rw-r--r--pyload/common/pavement.py412
-rw-r--r--pyload/common/pylgettext.py (renamed from module/common/pylgettext.py)0
-rw-r--r--pyload/common/test_api.py20
-rw-r--r--pyload/common/test_json.py (renamed from module/common/test_json.py)0
-rw-r--r--pyload/config/default.conf (renamed from module/config/default.conf)0
-rw-r--r--pyload/database/DatabaseBackend.py305
-rw-r--r--pyload/database/FileDatabase.py891
-rw-r--r--pyload/database/StorageDatabase.py49
-rw-r--r--pyload/database/UserDatabase.py (renamed from module/database/UserDatabase.py)0
-rw-r--r--pyload/database/__init__.py (renamed from module/database/__init__.py)0
-rw-r--r--pyload/debug.py (renamed from module/debug.py)0
-rw-r--r--pyload/forwarder.py (renamed from module/forwarder.py)0
-rw-r--r--pyload/lib/BeautifulSoup.py (renamed from module/lib/BeautifulSoup.py)0
-rw-r--r--pyload/lib/Getch.py (renamed from module/lib/Getch.py)0
-rw-r--r--pyload/lib/MultipartPostHandler.py (renamed from module/lib/MultipartPostHandler.py)0
-rw-r--r--pyload/lib/SafeEval.py (renamed from module/lib/SafeEval.py)0
-rw-r--r--pyload/lib/__init__.py (renamed from module/lib/__init__.py)0
-rw-r--r--pyload/lib/beaker/__init__.py (renamed from module/lib/beaker/__init__.py)0
-rw-r--r--pyload/lib/beaker/cache.py (renamed from module/lib/beaker/cache.py)0
-rw-r--r--pyload/lib/beaker/container.py (renamed from module/lib/beaker/container.py)0
-rw-r--r--pyload/lib/beaker/converters.py (renamed from module/lib/beaker/converters.py)0
-rw-r--r--pyload/lib/beaker/crypto/__init__.py (renamed from module/lib/beaker/crypto/__init__.py)0
-rw-r--r--pyload/lib/beaker/crypto/jcecrypto.py (renamed from module/lib/beaker/crypto/jcecrypto.py)0
-rw-r--r--pyload/lib/beaker/crypto/nsscrypto.py (renamed from module/lib/beaker/crypto/nsscrypto.py)0
-rw-r--r--pyload/lib/beaker/crypto/pbkdf2.py (renamed from module/lib/beaker/crypto/pbkdf2.py)0
-rw-r--r--pyload/lib/beaker/crypto/pycrypto.py (renamed from module/lib/beaker/crypto/pycrypto.py)0
-rw-r--r--pyload/lib/beaker/crypto/util.py (renamed from module/lib/beaker/crypto/util.py)0
-rw-r--r--pyload/lib/beaker/exceptions.py (renamed from module/lib/beaker/exceptions.py)0
-rw-r--r--pyload/lib/beaker/ext/__init__.py (renamed from module/lib/beaker/ext/__init__.py)0
-rw-r--r--pyload/lib/beaker/ext/database.py (renamed from module/lib/beaker/ext/database.py)0
-rw-r--r--pyload/lib/beaker/ext/google.py (renamed from module/lib/beaker/ext/google.py)0
-rw-r--r--pyload/lib/beaker/ext/memcached.py (renamed from module/lib/beaker/ext/memcached.py)0
-rw-r--r--pyload/lib/beaker/ext/sqla.py (renamed from module/lib/beaker/ext/sqla.py)0
-rw-r--r--pyload/lib/beaker/middleware.py (renamed from module/lib/beaker/middleware.py)0
-rw-r--r--pyload/lib/beaker/session.py (renamed from module/lib/beaker/session.py)0
-rw-r--r--pyload/lib/beaker/synchronization.py (renamed from module/lib/beaker/synchronization.py)0
-rw-r--r--pyload/lib/beaker/util.py (renamed from module/lib/beaker/util.py)0
-rw-r--r--pyload/lib/bottle.py (renamed from module/lib/bottle.py)0
-rw-r--r--pyload/lib/feedparser.py (renamed from module/lib/feedparser.py)0
-rw-r--r--pyload/lib/jinja2/__init__.py (renamed from module/lib/jinja2/__init__.py)0
-rw-r--r--pyload/lib/jinja2/_compat.py (renamed from module/lib/jinja2/_compat.py)0
-rw-r--r--pyload/lib/jinja2/_stringdefs.py (renamed from module/lib/jinja2/_stringdefs.py)0
-rw-r--r--pyload/lib/jinja2/bccache.py (renamed from module/lib/jinja2/bccache.py)0
-rw-r--r--pyload/lib/jinja2/compiler.py (renamed from module/lib/jinja2/compiler.py)0
-rw-r--r--pyload/lib/jinja2/constants.py (renamed from module/lib/jinja2/constants.py)0
-rw-r--r--pyload/lib/jinja2/debug.py (renamed from module/lib/jinja2/debug.py)0
-rw-r--r--pyload/lib/jinja2/defaults.py (renamed from module/lib/jinja2/defaults.py)0
-rw-r--r--pyload/lib/jinja2/environment.py (renamed from module/lib/jinja2/environment.py)0
-rw-r--r--pyload/lib/jinja2/exceptions.py (renamed from module/lib/jinja2/exceptions.py)0
-rw-r--r--pyload/lib/jinja2/ext.py (renamed from module/lib/jinja2/ext.py)0
-rw-r--r--pyload/lib/jinja2/filters.py (renamed from module/lib/jinja2/filters.py)0
-rw-r--r--pyload/lib/jinja2/lexer.py (renamed from module/lib/jinja2/lexer.py)0
-rw-r--r--pyload/lib/jinja2/loaders.py (renamed from module/lib/jinja2/loaders.py)0
-rw-r--r--pyload/lib/jinja2/meta.py (renamed from module/lib/jinja2/meta.py)0
-rw-r--r--pyload/lib/jinja2/nodes.py (renamed from module/lib/jinja2/nodes.py)0
-rw-r--r--pyload/lib/jinja2/optimizer.py (renamed from module/lib/jinja2/optimizer.py)0
-rw-r--r--pyload/lib/jinja2/parser.py (renamed from module/lib/jinja2/parser.py)0
-rw-r--r--pyload/lib/jinja2/runtime.py (renamed from module/lib/jinja2/runtime.py)0
-rw-r--r--pyload/lib/jinja2/sandbox.py (renamed from module/lib/jinja2/sandbox.py)0
-rw-r--r--pyload/lib/jinja2/tests.py (renamed from module/lib/jinja2/tests.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/__init__.py (renamed from module/lib/jinja2/testsuite/__init__.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/api.py (renamed from module/lib/jinja2/testsuite/api.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/bytecode_cache.py (renamed from module/lib/jinja2/testsuite/bytecode_cache.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/core_tags.py (renamed from module/lib/jinja2/testsuite/core_tags.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/debug.py (renamed from module/lib/jinja2/testsuite/debug.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/doctests.py (renamed from module/lib/jinja2/testsuite/doctests.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/ext.py (renamed from module/lib/jinja2/testsuite/ext.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/filters.py (renamed from module/lib/jinja2/testsuite/filters.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/imports.py (renamed from module/lib/jinja2/testsuite/imports.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/inheritance.py (renamed from module/lib/jinja2/testsuite/inheritance.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/lexnparse.py (renamed from module/lib/jinja2/testsuite/lexnparse.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/loader.py (renamed from module/lib/jinja2/testsuite/loader.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/regression.py (renamed from module/lib/jinja2/testsuite/regression.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/res/__init__.py (renamed from module/lib/jinja2/testsuite/res/__init__.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/res/templates/broken.html (renamed from module/lib/jinja2/testsuite/res/templates/broken.html)0
-rw-r--r--pyload/lib/jinja2/testsuite/res/templates/foo/test.html (renamed from module/lib/jinja2/testsuite/res/templates/foo/test.html)0
-rw-r--r--pyload/lib/jinja2/testsuite/res/templates/syntaxerror.html (renamed from module/lib/jinja2/testsuite/res/templates/syntaxerror.html)0
-rw-r--r--pyload/lib/jinja2/testsuite/res/templates/test.html (renamed from module/lib/jinja2/testsuite/res/templates/test.html)0
-rw-r--r--pyload/lib/jinja2/testsuite/security.py (renamed from module/lib/jinja2/testsuite/security.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/tests.py (renamed from module/lib/jinja2/testsuite/tests.py)0
-rw-r--r--pyload/lib/jinja2/testsuite/utils.py (renamed from module/lib/jinja2/testsuite/utils.py)0
-rw-r--r--pyload/lib/jinja2/utils.py (renamed from module/lib/jinja2/utils.py)0
-rw-r--r--pyload/lib/jinja2/visitor.py (renamed from module/lib/jinja2/visitor.py)0
-rw-r--r--pyload/lib/markupsafe/__init__.py (renamed from module/lib/markupsafe/__init__.py)0
-rw-r--r--pyload/lib/markupsafe/_compat.py (renamed from module/lib/markupsafe/_compat.py)0
-rw-r--r--pyload/lib/markupsafe/_constants.py (renamed from module/lib/markupsafe/_constants.py)0
-rw-r--r--pyload/lib/markupsafe/_native.py (renamed from module/lib/markupsafe/_native.py)0
-rw-r--r--pyload/lib/markupsafe/_speedups.c (renamed from module/lib/markupsafe/_speedups.c)0
-rw-r--r--pyload/lib/markupsafe/tests.py (renamed from module/lib/markupsafe/tests.py)0
-rw-r--r--pyload/lib/rename_process.py (renamed from module/lib/rename_process.py)0
-rw-r--r--pyload/lib/simplejson/__init__.py (renamed from module/lib/simplejson/__init__.py)0
-rw-r--r--pyload/lib/simplejson/compat.py (renamed from module/lib/simplejson/compat.py)0
-rw-r--r--pyload/lib/simplejson/decoder.py (renamed from module/lib/simplejson/decoder.py)0
-rw-r--r--pyload/lib/simplejson/encoder.py (renamed from module/lib/simplejson/encoder.py)0
-rw-r--r--pyload/lib/simplejson/ordered_dict.py (renamed from module/lib/simplejson/ordered_dict.py)0
-rw-r--r--pyload/lib/simplejson/scanner.py (renamed from module/lib/simplejson/scanner.py)0
-rw-r--r--pyload/lib/simplejson/tool.py (renamed from module/lib/simplejson/tool.py)0
-rw-r--r--pyload/lib/thrift/TSCons.py (renamed from module/lib/thrift/TSCons.py)0
-rw-r--r--pyload/lib/thrift/TSerialization.py (renamed from module/lib/thrift/TSerialization.py)0
-rw-r--r--pyload/lib/thrift/TTornado.py (renamed from module/lib/thrift/TTornado.py)0
-rw-r--r--pyload/lib/thrift/Thrift.py (renamed from module/lib/thrift/Thrift.py)0
-rw-r--r--pyload/lib/thrift/__init__.py (renamed from module/lib/thrift/__init__.py)0
-rw-r--r--pyload/lib/thrift/protocol/TBase.py (renamed from module/lib/thrift/protocol/TBase.py)0
-rw-r--r--pyload/lib/thrift/protocol/TBinaryProtocol.py (renamed from module/lib/thrift/protocol/TBinaryProtocol.py)0
-rw-r--r--pyload/lib/thrift/protocol/TCompactProtocol.py (renamed from module/lib/thrift/protocol/TCompactProtocol.py)0
-rw-r--r--pyload/lib/thrift/protocol/TJSONProtocol.py (renamed from module/lib/thrift/protocol/TJSONProtocol.py)0
-rw-r--r--pyload/lib/thrift/protocol/TProtocol.py (renamed from module/lib/thrift/protocol/TProtocol.py)0
-rw-r--r--pyload/lib/thrift/protocol/__init__.py (renamed from module/lib/thrift/protocol/__init__.py)0
-rw-r--r--pyload/lib/thrift/protocol/fastbinary.c (renamed from module/lib/thrift/protocol/fastbinary.c)0
-rw-r--r--pyload/lib/thrift/server/THttpServer.py (renamed from module/lib/thrift/server/THttpServer.py)0
-rw-r--r--pyload/lib/thrift/server/TNonblockingServer.py (renamed from module/lib/thrift/server/TNonblockingServer.py)0
-rw-r--r--pyload/lib/thrift/server/TProcessPoolServer.py (renamed from module/lib/thrift/server/TProcessPoolServer.py)0
-rw-r--r--pyload/lib/thrift/server/TServer.py (renamed from module/lib/thrift/server/TServer.py)0
-rw-r--r--pyload/lib/thrift/server/__init__.py (renamed from module/lib/thrift/server/__init__.py)0
-rw-r--r--pyload/lib/thrift/transport/THttpClient.py (renamed from module/lib/thrift/transport/THttpClient.py)0
-rw-r--r--pyload/lib/thrift/transport/TSSLSocket.py (renamed from module/lib/thrift/transport/TSSLSocket.py)0
-rw-r--r--pyload/lib/thrift/transport/TSocket.py (renamed from module/lib/thrift/transport/TSocket.py)0
-rw-r--r--pyload/lib/thrift/transport/TTransport.py (renamed from module/lib/thrift/transport/TTransport.py)0
-rw-r--r--pyload/lib/thrift/transport/TTwisted.py (renamed from module/lib/thrift/transport/TTwisted.py)0
-rw-r--r--pyload/lib/thrift/transport/TZlibTransport.py (renamed from module/lib/thrift/transport/TZlibTransport.py)0
-rw-r--r--pyload/lib/thrift/transport/__init__.py (renamed from module/lib/thrift/transport/__init__.py)0
-rw-r--r--pyload/lib/wsgiserver/LICENSE.txt (renamed from module/lib/wsgiserver/LICENSE.txt)0
-rw-r--r--pyload/lib/wsgiserver/__init__.py (renamed from module/lib/wsgiserver/__init__.py)0
-rw-r--r--pyload/network/Browser.py (renamed from module/network/Browser.py)0
-rw-r--r--pyload/network/Bucket.py (renamed from module/network/Bucket.py)0
-rw-r--r--pyload/network/CookieJar.py (renamed from module/network/CookieJar.py)0
-rw-r--r--pyload/network/HTTPChunk.py292
-rw-r--r--pyload/network/HTTPDownload.py325
-rw-r--r--pyload/network/HTTPRequest.py303
-rw-r--r--pyload/network/RequestFactory.py (renamed from module/network/RequestFactory.py)0
-rw-r--r--pyload/network/XDCCRequest.py159
-rw-r--r--pyload/network/__init__.py (renamed from module/network/__init__.py)0
-rw-r--r--pyload/plugins/Account.py281
-rw-r--r--pyload/plugins/AccountManager.py173
-rw-r--r--pyload/plugins/Container.py61
-rw-r--r--pyload/plugins/Crypter.py64
-rw-r--r--pyload/plugins/Hook.py149
-rw-r--r--pyload/plugins/Hoster.py20
-rw-r--r--pyload/plugins/OCR.py (renamed from module/plugins/OCR.py)0
-rw-r--r--pyload/plugins/Plugin.py629
-rw-r--r--pyload/plugins/PluginManager.py356
-rw-r--r--pyload/plugins/README.md (renamed from module/plugins/README.md)0
-rw-r--r--pyload/plugins/__init__.py (renamed from module/plugins/__init__.py)0
-rw-r--r--pyload/plugins/accounts/AlldebridCom.py58
-rw-r--r--pyload/plugins/accounts/BayfilesCom.py36
-rw-r--r--pyload/plugins/accounts/BitshareCom.py31
-rw-r--r--pyload/plugins/accounts/CramitIn.py15
-rw-r--r--pyload/plugins/accounts/CyberlockerCh.py35
-rw-r--r--pyload/plugins/accounts/CzshareCom.py41
-rw-r--r--pyload/plugins/accounts/DebridItaliaCom.py36
-rw-r--r--pyload/plugins/accounts/DepositfilesCom.py32
-rw-r--r--pyload/plugins/accounts/EasybytezCom.py61
-rw-r--r--pyload/plugins/accounts/EgoFilesCom.py44
-rw-r--r--pyload/plugins/accounts/EuroshareEu.py41
-rw-r--r--pyload/plugins/accounts/FastixRu.py36
-rw-r--r--pyload/plugins/accounts/FastshareCz.py41
-rw-r--r--pyload/plugins/accounts/File4safeCom.py18
-rw-r--r--pyload/plugins/accounts/FilecloudIo.py57
-rw-r--r--pyload/plugins/accounts/FilefactoryCom.py46
-rw-r--r--pyload/plugins/accounts/FilejungleCom.py47
-rw-r--r--pyload/plugins/accounts/FilerNet.py49
-rw-r--r--pyload/plugins/accounts/FilerioCom.py15
-rw-r--r--pyload/plugins/accounts/FilesMailRu.py27
-rw-r--r--pyload/plugins/accounts/FileserveCom.py43
-rw-r--r--pyload/plugins/accounts/FourSharedCom.py34
-rw-r--r--pyload/plugins/accounts/FreakshareCom.py39
-rw-r--r--pyload/plugins/accounts/FreeWayMe.py52
-rw-r--r--pyload/plugins/accounts/FshareVn.py59
-rw-r--r--pyload/plugins/accounts/Ftp.py16
-rw-r--r--pyload/plugins/accounts/HellshareCz.py74
-rw-r--r--pyload/plugins/accounts/HotfileCom.py74
-rw-r--r--pyload/plugins/accounts/Http.py16
-rw-r--r--pyload/plugins/accounts/LetitbitNet.py33
-rw-r--r--pyload/plugins/accounts/LinksnappyCom.py49
-rw-r--r--pyload/plugins/accounts/MegaDebridEu.py37
-rw-r--r--pyload/plugins/accounts/MegasharesCom.py46
-rw-r--r--pyload/plugins/accounts/MovReelCom.py21
-rw-r--r--pyload/plugins/accounts/MultiDebridCom.py34
-rw-r--r--pyload/plugins/accounts/MultishareCz.py44
-rw-r--r--pyload/plugins/accounts/NetloadIn.py38
-rw-r--r--pyload/plugins/accounts/OboomCom.py53
-rw-r--r--pyload/plugins/accounts/OneFichierCom.py48
-rw-r--r--pyload/plugins/accounts/OverLoadMe.py35
-rw-r--r--pyload/plugins/accounts/Premium4Me.py29
-rw-r--r--pyload/plugins/accounts/PremiumizeMe.py46
-rw-r--r--pyload/plugins/accounts/QuickshareCz.py39
-rw-r--r--pyload/plugins/accounts/RPNetBiz.py49
-rw-r--r--pyload/plugins/accounts/RapidgatorNet.py56
-rw-r--r--pyload/plugins/accounts/RapidshareCom.py54
-rw-r--r--pyload/plugins/accounts/RarefileNet.py15
-rw-r--r--pyload/plugins/accounts/RealdebridCom.py35
-rw-r--r--pyload/plugins/accounts/RehostTo.py37
-rw-r--r--pyload/plugins/accounts/RyushareCom.py23
-rw-r--r--pyload/plugins/accounts/ShareRapidCom.py52
-rw-r--r--pyload/plugins/accounts/ShareonlineBiz.py42
-rw-r--r--pyload/plugins/accounts/SimplyPremiumCom.py45
-rw-r--r--pyload/plugins/accounts/SimplydebridCom.py33
-rw-r--r--pyload/plugins/accounts/StahnuTo.py34
-rw-r--r--pyload/plugins/accounts/TurbobitNet.py41
-rw-r--r--pyload/plugins/accounts/UlozTo.py45
-rw-r--r--pyload/plugins/accounts/UnrestrictLi.py43
-rw-r--r--pyload/plugins/accounts/UploadedTo.py53
-rw-r--r--pyload/plugins/accounts/UploadheroCom.py40
-rw-r--r--pyload/plugins/accounts/UploadingCom.py40
-rw-r--r--pyload/plugins/accounts/UptoboxCom.py17
-rw-r--r--pyload/plugins/accounts/YibaishiwuCom.py38
-rw-r--r--pyload/plugins/accounts/ZeveraCom.py54
-rw-r--r--pyload/plugins/accounts/__init__.py (renamed from module/plugins/accounts/__init__.py)0
-rw-r--r--pyload/plugins/container/CCF.py43
-rw-r--r--pyload/plugins/container/DLC_25.pyc (renamed from module/plugins/container/DLC_25.pyc)bin8340 -> 8340 bytes
-rw-r--r--pyload/plugins/container/DLC_26.pyc (renamed from module/plugins/container/DLC_26.pyc)bin8313 -> 8313 bytes
-rw-r--r--pyload/plugins/container/DLC_27.pyc (renamed from module/plugins/container/DLC_27.pyc)bin8237 -> 8237 bytes
-rw-r--r--pyload/plugins/container/LinkList.py73
-rw-r--r--pyload/plugins/container/RSDF.py51
-rw-r--r--pyload/plugins/container/__init__.py (renamed from module/plugins/container/__init__.py)0
-rw-r--r--pyload/plugins/crypter/BitshareComFolder.py18
-rw-r--r--pyload/plugins/crypter/C1neonCom.py15
-rw-r--r--pyload/plugins/crypter/ChipDe.py27
-rw-r--r--pyload/plugins/crypter/CrockoComFolder.py17
-rw-r--r--pyload/plugins/crypter/CryptItCom.py15
-rw-r--r--pyload/plugins/crypter/CzshareComFolder.py31
-rw-r--r--pyload/plugins/crypter/DDLMusicOrg.py48
-rw-r--r--pyload/plugins/crypter/DailymotionBatch.py98
-rw-r--r--pyload/plugins/crypter/DataHuFolder.py43
-rw-r--r--pyload/plugins/crypter/DdlstorageComFolder.py18
-rw-r--r--pyload/plugins/crypter/DepositfilesComFolder.py17
-rw-r--r--pyload/plugins/crypter/Dereferer.py24
-rw-r--r--pyload/plugins/crypter/DlProtectCom.py62
-rw-r--r--pyload/plugins/crypter/DontKnowMe.py26
-rw-r--r--pyload/plugins/crypter/DuckCryptInfo.py59
-rw-r--r--pyload/plugins/crypter/DuploadOrgFolder.py17
-rw-r--r--pyload/plugins/crypter/EasybytezComFolder.py20
-rw-r--r--pyload/plugins/crypter/EmbeduploadCom.py55
-rw-r--r--pyload/plugins/crypter/FilebeerInfoFolder.py15
-rw-r--r--pyload/plugins/crypter/FilecloudIoFolder.py18
-rw-r--r--pyload/plugins/crypter/FilefactoryComFolder.py25
-rw-r--r--pyload/plugins/crypter/FilerNetFolder.py22
-rw-r--r--pyload/plugins/crypter/FileserveComFolder.py37
-rw-r--r--pyload/plugins/crypter/FilestubeCom.py18
-rw-r--r--pyload/plugins/crypter/FiletramCom.py18
-rw-r--r--pyload/plugins/crypter/FiredriveComFolder.py28
-rw-r--r--pyload/plugins/crypter/FourChanOrg.py25
-rw-r--r--pyload/plugins/crypter/FreakhareComFolder.py35
-rw-r--r--pyload/plugins/crypter/FreetexthostCom.py25
-rw-r--r--pyload/plugins/crypter/FshareVnFolder.py17
-rw-r--r--pyload/plugins/crypter/GooGl.py29
-rw-r--r--pyload/plugins/crypter/HoerbuchIn.py57
-rw-r--r--pyload/plugins/crypter/HotfileFolderCom.py30
-rw-r--r--pyload/plugins/crypter/ILoadTo.py15
-rw-r--r--pyload/plugins/crypter/ImgurComAlbum.py24
-rw-r--r--pyload/plugins/crypter/LetitbitNetFolder.py32
-rw-r--r--pyload/plugins/crypter/LinkSaveIn.py225
-rw-r--r--pyload/plugins/crypter/LinkdecrypterCom.py91
-rw-r--r--pyload/plugins/crypter/LixIn.py59
-rw-r--r--pyload/plugins/crypter/LofCc.py15
-rw-r--r--pyload/plugins/crypter/MBLinkInfo.py15
-rw-r--r--pyload/plugins/crypter/MediafireComFolder.py56
-rw-r--r--pyload/plugins/crypter/Movie2kTo.py15
-rw-r--r--pyload/plugins/crypter/MultiUpOrg.py35
-rw-r--r--pyload/plugins/crypter/MultiloadCz.py42
-rw-r--r--pyload/plugins/crypter/MultiuploadCom.py64
-rw-r--r--pyload/plugins/crypter/NCryptIn.py303
-rw-r--r--pyload/plugins/crypter/NetfolderIn.py73
-rw-r--r--pyload/plugins/crypter/NosvideoCom.py18
-rw-r--r--pyload/plugins/crypter/OneKhDe.py38
-rw-r--r--pyload/plugins/crypter/OronComFolder.py15
-rw-r--r--pyload/plugins/crypter/PastebinCom.py18
-rw-r--r--pyload/plugins/crypter/QuickshareCzFolder.py31
-rw-r--r--pyload/plugins/crypter/RSLayerCom.py15
-rw-r--r--pyload/plugins/crypter/RelinkUs.py263
-rw-r--r--pyload/plugins/crypter/SafelinkingNet.py82
-rw-r--r--pyload/plugins/crypter/SecuredIn.py15
-rw-r--r--pyload/plugins/crypter/SerienjunkiesOrg.py324
-rw-r--r--pyload/plugins/crypter/ShareLinksBiz.py269
-rw-r--r--pyload/plugins/crypter/ShareRapidComFolder.py17
-rw-r--r--pyload/plugins/crypter/SpeedLoadOrgFolder.py15
-rw-r--r--pyload/plugins/crypter/StealthTo.py15
-rw-r--r--pyload/plugins/crypter/TnyCz.py24
-rw-r--r--pyload/plugins/crypter/TrailerzoneInfo.py15
-rw-r--r--pyload/plugins/crypter/TurbobitNetFolder.py39
-rw-r--r--pyload/plugins/crypter/TusfilesNetFolder.py40
-rw-r--r--pyload/plugins/crypter/UlozToFolder.py45
-rw-r--r--pyload/plugins/crypter/UploadableChFolder.py21
-rw-r--r--pyload/plugins/crypter/UploadedToFolder.py38
-rw-r--r--pyload/plugins/crypter/WiiReloadedOrg.py15
-rw-r--r--pyload/plugins/crypter/XupPl.py23
-rw-r--r--pyload/plugins/crypter/YoutubeBatch.py138
-rw-r--r--pyload/plugins/crypter/__init__.py (renamed from module/plugins/crypter/__init__.py)0
-rw-r--r--pyload/plugins/hooks/AlldebridCom.py28
-rw-r--r--pyload/plugins/hooks/BypassCaptcha.py127
-rw-r--r--pyload/plugins/hooks/Captcha9kw.py156
-rw-r--r--pyload/plugins/hooks/CaptchaBrotherhood.py157
-rw-r--r--pyload/plugins/hooks/Checksum.py175
-rw-r--r--pyload/plugins/hooks/ClickAndLoad.py76
-rw-r--r--pyload/plugins/hooks/DeathByCaptcha.py202
-rw-r--r--pyload/plugins/hooks/DebridItaliaCom.py29
-rw-r--r--pyload/plugins/hooks/DeleteFinished.py69
-rw-r--r--pyload/plugins/hooks/DownloadScheduler.py75
-rw-r--r--pyload/plugins/hooks/EasybytezCom.py37
-rw-r--r--pyload/plugins/hooks/Ev0InFetcher.py81
-rw-r--r--pyload/plugins/hooks/ExpertDecoders.py94
-rw-r--r--pyload/plugins/hooks/ExternalScripts.py104
-rw-r--r--pyload/plugins/hooks/ExtractArchive.py320
-rw-r--r--pyload/plugins/hooks/FastixRu.py28
-rw-r--r--pyload/plugins/hooks/FreeWayMe.py26
-rw-r--r--pyload/plugins/hooks/HotFolder.py65
-rw-r--r--pyload/plugins/hooks/IRCInterface.py404
-rw-r--r--pyload/plugins/hooks/ImageTyperz.py143
-rw-r--r--pyload/plugins/hooks/LinkdecrypterCom.py55
-rw-r--r--pyload/plugins/hooks/LinksnappyCom.py28
-rw-r--r--pyload/plugins/hooks/MegaDebridEu.py31
-rw-r--r--pyload/plugins/hooks/MergeFiles.py76
-rw-r--r--pyload/plugins/hooks/MultiDebridCom.py29
-rw-r--r--pyload/plugins/hooks/MultiHome.py75
-rw-r--r--pyload/plugins/hooks/MultishareCz.py27
-rw-r--r--pyload/plugins/hooks/OverLoadMe.py31
-rw-r--r--pyload/plugins/hooks/Premium4Me.py34
-rw-r--r--pyload/plugins/hooks/PremiumizeMe.py54
-rw-r--r--pyload/plugins/hooks/RPNetBiz.py52
-rw-r--r--pyload/plugins/hooks/RealdebridCom.py28
-rw-r--r--pyload/plugins/hooks/RehostTo.py40
-rw-r--r--pyload/plugins/hooks/RestartFailed.py42
-rw-r--r--pyload/plugins/hooks/SimplyPremiumCom.py30
-rw-r--r--pyload/plugins/hooks/SimplydebridCom.py23
-rw-r--r--pyload/plugins/hooks/UnSkipOnFail.py85
-rw-r--r--pyload/plugins/hooks/UnrestrictLi.py31
-rw-r--r--pyload/plugins/hooks/UpdateManager.py281
-rw-r--r--pyload/plugins/hooks/WindowsPhoneToastNotify.py59
-rw-r--r--pyload/plugins/hooks/XFileSharingPro.py78
-rw-r--r--pyload/plugins/hooks/XMPPInterface.py233
-rw-r--r--pyload/plugins/hooks/ZeveraCom.py23
-rw-r--r--pyload/plugins/hooks/__init__.py (renamed from module/plugins/hooks/__init__.py)0
-rw-r--r--pyload/plugins/hoster/AlldebridCom.py87
-rw-r--r--pyload/plugins/hoster/BasePlugin.py116
-rw-r--r--pyload/plugins/hoster/BayfilesCom.py84
-rw-r--r--pyload/plugins/hoster/BezvadataCz.py87
-rw-r--r--pyload/plugins/hoster/BillionuploadsCom.py23
-rw-r--r--pyload/plugins/hoster/BitshareCom.py151
-rw-r--r--pyload/plugins/hoster/BoltsharingCom.py18
-rw-r--r--pyload/plugins/hoster/CatShareNet.py44
-rw-r--r--pyload/plugins/hoster/CloudzerNet.py18
-rw-r--r--pyload/plugins/hoster/CramitIn.py27
-rw-r--r--pyload/plugins/hoster/CrockoCom.py75
-rw-r--r--pyload/plugins/hoster/CyberlockerCh.py18
-rw-r--r--pyload/plugins/hoster/CzshareCom.py148
-rw-r--r--pyload/plugins/hoster/DailymotionCom.py111
-rw-r--r--pyload/plugins/hoster/DataHu.py41
-rw-r--r--pyload/plugins/hoster/DataportCz.py56
-rw-r--r--pyload/plugins/hoster/DateiTo.py83
-rw-r--r--pyload/plugins/hoster/DdlstorageCom.py18
-rw-r--r--pyload/plugins/hoster/DebridItaliaCom.py49
-rw-r--r--pyload/plugins/hoster/DepositfilesCom.py129
-rw-r--r--pyload/plugins/hoster/DlFreeFr.py205
-rw-r--r--pyload/plugins/hoster/DuploadOrg.py22
-rw-r--r--pyload/plugins/hoster/EasybytezCom.py31
-rw-r--r--pyload/plugins/hoster/EdiskCz.py54
-rw-r--r--pyload/plugins/hoster/EgoFilesCom.py89
-rw-r--r--pyload/plugins/hoster/EpicShareNet.py26
-rw-r--r--pyload/plugins/hoster/EuroshareEu.py64
-rw-r--r--pyload/plugins/hoster/ExtabitCom.py77
-rw-r--r--pyload/plugins/hoster/FastixRu.py71
-rw-r--r--pyload/plugins/hoster/FastshareCz.py88
-rw-r--r--pyload/plugins/hoster/File4safeCom.py40
-rw-r--r--pyload/plugins/hoster/FileApeCom.py18
-rw-r--r--pyload/plugins/hoster/FileParadoxIn.py25
-rw-r--r--pyload/plugins/hoster/FileStoreTo.py34
-rw-r--r--pyload/plugins/hoster/FilebeerInfo.py18
-rw-r--r--pyload/plugins/hoster/FilecloudIo.py115
-rw-r--r--pyload/plugins/hoster/FilefactoryCom.py106
-rw-r--r--pyload/plugins/hoster/FilejungleCom.py28
-rw-r--r--pyload/plugins/hoster/FileomCom.py39
-rw-r--r--pyload/plugins/hoster/FilepostCom.py129
-rw-r--r--pyload/plugins/hoster/FilerNet.py109
-rw-r--r--pyload/plugins/hoster/FilerioCom.py27
-rw-r--r--pyload/plugins/hoster/FilesMailRu.py101
-rw-r--r--pyload/plugins/hoster/FileserveCom.py209
-rw-r--r--pyload/plugins/hoster/FileshareInUa.py83
-rw-r--r--pyload/plugins/hoster/FilezyNet.py42
-rw-r--r--pyload/plugins/hoster/FiredriveCom.py51
-rw-r--r--pyload/plugins/hoster/FlyFilesNet.py46
-rw-r--r--pyload/plugins/hoster/FourSharedCom.py59
-rw-r--r--pyload/plugins/hoster/FreakshareCom.py173
-rw-r--r--pyload/plugins/hoster/FreeWayMe.py35
-rw-r--r--pyload/plugins/hoster/FreevideoCz.py18
-rw-r--r--pyload/plugins/hoster/FshareVn.py120
-rw-r--r--pyload/plugins/hoster/Ftp.py74
-rw-r--r--pyload/plugins/hoster/GamefrontCom.py84
-rw-r--r--pyload/plugins/hoster/GigapetaCom.py64
-rw-r--r--pyload/plugins/hoster/GooIm.py36
-rw-r--r--pyload/plugins/hoster/HellshareCz.py47
-rw-r--r--pyload/plugins/hoster/HellspyCz.py18
-rw-r--r--pyload/plugins/hoster/HotfileCom.py18
-rw-r--r--pyload/plugins/hoster/HugefilesNet.py25
-rw-r--r--pyload/plugins/hoster/HundredEightyUploadCom.py26
-rw-r--r--pyload/plugins/hoster/IFileWs.py23
-rw-r--r--pyload/plugins/hoster/IcyFilesCom.py18
-rw-r--r--pyload/plugins/hoster/IfileIt.py62
-rw-r--r--pyload/plugins/hoster/IfolderRu.py75
-rw-r--r--pyload/plugins/hoster/JumbofilesCom.py36
-rw-r--r--pyload/plugins/hoster/Keep2shareCC.py110
-rw-r--r--pyload/plugins/hoster/LemUploadsCom.py26
-rw-r--r--pyload/plugins/hoster/LetitbitNet.py160
-rw-r--r--pyload/plugins/hoster/LinksnappyCom.py72
-rw-r--r--pyload/plugins/hoster/LoadTo.py69
-rw-r--r--pyload/plugins/hoster/LomafileCom.py61
-rw-r--r--pyload/plugins/hoster/LuckyShareNet.py75
-rw-r--r--pyload/plugins/hoster/MediafireCom.py125
-rw-r--r--pyload/plugins/hoster/MegaDebridEu.py89
-rw-r--r--pyload/plugins/hoster/MegaFilesSe.py23
-rw-r--r--pyload/plugins/hoster/MegaNz.py132
-rw-r--r--pyload/plugins/hoster/MegacrypterCom.py53
-rw-r--r--pyload/plugins/hoster/MegareleaseOrg.py22
-rw-r--r--pyload/plugins/hoster/MegasharesCom.py105
-rw-r--r--pyload/plugins/hoster/MovReelCom.py24
-rw-r--r--pyload/plugins/hoster/MultiDebridCom.py45
-rw-r--r--pyload/plugins/hoster/MultishareCz.py72
-rw-r--r--pyload/plugins/hoster/MyvideoDe.py45
-rw-r--r--pyload/plugins/hoster/NarodRu.py60
-rw-r--r--pyload/plugins/hoster/NetloadIn.py258
-rw-r--r--pyload/plugins/hoster/NosuploadCom.py42
-rw-r--r--pyload/plugins/hoster/NovafileCom.py33
-rw-r--r--pyload/plugins/hoster/NowDownloadEu.py60
-rw-r--r--pyload/plugins/hoster/OboomCom.py132
-rw-r--r--pyload/plugins/hoster/OneFichierCom.py90
-rw-r--r--pyload/plugins/hoster/OverLoadMe.py82
-rw-r--r--pyload/plugins/hoster/PandaPlanet.py28
-rw-r--r--pyload/plugins/hoster/PornhostCom.py76
-rw-r--r--pyload/plugins/hoster/PornhubCom.py85
-rw-r--r--pyload/plugins/hoster/PotloadCom.py22
-rw-r--r--pyload/plugins/hoster/Premium4Me.py72
-rw-r--r--pyload/plugins/hoster/PremiumizeMe.py55
-rw-r--r--pyload/plugins/hoster/PromptfileCom.py45
-rw-r--r--pyload/plugins/hoster/QuickshareCz.py92
-rw-r--r--pyload/plugins/hoster/RPNetBiz.py80
-rw-r--r--pyload/plugins/hoster/RapidgatorNet.py191
-rw-r--r--pyload/plugins/hoster/RapidshareCom.py223
-rw-r--r--pyload/plugins/hoster/RarefileNet.py39
-rw-r--r--pyload/plugins/hoster/RealdebridCom.py91
-rw-r--r--pyload/plugins/hoster/RedtubeCom.py58
-rw-r--r--pyload/plugins/hoster/RehostTo.py41
-rw-r--r--pyload/plugins/hoster/RemixshareCom.py59
-rw-r--r--pyload/plugins/hoster/RgHostNet.py32
-rw-r--r--pyload/plugins/hoster/RyushareCom.py85
-rw-r--r--pyload/plugins/hoster/SecureUploadEu.py23
-rw-r--r--pyload/plugins/hoster/SendmywayCom.py23
-rw-r--r--pyload/plugins/hoster/SendspaceCom.py60
-rw-r--r--pyload/plugins/hoster/Share4webCom.py21
-rw-r--r--pyload/plugins/hoster/Share76Com.py18
-rw-r--r--pyload/plugins/hoster/ShareFilesCo.py18
-rw-r--r--pyload/plugins/hoster/ShareRapidCom.py66
-rw-r--r--pyload/plugins/hoster/SharebeesCom.py18
-rw-r--r--pyload/plugins/hoster/ShareonlineBiz.py199
-rw-r--r--pyload/plugins/hoster/ShareplaceCom.py84
-rw-r--r--pyload/plugins/hoster/ShragleCom.py18
-rw-r--r--pyload/plugins/hoster/SimplyPremiumCom.py81
-rw-r--r--pyload/plugins/hoster/SimplydebridCom.py62
-rw-r--r--pyload/plugins/hoster/SockshareCom.py88
-rw-r--r--pyload/plugins/hoster/SoundcloudCom.py57
-rw-r--r--pyload/plugins/hoster/SpeedLoadOrg.py18
-rw-r--r--pyload/plugins/hoster/SpeedfileCz.py18
-rw-r--r--pyload/plugins/hoster/SpeedyshareCom.py43
-rw-r--r--pyload/plugins/hoster/StreamCz.py70
-rw-r--r--pyload/plugins/hoster/StreamcloudEu.py124
-rw-r--r--pyload/plugins/hoster/TurbobitNet.py167
-rw-r--r--pyload/plugins/hoster/TurbouploadCom.py18
-rw-r--r--pyload/plugins/hoster/TusfilesNet.py31
-rw-r--r--pyload/plugins/hoster/TwoSharedCom.py39
-rw-r--r--pyload/plugins/hoster/UlozTo.py158
-rw-r--r--pyload/plugins/hoster/UloziskoSk.py70
-rw-r--r--pyload/plugins/hoster/UnibytesCom.py71
-rw-r--r--pyload/plugins/hoster/UnrestrictLi.py89
-rw-r--r--pyload/plugins/hoster/UploadStationCom.py18
-rw-r--r--pyload/plugins/hoster/UploadedTo.py240
-rw-r--r--pyload/plugins/hoster/UploadheroCom.py77
-rw-r--r--pyload/plugins/hoster/UploadingCom.py99
-rw-r--r--pyload/plugins/hoster/UpstoreNet.py75
-rw-r--r--pyload/plugins/hoster/UptoboxCom.py69
-rw-r--r--pyload/plugins/hoster/VeehdCom.py79
-rw-r--r--pyload/plugins/hoster/VeohCom.py51
-rw-r--r--pyload/plugins/hoster/VidPlayNet.py27
-rw-r--r--pyload/plugins/hoster/VimeoCom.py72
-rw-r--r--pyload/plugins/hoster/Vipleech4uCom.py18
-rw-r--r--pyload/plugins/hoster/WarserverCz.py18
-rw-r--r--pyload/plugins/hoster/WebshareCz.py60
-rw-r--r--pyload/plugins/hoster/WrzucTo.py51
-rw-r--r--pyload/plugins/hoster/WuploadCom.py18
-rw-r--r--pyload/plugins/hoster/X7To.py18
-rw-r--r--pyload/plugins/hoster/XFileSharingPro.py324
-rw-r--r--pyload/plugins/hoster/XHamsterCom.py123
-rw-r--r--pyload/plugins/hoster/XVideosCom.py28
-rw-r--r--pyload/plugins/hoster/Xdcc.py205
-rw-r--r--pyload/plugins/hoster/YibaishiwuCom.py54
-rw-r--r--pyload/plugins/hoster/YoupornCom.py56
-rw-r--r--pyload/plugins/hoster/YourfilesTo.py81
-rw-r--r--pyload/plugins/hoster/YoutubeCom.py180
-rw-r--r--pyload/plugins/hoster/ZDF.py56
-rw-r--r--pyload/plugins/hoster/ZeveraCom.py108
-rw-r--r--pyload/plugins/hoster/ZippyshareCom.py74
-rw-r--r--pyload/plugins/hoster/__init__.py (renamed from module/plugins/hoster/__init__.py)0
-rw-r--r--pyload/plugins/internal/AbstractExtractor.py (renamed from module/plugins/internal/AbstractExtractor.py)0
-rw-r--r--pyload/plugins/internal/CaptchaService.py (renamed from module/plugins/internal/CaptchaService.py)0
-rw-r--r--pyload/plugins/internal/DeadCrypter.py19
-rw-r--r--pyload/plugins/internal/DeadHoster.py27
-rw-r--r--pyload/plugins/internal/MultiHoster.py192
-rw-r--r--pyload/plugins/internal/SimpleCrypter.py118
-rw-r--r--pyload/plugins/internal/SimpleHoster.py292
-rw-r--r--pyload/plugins/internal/UnRar.py212
-rw-r--r--pyload/plugins/internal/UnZip.py38
-rw-r--r--pyload/plugins/internal/XFSPAccount.py69
-rw-r--r--pyload/plugins/internal/__init__.py (renamed from module/plugins/internal/__init__.py)0
-rw-r--r--pyload/plugins/ocr/GigasizeCom.py23
-rw-r--r--pyload/plugins/ocr/LinksaveIn.py149
-rw-r--r--pyload/plugins/ocr/NetloadIn.py27
-rw-r--r--pyload/plugins/ocr/ShareonlineBiz.py38
-rw-r--r--pyload/plugins/ocr/__init__.py (renamed from module/plugins/ocr/__init__.py)0
-rw-r--r--pyload/remote/ClickAndLoadBackend.py (renamed from module/remote/ClickAndLoadBackend.py)0
-rw-r--r--pyload/remote/RemoteManager.py91
-rw-r--r--pyload/remote/SocketBackend.py (renamed from module/remote/SocketBackend.py)0
-rw-r--r--pyload/remote/ThriftBackend.py56
-rw-r--r--pyload/remote/__init__.py (renamed from module/remote/__init__.py)0
-rw-r--r--pyload/remote/socketbackend/__init__.py (renamed from module/remote/socketbackend/__init__.py)0
-rw-r--r--pyload/remote/socketbackend/create_ttypes.py (renamed from module/remote/socketbackend/create_ttypes.py)0
-rw-r--r--pyload/remote/socketbackend/ttypes.py (renamed from module/remote/socketbackend/ttypes.py)0
-rw-r--r--pyload/remote/thriftbackend/Processor.py (renamed from module/remote/thriftbackend/Processor.py)0
-rw-r--r--pyload/remote/thriftbackend/Protocol.py (renamed from module/remote/thriftbackend/Protocol.py)0
-rw-r--r--pyload/remote/thriftbackend/Socket.py (renamed from module/remote/thriftbackend/Socket.py)0
-rw-r--r--pyload/remote/thriftbackend/ThriftClient.py (renamed from module/remote/thriftbackend/ThriftClient.py)0
-rw-r--r--pyload/remote/thriftbackend/ThriftTest.py (renamed from module/remote/thriftbackend/ThriftTest.py)0
-rw-r--r--pyload/remote/thriftbackend/Transport.py (renamed from module/remote/thriftbackend/Transport.py)0
-rw-r--r--pyload/remote/thriftbackend/__init__.py (renamed from module/remote/thriftbackend/__init__.py)0
-rw-r--r--pyload/remote/thriftbackend/pyload.thrift (renamed from module/remote/thriftbackend/pyload.thrift)0
-rw-r--r--pyload/remote/thriftbackend/thriftgen/__init__.py (renamed from module/remote/thriftbackend/thriftgen/__init__.py)0
-rw-r--r--[-rwxr-xr-x]pyload/remote/thriftbackend/thriftgen/pyload/Pyload-remote (renamed from module/remote/thriftbackend/thriftgen/pyload/Pyload-remote)0
-rw-r--r--pyload/remote/thriftbackend/thriftgen/pyload/Pyload.py (renamed from module/remote/thriftbackend/thriftgen/pyload/Pyload.py)0
-rw-r--r--pyload/remote/thriftbackend/thriftgen/pyload/__init__.py (renamed from module/remote/thriftbackend/thriftgen/pyload/__init__.py)0
-rw-r--r--pyload/remote/thriftbackend/thriftgen/pyload/constants.py (renamed from module/remote/thriftbackend/thriftgen/pyload/constants.py)0
-rw-r--r--pyload/remote/thriftbackend/thriftgen/pyload/ttypes.py (renamed from module/remote/thriftbackend/thriftgen/pyload/ttypes.py)0
-rw-r--r--pyload/setup.py538
-rw-r--r--pyload/threads/PluginThread.py675
-rw-r--r--pyload/threads/ServerThread.py108
-rw-r--r--pyload/threads/__init__.py (renamed from module/threads/__init__.py)0
-rw-r--r--pyload/unescape.py3
-rw-r--r--pyload/utils.py (renamed from module/utils.py)0
-rw-r--r--pyload/webui/__init__.py147
-rw-r--r--pyload/webui/app/__init__.py3
-rw-r--r--pyload/webui/app/api.py101
-rw-r--r--pyload/webui/app/cnl.py168
-rw-r--r--pyload/webui/app/json.py311
-rw-r--r--pyload/webui/app/pyload.py544
-rw-r--r--pyload/webui/app/utils.py138
-rw-r--r--pyload/webui/filters.py (renamed from module/webui/filters.py)0
-rw-r--r--pyload/webui/middlewares.py (renamed from module/webui/middlewares.py)0
-rw-r--r--pyload/webui/servers/lighttpd_default.conf153
-rw-r--r--pyload/webui/servers/nginx_default.conf (renamed from module/webui/servers/nginx_default.conf)0
-rw-r--r--pyload/webui/themes/dark/css/MooDialog.css (renamed from module/webui/themes/dark/css/MooDialog.css)0
-rw-r--r--pyload/webui/themes/dark/css/dark.css (renamed from module/webui/themes/dark/css/dark.css)0
-rw-r--r--pyload/webui/themes/dark/css/log.css (renamed from module/webui/themes/dark/css/log.css)0
-rw-r--r--pyload/webui/themes/dark/css/pathchooser.css (renamed from module/webui/themes/dark/css/pathchooser.css)0
-rw-r--r--pyload/webui/themes/dark/css/window.css (renamed from module/webui/themes/dark/css/window.css)0
-rw-r--r--pyload/webui/themes/dark/img/MooDialog/dialog-close.png (renamed from module/webui/themes/dark/img/MooDialog/dialog-close.png)bin689 -> 689 bytes
-rw-r--r--pyload/webui/themes/dark/img/MooDialog/dialog-error.png (renamed from module/webui/themes/dark/img/MooDialog/dialog-error.png)bin1472 -> 1472 bytes
-rw-r--r--pyload/webui/themes/dark/img/MooDialog/dialog-question.png (renamed from module/webui/themes/dark/img/MooDialog/dialog-question.png)bin2073 -> 2073 bytes
-rw-r--r--pyload/webui/themes/dark/img/MooDialog/dialog-warning.png (renamed from module/webui/themes/dark/img/MooDialog/dialog-warning.png)bin1651 -> 1651 bytes
-rw-r--r--pyload/webui/themes/dark/img/button.png (renamed from module/webui/themes/dark/img/button.png)bin569 -> 569 bytes
-rw-r--r--pyload/webui/themes/dark/img/dark-bg.jpg (renamed from module/webui/themes/dark/img/dark-bg.jpg)bin40930 -> 40930 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/add_folder.png (renamed from module/webui/themes/dark/img/default/add_folder.png)bin571 -> 571 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/ajax-loader.gif (renamed from module/webui/themes/dark/img/default/ajax-loader.gif)bin404 -> 404 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/arrow_refresh.png (renamed from module/webui/themes/dark/img/default/arrow_refresh.png)bin685 -> 685 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/arrow_right.png (renamed from module/webui/themes/dark/img/default/arrow_right.png)bin349 -> 349 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/big_button.gif (renamed from module/webui/themes/dark/img/default/big_button.gif)bin1905 -> 1905 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/big_button_over.gif (renamed from module/webui/themes/dark/img/default/big_button_over.gif)bin728 -> 728 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/body.png (renamed from module/webui/themes/dark/img/default/body.png)bin402 -> 402 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/closebtn.gif (renamed from module/webui/themes/dark/img/default/closebtn.gif)bin254 -> 254 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/cog.png (renamed from module/webui/themes/dark/img/default/cog.png)bin512 -> 512 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_add.png (renamed from module/webui/themes/dark/img/default/control_add.png)bin446 -> 446 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_add_blue.png (renamed from module/webui/themes/dark/img/default/control_add_blue.png)bin845 -> 845 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_cancel.png (renamed from module/webui/themes/dark/img/default/control_cancel.png)bin3349 -> 3349 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_cancel_blue.png (renamed from module/webui/themes/dark/img/default/control_cancel_blue.png)bin787 -> 787 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_pause.png (renamed from module/webui/themes/dark/img/default/control_pause.png)bin598 -> 598 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_pause_blue.png (renamed from module/webui/themes/dark/img/default/control_pause_blue.png)bin721 -> 721 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_play.png (renamed from module/webui/themes/dark/img/default/control_play.png)bin592 -> 592 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_play_blue.png (renamed from module/webui/themes/dark/img/default/control_play_blue.png)bin717 -> 717 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_stop.png (renamed from module/webui/themes/dark/img/default/control_stop.png)bin403 -> 403 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/control_stop_blue.png (renamed from module/webui/themes/dark/img/default/control_stop_blue.png)bin695 -> 695 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/delete.png (renamed from module/webui/themes/dark/img/default/delete.png)bin715 -> 715 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/drag_corner.gif (renamed from module/webui/themes/dark/img/default/drag_corner.gif)bin76 -> 76 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/error.png (renamed from module/webui/themes/dark/img/default/error.png)bin701 -> 701 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/folder.png (renamed from module/webui/themes/dark/img/default/folder.png)bin537 -> 537 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/full.png (renamed from module/webui/themes/dark/img/default/full.png)bin3543 -> 3543 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-login.png (renamed from module/webui/themes/dark/img/default/head-login.png)bin1288 -> 1288 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-collector.png (renamed from module/webui/themes/dark/img/default/head-menu-collector.png)bin1953 -> 1953 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-config.png (renamed from module/webui/themes/dark/img/default/head-menu-config.png)bin1802 -> 1802 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-development.png (renamed from module/webui/themes/dark/img/default/head-menu-development.png)bin876 -> 876 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-download.png (renamed from module/webui/themes/dark/img/default/head-menu-download.png)bin721 -> 721 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-home.png (renamed from module/webui/themes/dark/img/default/head-menu-home.png)bin920 -> 920 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-index.png (renamed from module/webui/themes/dark/img/default/head-menu-index.png)bin482 -> 482 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-news.png (renamed from module/webui/themes/dark/img/default/head-menu-news.png)bin628 -> 628 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-queue.png (renamed from module/webui/themes/dark/img/default/head-menu-queue.png)bin2629 -> 2629 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-recent.png (renamed from module/webui/themes/dark/img/default/head-menu-recent.png)bin932 -> 932 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-menu-wiki.png (renamed from module/webui/themes/dark/img/default/head-menu-wiki.png)bin1204 -> 1204 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head-search-noshadow.png (renamed from module/webui/themes/dark/img/default/head-search-noshadow.png)bin1187 -> 1187 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/head_bg1.png (renamed from module/webui/themes/dark/img/default/head_bg1.png)bin125 -> 125 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/images.png (renamed from module/webui/themes/dark/img/default/images.png)bin661 -> 661 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/notice.png (renamed from module/webui/themes/dark/img/default/notice.png)bin778 -> 778 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/package_go.png (renamed from module/webui/themes/dark/img/default/package_go.png)bin898 -> 898 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/page-tools-backlinks.png (renamed from module/webui/themes/dark/img/default/page-tools-backlinks.png)bin540 -> 540 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/page-tools-edit.png (renamed from module/webui/themes/dark/img/default/page-tools-edit.png)bin574 -> 574 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/page-tools-revisions.png (renamed from module/webui/themes/dark/img/default/page-tools-revisions.png)bin603 -> 603 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/parseUri.png (renamed from module/webui/themes/dark/img/default/parseUri.png)bin666 -> 666 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/pencil.png (renamed from module/webui/themes/dark/img/default/pencil.png)bin450 -> 450 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/reconnect.png (renamed from module/webui/themes/dark/img/default/reconnect.png)bin755 -> 755 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_None.png (renamed from module/webui/themes/dark/img/default/status_None.png)bin7613 -> 7613 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_downloading.png (renamed from module/webui/themes/dark/img/default/status_downloading.png)bin943 -> 943 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_failed.png (renamed from module/webui/themes/dark/img/default/status_failed.png)bin701 -> 701 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_finished.png (renamed from module/webui/themes/dark/img/default/status_finished.png)bin781 -> 781 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_offline.png (renamed from module/webui/themes/dark/img/default/status_offline.png)bin700 -> 700 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_proc.png (renamed from module/webui/themes/dark/img/default/status_proc.png)bin512 -> 512 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_queue.png (renamed from module/webui/themes/dark/img/default/status_queue.png)bin7613 -> 7613 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/status_waiting.png (renamed from module/webui/themes/dark/img/default/status_waiting.png)bin889 -> 889 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/success.png (renamed from module/webui/themes/dark/img/default/success.png)bin781 -> 781 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/tabs-border-bottom.png (renamed from module/webui/themes/dark/img/default/tabs-border-bottom.png)bin163 -> 163 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/user-actions-logout.png (renamed from module/webui/themes/dark/img/default/user-actions-logout.png)bin799 -> 799 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/user-actions-profile.png (renamed from module/webui/themes/dark/img/default/user-actions-profile.png)bin628 -> 628 bytes
-rw-r--r--pyload/webui/themes/dark/img/default/user-info.png (renamed from module/webui/themes/dark/img/default/user-info.png)bin3963 -> 3963 bytes
-rw-r--r--pyload/webui/themes/dark/img/pyload-logo.png (renamed from module/webui/themes/dark/img/pyload-logo.png)bin6947 -> 6947 bytes
-rw-r--r--pyload/webui/themes/dark/img/tab-background.png (renamed from module/webui/themes/dark/img/tab-background.png)bin3044 -> 3044 bytes
-rw-r--r--pyload/webui/themes/dark/js/render/admin.coffee (renamed from module/webui/themes/dark/js/render/admin.coffee)0
-rw-r--r--pyload/webui/themes/dark/js/render/admin.min.js (renamed from module/webui/themes/dark/js/render/admin.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/render/base.coffee (renamed from module/webui/themes/dark/js/render/base.coffee)0
-rw-r--r--pyload/webui/themes/dark/js/render/base.min.js (renamed from module/webui/themes/dark/js/render/base.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/render/package.js (renamed from module/webui/themes/dark/js/render/package.js)0
-rw-r--r--pyload/webui/themes/dark/js/render/settings.coffee (renamed from module/webui/themes/dark/js/render/settings.coffee)0
-rw-r--r--pyload/webui/themes/dark/js/render/settings.min.js (renamed from module/webui/themes/dark/js/render/settings.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/MooDialog.js (renamed from module/webui/themes/dark/js/static/MooDialog.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/MooDialog.min.js (renamed from module/webui/themes/dark/js/static/MooDialog.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/MooDropMenu.js (renamed from module/webui/themes/dark/js/static/MooDropMenu.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/MooDropMenu.min.js (renamed from module/webui/themes/dark/js/static/MooDropMenu.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/mootools-core.js (renamed from module/webui/themes/dark/js/static/mootools-core.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/mootools-core.min.js (renamed from module/webui/themes/dark/js/static/mootools-core.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/mootools-more.js (renamed from module/webui/themes/dark/js/static/mootools-more.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/mootools-more.min.js (renamed from module/webui/themes/dark/js/static/mootools-more.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/purr.js (renamed from module/webui/themes/dark/js/static/purr.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/purr.min.js (renamed from module/webui/themes/dark/js/static/purr.min.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/tinytab.js (renamed from module/webui/themes/dark/js/static/tinytab.js)0
-rw-r--r--pyload/webui/themes/dark/js/static/tinytab.min.js (renamed from module/webui/themes/dark/js/static/tinytab.min.js)0
-rw-r--r--pyload/webui/themes/dark/tml/admin.html (renamed from module/webui/themes/dark/tml/admin.html)0
-rw-r--r--pyload/webui/themes/dark/tml/base.html (renamed from module/webui/themes/dark/tml/base.html)0
-rw-r--r--pyload/webui/themes/dark/tml/captcha.html (renamed from module/webui/themes/dark/tml/captcha.html)0
-rw-r--r--pyload/webui/themes/dark/tml/downloads.html (renamed from module/webui/themes/dark/tml/downloads.html)0
-rw-r--r--pyload/webui/themes/dark/tml/folder.html (renamed from module/webui/themes/dark/tml/folder.html)0
-rw-r--r--pyload/webui/themes/dark/tml/home.html (renamed from module/webui/themes/dark/tml/home.html)0
-rw-r--r--pyload/webui/themes/dark/tml/info.html (renamed from module/webui/themes/dark/tml/info.html)0
-rw-r--r--pyload/webui/themes/dark/tml/login.html (renamed from module/webui/themes/dark/tml/login.html)0
-rw-r--r--pyload/webui/themes/dark/tml/logout.html (renamed from module/webui/themes/dark/tml/logout.html)0
-rw-r--r--pyload/webui/themes/dark/tml/logs.html (renamed from module/webui/themes/dark/tml/logs.html)0
-rw-r--r--pyload/webui/themes/dark/tml/pathchooser.html (renamed from module/webui/themes/dark/tml/pathchooser.html)0
-rw-r--r--pyload/webui/themes/dark/tml/queue.html (renamed from module/webui/themes/dark/tml/queue.html)0
-rw-r--r--pyload/webui/themes/dark/tml/settings.html (renamed from module/webui/themes/dark/tml/settings.html)0
-rw-r--r--pyload/webui/themes/dark/tml/settings_item.html (renamed from module/webui/themes/dark/tml/settings_item.html)0
-rw-r--r--pyload/webui/themes/dark/tml/window.html (renamed from module/webui/themes/dark/tml/window.html)0
-rw-r--r--pyload/webui/themes/default/css/MooDialog.css (renamed from module/webui/themes/default/css/MooDialog.css)0
-rw-r--r--pyload/webui/themes/default/css/default.css (renamed from module/webui/themes/default/css/default.css)0
-rw-r--r--pyload/webui/themes/default/css/log.css (renamed from module/webui/themes/default/css/log.css)0
-rw-r--r--pyload/webui/themes/default/css/pathchooser.css (renamed from module/webui/themes/default/css/pathchooser.css)0
-rw-r--r--pyload/webui/themes/default/css/window.css (renamed from module/webui/themes/default/css/window.css)0
-rw-r--r--pyload/webui/themes/default/img/MooDialog/dialog-close.png (renamed from module/webui/themes/default/img/MooDialog/dialog-close.png)bin689 -> 689 bytes
-rw-r--r--pyload/webui/themes/default/img/MooDialog/dialog-error.png (renamed from module/webui/themes/default/img/MooDialog/dialog-error.png)bin1472 -> 1472 bytes
-rw-r--r--pyload/webui/themes/default/img/MooDialog/dialog-question.png (renamed from module/webui/themes/default/img/MooDialog/dialog-question.png)bin2073 -> 2073 bytes
-rw-r--r--pyload/webui/themes/default/img/MooDialog/dialog-warning.png (renamed from module/webui/themes/default/img/MooDialog/dialog-warning.png)bin1651 -> 1651 bytes
-rw-r--r--pyload/webui/themes/default/img/add_folder.png (renamed from module/webui/themes/default/img/add_folder.png)bin571 -> 571 bytes
-rw-r--r--pyload/webui/themes/default/img/ajax-loader.gif (renamed from module/webui/themes/default/img/ajax-loader.gif)bin404 -> 404 bytes
-rw-r--r--pyload/webui/themes/default/img/arrow_refresh.png (renamed from module/webui/themes/default/img/arrow_refresh.png)bin685 -> 685 bytes
-rw-r--r--pyload/webui/themes/default/img/arrow_right.png (renamed from module/webui/themes/default/img/arrow_right.png)bin349 -> 349 bytes
-rw-r--r--pyload/webui/themes/default/img/big_button.gif (renamed from module/webui/themes/default/img/big_button.gif)bin1905 -> 1905 bytes
-rw-r--r--pyload/webui/themes/default/img/big_button_over.gif (renamed from module/webui/themes/default/img/big_button_over.gif)bin728 -> 728 bytes
-rw-r--r--pyload/webui/themes/default/img/body.png (renamed from module/webui/themes/default/img/body.png)bin402 -> 402 bytes
-rw-r--r--pyload/webui/themes/default/img/button.png (renamed from module/webui/themes/default/img/button.png)bin452 -> 452 bytes
-rw-r--r--pyload/webui/themes/default/img/closebtn.gif (renamed from module/webui/themes/default/img/closebtn.gif)bin254 -> 254 bytes
-rw-r--r--pyload/webui/themes/default/img/cog.png (renamed from module/webui/themes/default/img/cog.png)bin512 -> 512 bytes
-rw-r--r--pyload/webui/themes/default/img/control_add.png (renamed from module/webui/themes/default/img/control_add.png)bin446 -> 446 bytes
-rw-r--r--pyload/webui/themes/default/img/control_add_blue.png (renamed from module/webui/themes/default/img/control_add_blue.png)bin845 -> 845 bytes
-rw-r--r--pyload/webui/themes/default/img/control_cancel.png (renamed from module/webui/themes/default/img/control_cancel.png)bin3349 -> 3349 bytes
-rw-r--r--pyload/webui/themes/default/img/control_cancel_blue.png (renamed from module/webui/themes/default/img/control_cancel_blue.png)bin787 -> 787 bytes
-rw-r--r--pyload/webui/themes/default/img/control_pause.png (renamed from module/webui/themes/default/img/control_pause.png)bin598 -> 598 bytes
-rw-r--r--pyload/webui/themes/default/img/control_pause_blue.png (renamed from module/webui/themes/default/img/control_pause_blue.png)bin721 -> 721 bytes
-rw-r--r--pyload/webui/themes/default/img/control_play.png (renamed from module/webui/themes/default/img/control_play.png)bin592 -> 592 bytes
-rw-r--r--pyload/webui/themes/default/img/control_play_blue.png (renamed from module/webui/themes/default/img/control_play_blue.png)bin717 -> 717 bytes
-rw-r--r--pyload/webui/themes/default/img/control_stop.png (renamed from module/webui/themes/default/img/control_stop.png)bin403 -> 403 bytes
-rw-r--r--pyload/webui/themes/default/img/control_stop_blue.png (renamed from module/webui/themes/default/img/control_stop_blue.png)bin695 -> 695 bytes
-rw-r--r--pyload/webui/themes/default/img/delete.png (renamed from module/webui/themes/default/img/delete.png)bin715 -> 715 bytes
-rw-r--r--pyload/webui/themes/default/img/drag_corner.gif (renamed from module/webui/themes/default/img/drag_corner.gif)bin76 -> 76 bytes
-rw-r--r--pyload/webui/themes/default/img/error.png (renamed from module/webui/themes/default/img/error.png)bin701 -> 701 bytes
-rw-r--r--pyload/webui/themes/default/img/folder.png (renamed from module/webui/themes/default/img/folder.png)bin537 -> 537 bytes
-rw-r--r--pyload/webui/themes/default/img/full.png (renamed from module/webui/themes/default/img/full.png)bin3543 -> 3543 bytes
-rw-r--r--pyload/webui/themes/default/img/head-login.png (renamed from module/webui/themes/default/img/head-login.png)bin1288 -> 1288 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-collector.png (renamed from module/webui/themes/default/img/head-menu-collector.png)bin1953 -> 1953 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-config.png (renamed from module/webui/themes/default/img/head-menu-config.png)bin1802 -> 1802 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-development.png (renamed from module/webui/themes/default/img/head-menu-development.png)bin876 -> 876 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-download.png (renamed from module/webui/themes/default/img/head-menu-download.png)bin721 -> 721 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-home.png (renamed from module/webui/themes/default/img/head-menu-home.png)bin920 -> 920 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-index.png (renamed from module/webui/themes/default/img/head-menu-index.png)bin482 -> 482 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-news.png (renamed from module/webui/themes/default/img/head-menu-news.png)bin628 -> 628 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-queue.png (renamed from module/webui/themes/default/img/head-menu-queue.png)bin2629 -> 2629 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-recent.png (renamed from module/webui/themes/default/img/head-menu-recent.png)bin932 -> 932 bytes
-rw-r--r--pyload/webui/themes/default/img/head-menu-wiki.png (renamed from module/webui/themes/default/img/head-menu-wiki.png)bin1204 -> 1204 bytes
-rw-r--r--pyload/webui/themes/default/img/head-search-noshadow.png (renamed from module/webui/themes/default/img/head-search-noshadow.png)bin1187 -> 1187 bytes
-rw-r--r--pyload/webui/themes/default/img/head_bg1.png (renamed from module/webui/themes/default/img/head_bg1.png)bin125 -> 125 bytes
-rw-r--r--pyload/webui/themes/default/img/images.png (renamed from module/webui/themes/default/img/images.png)bin661 -> 661 bytes
-rw-r--r--pyload/webui/themes/default/img/notice.png (renamed from module/webui/themes/default/img/notice.png)bin778 -> 778 bytes
-rw-r--r--pyload/webui/themes/default/img/package_go.png (renamed from module/webui/themes/default/img/package_go.png)bin898 -> 898 bytes
-rw-r--r--pyload/webui/themes/default/img/page-tools-backlinks.png (renamed from module/webui/themes/default/img/page-tools-backlinks.png)bin540 -> 540 bytes
-rw-r--r--pyload/webui/themes/default/img/page-tools-edit.png (renamed from module/webui/themes/default/img/page-tools-edit.png)bin574 -> 574 bytes
-rw-r--r--pyload/webui/themes/default/img/page-tools-revisions.png (renamed from module/webui/themes/default/img/page-tools-revisions.png)bin603 -> 603 bytes
-rw-r--r--pyload/webui/themes/default/img/parseUri.png (renamed from module/webui/themes/default/img/parseUri.png)bin666 -> 666 bytes
-rw-r--r--pyload/webui/themes/default/img/pencil.png (renamed from module/webui/themes/default/img/pencil.png)bin450 -> 450 bytes
-rw-r--r--pyload/webui/themes/default/img/pyload-logo.png (renamed from module/webui/themes/default/img/pyload-logo.png)bin8457 -> 8457 bytes
-rw-r--r--pyload/webui/themes/default/img/reconnect.png (renamed from module/webui/themes/default/img/reconnect.png)bin755 -> 755 bytes
-rw-r--r--pyload/webui/themes/default/img/status_None.png (renamed from module/webui/themes/default/img/status_None.png)bin7613 -> 7613 bytes
-rw-r--r--pyload/webui/themes/default/img/status_downloading.png (renamed from module/webui/themes/default/img/status_downloading.png)bin943 -> 943 bytes
-rw-r--r--pyload/webui/themes/default/img/status_failed.png (renamed from module/webui/themes/default/img/status_failed.png)bin701 -> 701 bytes
-rw-r--r--pyload/webui/themes/default/img/status_finished.png (renamed from module/webui/themes/default/img/status_finished.png)bin781 -> 781 bytes
-rw-r--r--pyload/webui/themes/default/img/status_offline.png (renamed from module/webui/themes/default/img/status_offline.png)bin700 -> 700 bytes
-rw-r--r--pyload/webui/themes/default/img/status_proc.png (renamed from module/webui/themes/default/img/status_proc.png)bin512 -> 512 bytes
-rw-r--r--pyload/webui/themes/default/img/status_queue.png (renamed from module/webui/themes/default/img/status_queue.png)bin7613 -> 7613 bytes
-rw-r--r--pyload/webui/themes/default/img/status_waiting.png (renamed from module/webui/themes/default/img/status_waiting.png)bin889 -> 889 bytes
-rw-r--r--pyload/webui/themes/default/img/success.png (renamed from module/webui/themes/default/img/success.png)bin781 -> 781 bytes
-rw-r--r--pyload/webui/themes/default/img/tab-background.png (renamed from module/webui/themes/default/img/tab-background.png)bin179 -> 179 bytes
-rw-r--r--pyload/webui/themes/default/img/tabs-border-bottom.png (renamed from module/webui/themes/default/img/tabs-border-bottom.png)bin163 -> 163 bytes
-rw-r--r--pyload/webui/themes/default/img/user-actions-logout.png (renamed from module/webui/themes/default/img/user-actions-logout.png)bin799 -> 799 bytes
-rw-r--r--pyload/webui/themes/default/img/user-actions-profile.png (renamed from module/webui/themes/default/img/user-actions-profile.png)bin628 -> 628 bytes
-rw-r--r--pyload/webui/themes/default/img/user-info.png (renamed from module/webui/themes/default/img/user-info.png)bin3963 -> 3963 bytes
-rw-r--r--pyload/webui/themes/default/js/render/admin.coffee (renamed from module/webui/themes/default/js/render/admin.coffee)0
-rw-r--r--pyload/webui/themes/default/js/render/admin.min.js (renamed from module/webui/themes/default/js/render/admin.min.js)0
-rw-r--r--pyload/webui/themes/default/js/render/base.coffee (renamed from module/webui/themes/default/js/render/base.coffee)0
-rw-r--r--pyload/webui/themes/default/js/render/base.min.js (renamed from module/webui/themes/default/js/render/base.min.js)0
-rw-r--r--pyload/webui/themes/default/js/render/filemanager.js (renamed from module/webui/themes/default/js/render/filemanager.js)0
-rw-r--r--pyload/webui/themes/default/js/render/package.js (renamed from module/webui/themes/default/js/render/package.js)0
-rw-r--r--pyload/webui/themes/default/js/render/settings.coffee (renamed from module/webui/themes/default/js/render/settings.coffee)0
-rw-r--r--pyload/webui/themes/default/js/render/settings.min.js (renamed from module/webui/themes/default/js/render/settings.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/MooDialog.js (renamed from module/webui/themes/default/js/static/MooDialog.js)0
-rw-r--r--pyload/webui/themes/default/js/static/MooDialog.min.js (renamed from module/webui/themes/default/js/static/MooDialog.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/MooDropMenu.js (renamed from module/webui/themes/default/js/static/MooDropMenu.js)0
-rw-r--r--pyload/webui/themes/default/js/static/MooDropMenu.min.js (renamed from module/webui/themes/default/js/static/MooDropMenu.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/mootools-core.js (renamed from module/webui/themes/default/js/static/mootools-core.js)0
-rw-r--r--pyload/webui/themes/default/js/static/mootools-core.min.js (renamed from module/webui/themes/default/js/static/mootools-core.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/mootools-more.js (renamed from module/webui/themes/default/js/static/mootools-more.js)0
-rw-r--r--pyload/webui/themes/default/js/static/mootools-more.min.js (renamed from module/webui/themes/default/js/static/mootools-more.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/purr.js (renamed from module/webui/themes/default/js/static/purr.js)0
-rw-r--r--pyload/webui/themes/default/js/static/purr.min.js (renamed from module/webui/themes/default/js/static/purr.min.js)0
-rw-r--r--pyload/webui/themes/default/js/static/tinytab.js (renamed from module/webui/themes/default/js/static/tinytab.js)0
-rw-r--r--pyload/webui/themes/default/js/static/tinytab.min.js (renamed from module/webui/themes/default/js/static/tinytab.min.js)0
-rw-r--r--pyload/webui/themes/default/tml/admin.html (renamed from module/webui/themes/default/tml/admin.html)0
-rw-r--r--pyload/webui/themes/default/tml/base.html (renamed from module/webui/themes/default/tml/base.html)0
-rw-r--r--pyload/webui/themes/default/tml/captcha.html (renamed from module/webui/themes/default/tml/captcha.html)0
-rw-r--r--pyload/webui/themes/default/tml/downloads.html (renamed from module/webui/themes/default/tml/downloads.html)0
-rw-r--r--pyload/webui/themes/default/tml/filemanager.html (renamed from module/webui/themes/default/tml/filemanager.html)0
-rw-r--r--pyload/webui/themes/default/tml/folder.html (renamed from module/webui/themes/default/tml/folder.html)0
-rw-r--r--pyload/webui/themes/default/tml/home.html (renamed from module/webui/themes/default/tml/home.html)0
-rw-r--r--pyload/webui/themes/default/tml/info.html (renamed from module/webui/themes/default/tml/info.html)0
-rw-r--r--pyload/webui/themes/default/tml/login.html (renamed from module/webui/themes/default/tml/login.html)0
-rw-r--r--pyload/webui/themes/default/tml/logout.html (renamed from module/webui/themes/default/tml/logout.html)0
-rw-r--r--pyload/webui/themes/default/tml/logs.html (renamed from module/webui/themes/default/tml/logs.html)0
-rw-r--r--pyload/webui/themes/default/tml/pathchooser.html (renamed from module/webui/themes/default/tml/pathchooser.html)0
-rw-r--r--pyload/webui/themes/default/tml/queue.html (renamed from module/webui/themes/default/tml/queue.html)0
-rw-r--r--pyload/webui/themes/default/tml/settings.html (renamed from module/webui/themes/default/tml/settings.html)0
-rw-r--r--pyload/webui/themes/default/tml/settings_item.html (renamed from module/webui/themes/default/tml/settings_item.html)0
-rw-r--r--pyload/webui/themes/default/tml/window.html (renamed from module/webui/themes/default/tml/window.html)0
-rw-r--r--pyload/webui/themes/flat/css/MooDialog.css (renamed from module/webui/themes/flat/css/MooDialog.css)0
-rw-r--r--pyload/webui/themes/flat/css/flat.css (renamed from module/webui/themes/flat/css/flat.css)0
-rw-r--r--pyload/webui/themes/flat/css/log.css (renamed from module/webui/themes/flat/css/log.css)0
-rw-r--r--pyload/webui/themes/flat/css/pathchooser.css (renamed from module/webui/themes/flat/css/pathchooser.css)0
-rw-r--r--pyload/webui/themes/flat/css/window.css (renamed from module/webui/themes/flat/css/window.css)0
-rw-r--r--pyload/webui/themes/flat/img/MooDialog/dialog-close.png (renamed from module/webui/themes/flat/img/MooDialog/dialog-close.png)bin689 -> 689 bytes
-rw-r--r--pyload/webui/themes/flat/img/MooDialog/dialog-error.png (renamed from module/webui/themes/flat/img/MooDialog/dialog-error.png)bin1472 -> 1472 bytes
-rw-r--r--pyload/webui/themes/flat/img/MooDialog/dialog-question.png (renamed from module/webui/themes/flat/img/MooDialog/dialog-question.png)bin2073 -> 2073 bytes
-rw-r--r--pyload/webui/themes/flat/img/MooDialog/dialog-warning.png (renamed from module/webui/themes/flat/img/MooDialog/dialog-warning.png)bin1651 -> 1651 bytes
-rw-r--r--pyload/webui/themes/flat/img/arrow_refresh.png (renamed from module/webui/themes/flat/img/arrow_refresh.png)bin119032 -> 119032 bytes
-rw-r--r--pyload/webui/themes/flat/img/arrow_right.png (renamed from module/webui/themes/flat/img/arrow_right.png)bin136967 -> 136967 bytes
-rw-r--r--pyload/webui/themes/flat/img/button.png (renamed from module/webui/themes/flat/img/button.png)bin569 -> 569 bytes
-rw-r--r--pyload/webui/themes/flat/img/cog.png (renamed from module/webui/themes/flat/img/cog.png)bin137406 -> 137406 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_add.png (renamed from module/webui/themes/flat/img/control_add.png)bin116941 -> 116941 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_add_blue.png (renamed from module/webui/themes/flat/img/control_add_blue.png)bin116941 -> 116941 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_cancel.png (renamed from module/webui/themes/flat/img/control_cancel.png)bin116939 -> 116939 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_cancel_blue.png (renamed from module/webui/themes/flat/img/control_cancel_blue.png)bin116939 -> 116939 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_pause.png (renamed from module/webui/themes/flat/img/control_pause.png)bin134855 -> 134855 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_pause_blue.png (renamed from module/webui/themes/flat/img/control_pause_blue.png)bin134855 -> 134855 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_play.png (renamed from module/webui/themes/flat/img/control_play.png)bin134904 -> 134904 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_play_blue.png (renamed from module/webui/themes/flat/img/control_play_blue.png)bin134904 -> 134904 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_stop.png (renamed from module/webui/themes/flat/img/control_stop.png)bin134835 -> 134835 bytes
-rw-r--r--pyload/webui/themes/flat/img/control_stop_blue.png (renamed from module/webui/themes/flat/img/control_stop_blue.png)bin134835 -> 134835 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/add_folder.png (renamed from module/webui/themes/flat/img/default/add_folder.png)bin571 -> 571 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/ajax-loader.gif (renamed from module/webui/themes/flat/img/default/ajax-loader.gif)bin404 -> 404 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/big_button.gif (renamed from module/webui/themes/flat/img/default/big_button.gif)bin1905 -> 1905 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/big_button_over.gif (renamed from module/webui/themes/flat/img/default/big_button_over.gif)bin728 -> 728 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/body.png (renamed from module/webui/themes/flat/img/default/body.png)bin402 -> 402 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/closebtn.gif (renamed from module/webui/themes/flat/img/default/closebtn.gif)bin254 -> 254 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/drag_corner.gif (renamed from module/webui/themes/flat/img/default/drag_corner.gif)bin76 -> 76 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/full.png (renamed from module/webui/themes/flat/img/default/full.png)bin3543 -> 3543 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/head-menu-recent.png (renamed from module/webui/themes/flat/img/default/head-menu-recent.png)bin932 -> 932 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/head_bg1.png (renamed from module/webui/themes/flat/img/default/head_bg1.png)bin125 -> 125 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/images.png (renamed from module/webui/themes/flat/img/default/images.png)bin661 -> 661 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/parseUri.png (renamed from module/webui/themes/flat/img/default/parseUri.png)bin666 -> 666 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/pyload-logo.png (renamed from module/webui/themes/flat/img/default/pyload-logo.png)bin8457 -> 8457 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/tab-background.png (renamed from module/webui/themes/flat/img/default/tab-background.png)bin179 -> 179 bytes
-rw-r--r--pyload/webui/themes/flat/img/default/tabs-border-bottom.png (renamed from module/webui/themes/flat/img/default/tabs-border-bottom.png)bin163 -> 163 bytes
-rw-r--r--pyload/webui/themes/flat/img/delete.png (renamed from module/webui/themes/flat/img/delete.png)bin117658 -> 117658 bytes
-rw-r--r--pyload/webui/themes/flat/img/error.png (renamed from module/webui/themes/flat/img/error.png)bin137673 -> 137673 bytes
-rw-r--r--pyload/webui/themes/flat/img/folder.png (renamed from module/webui/themes/flat/img/folder.png)bin134669 -> 134669 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-login.png (renamed from module/webui/themes/flat/img/head-login.png)bin137406 -> 137406 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-collector.png (renamed from module/webui/themes/flat/img/head-menu-collector.png)bin134985 -> 134985 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-config.png (renamed from module/webui/themes/flat/img/head-menu-config.png)bin137664 -> 137664 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-development.png (renamed from module/webui/themes/flat/img/head-menu-development.png)bin135818 -> 135818 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-download.png (renamed from module/webui/themes/flat/img/head-menu-download.png)bin137664 -> 137664 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-home.png (renamed from module/webui/themes/flat/img/head-menu-home.png)bin139387 -> 139387 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-index.png (renamed from module/webui/themes/flat/img/head-menu-index.png)bin136511 -> 136511 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-news.png (renamed from module/webui/themes/flat/img/head-menu-news.png)bin136511 -> 136511 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-queue.png (renamed from module/webui/themes/flat/img/head-menu-queue.png)bin136269 -> 136269 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-menu-wiki.png (renamed from module/webui/themes/flat/img/head-menu-wiki.png)bin137217 -> 137217 bytes
-rw-r--r--pyload/webui/themes/flat/img/head-search-noshadow.png (renamed from module/webui/themes/flat/img/head-search-noshadow.png)bin137217 -> 137217 bytes
-rw-r--r--pyload/webui/themes/flat/img/notice.png (renamed from module/webui/themes/flat/img/notice.png)bin3061 -> 3061 bytes
-rw-r--r--pyload/webui/themes/flat/img/package_go.png (renamed from module/webui/themes/flat/img/package_go.png)bin136299 -> 136299 bytes
-rw-r--r--pyload/webui/themes/flat/img/page-tools-backlinks.png (renamed from module/webui/themes/flat/img/page-tools-backlinks.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/page-tools-edit.png (renamed from module/webui/themes/flat/img/page-tools-edit.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/page-tools-revisions.png (renamed from module/webui/themes/flat/img/page-tools-revisions.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/pencil.png (renamed from module/webui/themes/flat/img/pencil.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/reconnect.png (renamed from module/webui/themes/flat/img/reconnect.png)bin3063 -> 3063 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_None.png (renamed from module/webui/themes/flat/img/status_None.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_downloading.png (renamed from module/webui/themes/flat/img/status_downloading.png)bin3061 -> 3061 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_failed.png (renamed from module/webui/themes/flat/img/status_failed.png)bin137673 -> 137673 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_finished.png (renamed from module/webui/themes/flat/img/status_finished.png)bin117658 -> 117658 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_offline.png (renamed from module/webui/themes/flat/img/status_offline.png)bin137673 -> 137673 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_proc.png (renamed from module/webui/themes/flat/img/status_proc.png)bin137406 -> 137406 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_queue.png (renamed from module/webui/themes/flat/img/status_queue.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/status_waiting.png (renamed from module/webui/themes/flat/img/status_waiting.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/success.png (renamed from module/webui/themes/flat/img/success.png)bin117658 -> 117658 bytes
-rw-r--r--pyload/webui/themes/flat/img/user-actions-logout.png (renamed from module/webui/themes/flat/img/user-actions-logout.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/user-actions-profile.png (renamed from module/webui/themes/flat/img/user-actions-profile.png)bin138112 -> 138112 bytes
-rw-r--r--pyload/webui/themes/flat/img/user-info.png (renamed from module/webui/themes/flat/img/user-info.png)bin3080 -> 3080 bytes
-rw-r--r--pyload/webui/themes/flat/js/render/admin.coffee (renamed from module/webui/themes/flat/js/render/admin.coffee)0
-rw-r--r--pyload/webui/themes/flat/js/render/admin.min.js (renamed from module/webui/themes/flat/js/render/admin.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/render/base.coffee (renamed from module/webui/themes/flat/js/render/base.coffee)0
-rw-r--r--pyload/webui/themes/flat/js/render/base.min.js (renamed from module/webui/themes/flat/js/render/base.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/render/package.js (renamed from module/webui/themes/flat/js/render/package.js)0
-rw-r--r--pyload/webui/themes/flat/js/render/settings.coffee (renamed from module/webui/themes/flat/js/render/settings.coffee)0
-rw-r--r--pyload/webui/themes/flat/js/render/settings.min.js (renamed from module/webui/themes/flat/js/render/settings.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/MooDialog.js (renamed from module/webui/themes/flat/js/static/MooDialog.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/MooDialog.min.js (renamed from module/webui/themes/flat/js/static/MooDialog.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/MooDropMenu.js (renamed from module/webui/themes/flat/js/static/MooDropMenu.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/MooDropMenu.min.js (renamed from module/webui/themes/flat/js/static/MooDropMenu.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/mootools-core.js (renamed from module/webui/themes/flat/js/static/mootools-core.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/mootools-core.min.js (renamed from module/webui/themes/flat/js/static/mootools-core.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/mootools-more.js (renamed from module/webui/themes/flat/js/static/mootools-more.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/mootools-more.min.js (renamed from module/webui/themes/flat/js/static/mootools-more.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/purr.js (renamed from module/webui/themes/flat/js/static/purr.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/purr.min.js (renamed from module/webui/themes/flat/js/static/purr.min.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/tinytab.js (renamed from module/webui/themes/flat/js/static/tinytab.js)0
-rw-r--r--pyload/webui/themes/flat/js/static/tinytab.min.js (renamed from module/webui/themes/flat/js/static/tinytab.min.js)0
-rw-r--r--pyload/webui/themes/flat/tml/admin.html (renamed from module/webui/themes/flat/tml/admin.html)0
-rw-r--r--pyload/webui/themes/flat/tml/base.html (renamed from module/webui/themes/flat/tml/base.html)0
-rw-r--r--pyload/webui/themes/flat/tml/captcha.html (renamed from module/webui/themes/flat/tml/captcha.html)0
-rw-r--r--pyload/webui/themes/flat/tml/downloads.html (renamed from module/webui/themes/flat/tml/downloads.html)0
-rw-r--r--pyload/webui/themes/flat/tml/folder.html (renamed from module/webui/themes/flat/tml/folder.html)0
-rw-r--r--pyload/webui/themes/flat/tml/home.html (renamed from module/webui/themes/flat/tml/home.html)0
-rw-r--r--pyload/webui/themes/flat/tml/info.html (renamed from module/webui/themes/flat/tml/info.html)0
-rw-r--r--pyload/webui/themes/flat/tml/login.html (renamed from module/webui/themes/flat/tml/login.html)0
-rw-r--r--pyload/webui/themes/flat/tml/logout.html (renamed from module/webui/themes/flat/tml/logout.html)0
-rw-r--r--pyload/webui/themes/flat/tml/logs.html (renamed from module/webui/themes/flat/tml/logs.html)0
-rw-r--r--pyload/webui/themes/flat/tml/pathchooser.html (renamed from module/webui/themes/flat/tml/pathchooser.html)0
-rw-r--r--pyload/webui/themes/flat/tml/queue.html (renamed from module/webui/themes/flat/tml/queue.html)0
-rw-r--r--pyload/webui/themes/flat/tml/settings.html (renamed from module/webui/themes/flat/tml/settings.html)0
-rw-r--r--pyload/webui/themes/flat/tml/settings_item.html (renamed from module/webui/themes/flat/tml/settings_item.html)0
-rw-r--r--pyload/webui/themes/flat/tml/window.html (renamed from module/webui/themes/flat/tml/window.html)0
-rw-r--r--scripts/clonedigger.sh2
-rw-r--r--scripts/code_analysis.sh2
1474 files changed, 58600 insertions, 58603 deletions
diff --git a/.gitignore b/.gitignore
index 061269bbd..e035516d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,15 @@
# Common packaging directories
-/bin/
-/build/
-/dist/
-/env/
-/lib/
-/lib64/
-/parts/
-/sdist/
-/var/
-/temp/
+bin/
+build/
+dist/
+env/
+lib/
+lib64/
+parts/
+sdist/
+var/
+temp/
+!/pyload/lib/
# Common directories
.*/
@@ -27,8 +28,8 @@ userplugins/
/*.txt
/*.xml
/*.zip
-/module/config/core.xml
-/module/config/plugin.xml
+/pyload/config/core.xml
+/pyload/config/plugin.xml
# Common MacOS & Windows files
*.DS_Store
@@ -78,7 +79,7 @@ eggs
*.project
*.pydevproject
*.rej
-/docs/_build/
-/pyload/
+_build/
+/module/
DLC_*.py
paver-minilib.zip
diff --git a/docs/access_api.rst b/docs/access_api.rst
index ce78364b9..d83698aa3 100644
--- a/docs/access_api.rst
+++ b/docs/access_api.rst
@@ -13,12 +13,12 @@ First of all, you need to know what you can do with our API. It lets you do all
retrieving download status, manage queue, manage accounts, modify config and so on.
This document is not intended to explain every function in detail, for a complete listing
-see :class:`Api <module.Api.Api>`.
+see :class:`Api <pyload.Api.Api>`.
Of course its possible to access the ``core.api`` attribute in plugins and hooks, but much more
interesting is the possibillity to call function from different programs written in many different languages.
-pyLoad uses thrift as backend and provides its :class:`Api <module.Api.Api>` as service.
+pyLoad uses thrift as backend and provides its :class:`Api <pyload.Api.Api>` as service.
More information about thrift can be found here http://wiki.apache.org/thrift/.
@@ -26,7 +26,7 @@ Using Thrift
------------
Every thrift service has to define all data structures and declare every method which should be usable via rpc.
-This file is located :file:`module/remote/thriftbackend/pyload.thrift`, its very helpful to inform about
+This file is located :file:`pyload/remote/thriftbackend/pyload.thrift`, its very helpful to inform about
arguments and detailed structure of return types. However it does not contain any information about what the functions does.
Assuming you want to use the API in any other language than python than check if it is
@@ -48,7 +48,7 @@ In case you want to use python, pyload has already all files included to access
A basic script that prints out some information: ::
- from module.remote.thriftbackend.ThriftClient import ThriftClient, WrongLogin
+ from pyload.remote.thriftbackend.ThriftClient import ThriftClient, WrongLogin
try:
client = ThriftClient(host="127.0.0.1", port=7227, user="User", password="yourpw")
@@ -92,14 +92,14 @@ so pyLoad can authenticate you.
Calling Methods
===============
-In general you can use any method listed at the :class:`Api <module.Api.Api>` documentation, which is also available to
+In general you can use any method listed at the :class:`Api <pyload.Api.Api>` documentation, which is also available to
the thriftbackend.
Access works simply via ``http://pyload-core/api/methodName``, where ``pyload-core`` is the ip address
or hostname including the webinterface port. By default on local access this would be `localhost:8000`.
The return value will be formatted in JSON, complex data types as dictionaries.
-As mentionted above for a documentation about the return types look at the thrift specification file :file:`module/remote/thriftbackend/pyload.thrift`.
+As mentionted above for a documentation about the return types look at the thrift specification file :file:`pyload/remote/thriftbackend/pyload.thrift`.
==================
Passing parameters
@@ -107,7 +107,7 @@ Passing parameters
To pass arguments you have two choices.
Either use positional arguments, eg ``http://pyload-core/api/getFileData/1``, where 1 is the FileID, or use keyword arguments
-supplied via GET or POST ``http://pyload-core/api/getFileData?fid=1``. You can find the argument names in the :class:`Api <module.Api.Api>`
+supplied via GET or POST ``http://pyload-core/api/getFileData?fid=1``. You can find the argument names in the :class:`Api <pyload.Api.Api>`
documentation.
It is important that *all* arguments are in JSON format. So ``http://pyload-core/api/getFileData/1`` is valid because
diff --git a/docs/conf.py b/docs/conf.py
index b5976d2fc..62ad33bb7 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -16,7 +16,7 @@ from os.path import dirname, join, abspath
dir_name = join(dirname(abspath("")))
sys.path.append(dir_name)
-sys.path.append(join(dir_name, "module", "lib"))
+sys.path.append(join(dir_name, "pyload", "lib"))
# If extensions (or modules to document with autodoc) are in another directory,
@@ -128,7 +128,7 @@ html_theme = 'default'
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-html_logo = join(dir_name, "module", "web", "media", "default", "img", "pyload-logo-edited3.5-new-font-small.png")
+html_logo = join(dir_name, "pyload", "web", "media", "default", "img", "pyload-logo-edited3.5-new-font-small.png")
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
diff --git a/docs/docs.conf b/docs/docs.conf
index 0f30ab89e..fd2987784 100644
--- a/docs/docs.conf
+++ b/docs/docs.conf
@@ -3,12 +3,12 @@
[epydoc]
-modules: pyload.py, pyload-cli.py, module
+modules: pyload.py, pyload-cli.py, pyload
output: html
target: docs
docformat: restructuredtext
-exclude: module\.lib|module\.remote\.thriftbackend\.thriftgen|\.pyc|\.pyo|module\.plugins\.(accounts|container|crypter|hooks|hoster|internal|ocr)
+exclude: pyload\.lib|pyload\.remote\.thriftbackend\.thriftgen|\.pyc|\.pyo|pyload\.plugins\.(accounts|container|crypter|hooks|hoster|internal|ocr)
name: pyLoad Documentation
url: http://docs.pyload.org
diff --git a/docs/index.rst b/docs/index.rst
index 757fd7537..ff40ff3cb 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -20,7 +20,7 @@ Contents:
extend_pyload.rst
module_overview.rst
-.. currentmodule:: module
+.. currentmodule:: pyload
==================
diff --git a/docs/module_overview.rst b/docs/module_overview.rst
index d51202c88..8cea3874b 100644
--- a/docs/module_overview.rst
+++ b/docs/module_overview.rst
@@ -4,14 +4,14 @@ Module Overview
You can find an overview of some important classes here:
.. autosummary::
- :toctree: module
+ :toctree: pyload
- module.Api.Api
- module.plugins.Plugin.Base
- module.plugins.Plugin.Plugin
- module.plugins.Crypter.Crypter
- module.plugins.Account.Account
- module.plugins.Hook.Hook
- module.HookManager.HookManager
- module.PyFile.PyFile
- module.PyPackage.PyPackage
+ pyload.Api.Api
+ pyload.plugins.Plugin.Base
+ pyload.plugins.Plugin.Plugin
+ pyload.plugins.Crypter.Crypter
+ pyload.plugins.Account.Account
+ pyload.plugins.Hook.Hook
+ pyload.HookManager.HookManager
+ pyload.PyFile.PyFile
+ pyload.PyPackage.PyPackage
diff --git a/docs/write_hooks.rst b/docs/write_hooks.rst
index a088a3ed3..5508f5a0c 100644
--- a/docs/write_hooks.rst
+++ b/docs/write_hooks.rst
@@ -3,20 +3,20 @@
Hooks
=====
-A Hook is a python file which is located at :file:`module/plugins/hooks`.
-The :class:`HookManager <module.HookManager.HookManager>` will load it automatically on startup. Only one instance exists
-over the complete lifetime of pyload. Your hook can interact on various events called by the :class:`HookManager <module.HookManager.HookManager>`,
-do something complete autonomic and has full access to the :class:`Api <module.Api.Api>` and every detail of pyLoad.
+A Hook is a python file which is located at :file:`pyload/plugins/hooks`.
+The :class:`HookManager <pyload.HookManager.HookManager>` will load it automatically on startup. Only one instance exists
+over the complete lifetime of pyload. Your hook can interact on various events called by the :class:`HookManager <pyload.HookManager.HookManager>`,
+do something complete autonomic and has full access to the :class:`Api <pyload.Api.Api>` and every detail of pyLoad.
The UpdateManager, CaptchaTrader, UnRar and many more are realised as hooks.
Hook header
-----------
-Your hook needs to subclass :class:`Hook <module.plugins.Hook.Hook>` and will inherit all of its method, make sure to check its documentation!
+Your hook needs to subclass :class:`Hook <pyload.plugins.Hook.Hook>` and will inherit all of its method, make sure to check its documentation!
All Hooks should start with something like this: ::
- from module.plugins.Hook import Hook
+ from pyload.plugins.Hook import Hook
class YourHook(Hook):
__name__ = "YourHook"
@@ -42,16 +42,16 @@ Interacting on Events
The next step is to think about where your Hook action takes places.
-The easiest way is to overwrite specific methods defined by the :class:`Hook <module.plugins.Hook.Hook>` base class.
+The easiest way is to overwrite specific methods defined by the :class:`Hook <pyload.plugins.Hook.Hook>` base class.
The name is indicating when the function gets called.
-See :class:`Hook <module.plugins.Hook.Hook>` page for a complete listing.
+See :class:`Hook <pyload.plugins.Hook.Hook>` page for a complete listing.
-You should be aware of the arguments the Hooks are called with, whether its a :class:`PyFile <module.PyFile.PyFile>`
-or :class:`PyPackage <module.PyPackage.PyPackage>` you should read its related documentation to know how to access her great power and manipulate them.
+You should be aware of the arguments the Hooks are called with, whether its a :class:`PyFile <pyload.PyFile.PyFile>`
+or :class:`PyPackage <pyload.PyPackage.PyPackage>` you should read its related documentation to know how to access her great power and manipulate them.
A basic excerpt would look like: ::
- from module.plugins.Hook import Hook
+ from pyload.plugins.Hook import Hook
class YourHook(Hook):
"""
@@ -66,12 +66,12 @@ A basic excerpt would look like: ::
Another and more flexible and powerful way is to use event listener.
All hook methods exists as event and very useful additional events are dispatched by the core. For a little overview look
-at :class:`HookManager <module.HookManager.HookManager>`. Keep in mind that you can define own events and other people may listen on them.
+at :class:`HookManager <pyload.HookManager.HookManager>`. Keep in mind that you can define own events and other people may listen on them.
For your convenience it's possible to register listeners automatical via the ``event_map`` attribute.
It requires a `dict` that maps event names to function names or a `list` of function names. It's important that all names are strings ::
- from module.plugins.Hook import Hook
+ from pyload.plugins.Hook import Hook
class YourHook(Hook):
"""
@@ -92,7 +92,7 @@ It requires a `dict` that maps event names to function names or a `list` of func
An advantage of the event listener is that you are able to register and remove the listeners at runtime.
Use `self.manager.addEvent("name", function)`, `self.manager.removeEvent("name", function)` and see doc for
-:class:`HookManager <module.HookManager.HookManager>`. Contrary to ``event_map``, ``function`` has to be a reference
+:class:`HookManager <pyload.HookManager.HookManager>`. Contrary to ``event_map``, ``function`` has to be a reference
and **not** a `string`.
We introduced events because it scales better if there a a huge amount of events and hooks. So all future interaction will be exclusive
@@ -102,12 +102,12 @@ available as event and not accessible through overwriting hook methods. However
Providing RPC services
----------------------
-You may noticed that pyLoad has an :class:`Api <module.Api.Api>`, which can be used internal or called by clients via RPC.
+You may noticed that pyLoad has an :class:`Api <pyload.Api.Api>`, which can be used internal or called by clients via RPC.
So probably clients want to be able to interact with your hook to request it's state or invoke some action.
Sounds complicated but is very easy to do. Just use the ``Expose`` decorator: ::
- from module.plugins.Hook import Hook, Expose
+ from pyload.plugins.Hook import Hook, Expose
class YourHook(Hook):
"""
@@ -118,7 +118,7 @@ Sounds complicated but is very easy to do. Just use the ``Expose`` decorator: ::
def invoke(self, arg):
print "Invoked with", arg
-Thats all, it's available via the :class:`Api <module.Api.Api>` now. If you want to use it read :ref:`access_api`.
+Thats all, it's available via the :class:`Api <pyload.Api.Api>` now. If you want to use it read :ref:`access_api`.
Here is a basic example: ::
#Assuming client is a ThriftClient or Api object
@@ -128,11 +128,11 @@ Here is a basic example: ::
Providing status information
----------------------------
-Your hook can store information in a ``dict`` that can easily be retrievied via the :class:`Api <module.Api.Api>`.
+Your hook can store information in a ``dict`` that can easily be retrievied via the :class:`Api <pyload.Api.Api>`.
Just store everything in ``self.info``. ::
- from module.plugins.Hook import Hook
+ from pyload.plugins.Hook import Hook
class YourHook(Hook):
"""
@@ -155,4 +155,4 @@ Example
-------
Sorry but you won't find an example here ;-)
- Look at :file:`module/plugins/hooks` and you will find plenty examples there.
+ Look at :file:`pyload/plugins/hooks` and you will find plenty examples there.
diff --git a/docs/write_plugins.rst b/docs/write_plugins.rst
index ff3be66d0..c2b25a934 100644
--- a/docs/write_plugins.rst
+++ b/docs/write_plugins.rst
@@ -3,11 +3,11 @@
Plugins
=======
-A Plugin is a python file located at one of the subfolders in :file:`module/plugins/`. Either :file:`hoster`, :file:`crypter`
+A Plugin is a python file located at one of the subfolders in :file:`pyload/plugins/`. Either :file:`hoster`, :file:`crypter`
or :file:`container`, depending of it's type.
There are three kinds of different plugins: **Hoster**, **Crypter**, **Container**.
-All kind of plugins inherit from the base :class:`Plugin <module.plugins.Plugin.Plugin>`. You should know its
+All kind of plugins inherit from the base :class:`Plugin <pyload.plugins.Plugin.Plugin>`. You should know its
convenient methods, they make your work easier ;-)
Every plugin defines a ``__pattern__`` and when the user adds urls, every url is matched against the pattern defined in
@@ -19,7 +19,7 @@ Plugin header
How basic hoster plugin header could look like: ::
- from module.plugin.Hoster import Hoster
+ from pyload.plugin.Hoster import Hoster
class MyFileHoster(Hoster):
__name__ = "MyFileHoster"
@@ -41,7 +41,7 @@ We head to the next important section, the ``process`` method of your plugin.
In fact the ``process`` method is the only functionality your plugin has to provide, but its always a good idea to split up tasks to not produce spaghetti code.
An example ``process`` function could look like this ::
- from module.plugin.Hoster import Hoster
+ from pyload.plugin.Hoster import Hoster
class MyFileHoster(Hoster):
"""
@@ -58,7 +58,7 @@ An example ``process`` function could look like this ::
# download the file, destination is determined by pyLoad
self.download(parsed_url)
-You need to know about the :class:`PyFile <module.PyFile.PyFile>` class, since an instance of it is given as parameter to every pyfile.
+You need to know about the :class:`PyFile <pyload.PyFile.PyFile>` class, since an instance of it is given as parameter to every pyfile.
Some tasks your plugin should handle: proof if file is online, get filename, wait if needed, download the file, etc..
Wait times
@@ -71,7 +71,7 @@ Captcha decrypting
__________________
To handle captcha input just use ``self.decryptCaptcha(url, ...)``, it will be send to clients
-or handled by :class:`Hook <module.plugins.Hook.Hook>` plugins
+or handled by :class:`Hook <pyload.plugins.Hook.Hook>` plugins
Crypter
-------
@@ -81,7 +81,7 @@ Well, they work nearly the same, only that the function they have to provide is
Example: ::
- from module.plugin.Crypter import Crypter
+ from pyload.plugin.Crypter import Crypter
class MyFileCrypter(Crypter):
"""
@@ -93,11 +93,11 @@ Example: ::
self.packages.append(("pyLoad packages", urls, "pyLoad packages")) # urls list of urls
-They can access all the methods from :class:`Plugin <module.plugins.Plugin.Plugin>`, but the important thing is they
+They can access all the methods from :class:`Plugin <pyload.plugins.Plugin.Plugin>`, but the important thing is they
have to append all packages they parsed to the `self.packages` list. Simply append tuples with `(name, urls, folder)`,
where urls is the list of urls contained in the packages. Thats all of your work, pyLoad will know what to do with them.
Examples
--------
-Best examples are already existing plugins in :file:`module/plugins/`.
+Best examples are already existing plugins in :file:`pyload/plugins/`.
diff --git a/locale/af/LC_MESSAGES/django.po b/locale/af/LC_MESSAGES/django.po
index f847c8fcf..e6f126a57 100644
--- a/locale/af/LC_MESSAGES/django.po
+++ b/locale/af/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/af/LC_MESSAGES/pyLoad.po b/locale/af/LC_MESSAGES/pyLoad.po
index ae1eec95b..d29dad5d0 100644
--- a/locale/af/LC_MESSAGES/pyLoad.po
+++ b/locale/af/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/af/LC_MESSAGES/pyLoadCli.po b/locale/af/LC_MESSAGES/pyLoadCli.po
index 1b0d1172a..6760512f1 100644
--- a/locale/af/LC_MESSAGES/pyLoadCli.po
+++ b/locale/af/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/af/LC_MESSAGES/setup.po b/locale/af/LC_MESSAGES/setup.po
index 8aae41ce1..a66cfd176 100644
--- a/locale/af/LC_MESSAGES/setup.po
+++ b/locale/af/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po
index 6e67693ed..875577bad 100644
--- a/locale/ar/LC_MESSAGES/django.po
+++ b/locale/ar/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "طُلِؚت كاؚت؎ا جديدة"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "فضلاً اقرأ النصّ الموجود في الكاؚت؎ا."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "أعيد ت؎غيل pyLoad"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "ايقاف"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "نجح"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "ت؎غيل"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "أمتأكد من أنك تريد الخروج من pyLoad ؟"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "أعد ؚدء الراؚط"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "احذف الراؚط"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "أدخل اسماً للحزمة."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "فضلاً اضغط على الموقع الصحيح للكاؚت؎ا."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "حدث خطأ."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "المجلد فارغ"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "ف؎ل"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "لا تتوفر كاؚت؎ا لأقرأها."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "لم تتطاؚق كلمتا المرور."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "حُفِ؞َت الإعدادات"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "مجلد جديد"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "أمتأكد من أنك تريد إعادة ت؎غيل pyLoad؟"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "انت؞ار %"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "التنزيلات الن؎طة"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "المنزل"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "قا؊مة الإنت؞ار"
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "جامع الرواؚط"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "التنزيلات"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "السجلات"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "الضؚط"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "اسم"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "الحالة"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "معلومات"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "الحجم"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "التقدم"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "تسجيل الدخول"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "اسم المستخدم"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "كلمة المرور"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "لم يتطاؚق اسم المستخدم وكلمة المرور الّذان أدخلتهما. رجاءً حاول مجدّداً."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "لإعادة ضؚط ؚيانات الولوج أو إضافة مستخدم نفّذ:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "تمّ الحذف"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "ف؎لت إعادة الت؎غيل"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "المجلد:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "كلمة السر:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "حرّر الحزمة"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "حرّر تفاصيل الحزمة أدناه."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "اسم الحزمة."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "مجلد"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "اسم المجلّد الفرعيّ لهذه التنزيلات."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "قا؊مة كلمات السر المستخدمة لفكّ ضغط rar"
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "اقترح"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "امحُ"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "لقد خرجت ؚنجاح."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "المسار"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "مُطلَق"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "نسؚي"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "الاسم"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "الحجم"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "النوع"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "آخر تغيير"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "المجلد الأؚ"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "لا محتوى"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "عام"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "الملحقات"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "الحساؚات"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "اختر قِسماً من القا؊مة"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "الاضافات"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "صالحة حتى"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "الوقت"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "أقصى عدد للتنزيلات المتزامنة"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "حذف؟"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "صالحة"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "غير صالح"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "نعم"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "لا"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "إضافة"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "إضافة حساؚ"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "أضف معلومات حساؚك لتستخدم مزايا الحساؚ المتقدّم"
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "اسم حساؚك."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "كلمة السرّ لهذا الحساؚ."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "نوع"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "اختر المضيف لحساؚك."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "اؚدأ"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "الساؚق"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "التالي"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "انتهى"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "أخؚار"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "الدعم"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "الن؞ام"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr "ؚايثون:"
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "ن؞ام الت؎غيل:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "إصدار pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "مجلد التثؚيت:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "مجلد الإعدادات:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "مجلد التنزيلات:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "المساحة الحرّة:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "اللُّغة:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "منفذ واجهة ال؎نكؚوتية:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "منفذ الواجهة الؚعيدة:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "ؚرنامج الإعداد"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "مدير الملفات"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "أضف حزمة"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "الصق راؚطأ أو ارفع حاوياً. "
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "اسم الحزمة الجديدة."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "رواؚط"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "الصق الرواؚط أو أيّ نصّ هنا ثم اضغط زرّ استخراج الرواؚط."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "ر؎ّح الرواؚط"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "كلمة سر أر؎يفات RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "ملف"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "ارفع حاوياً."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "الوجهة"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "النص"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "إغلاق"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "واجهة ال؎نكؚوتية"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "يتوفّر تحديث للؚرنامج!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "تمّ تحديث الإضافة، يرجى إعادة ت؎غيل الؚرنامج!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "كاؚت؎ا تنت؞ر"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "اخرج"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "أدِر"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "المعلومات"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "يرجى الولوج!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "توقّف"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "الغاء"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "التنزيل:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "إعادة الاتصال:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "السرعة:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "الن؎ط:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "أعد تحميل الصفحة"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "يحمّل"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "العودة لأعلى"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "اخرج من pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "أعد ت؎غيل pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "لإضافة مستخدم أو تغيير كلمات مرور استخدم:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "هامّ: حساؚ المدير Admin له دا؊ماً الصلاحيات الكاملة!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "غيّر كلمة السرّ"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "الم؎رف"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "الأذون"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "غيّر"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "أدخل كلمة السرّ الحاليّة والجديدة."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "المستخدم"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "كلمة السرّ الحالية"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "كلمة سرّ جديدة"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "كلمة السرّ الجديدة."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "كلمة السرّ الجديدة (إعادة)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "فضلاً أعد إدخال كلمة السرّ."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "لا يوجد لديك صلاحيات للوصول لهذه الصفحه"
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "مجلد التحميلات غير موجود"
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "غير محدود"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "غير متوفر"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "قم ؚت؎غيل pyload.py -s لتؚداء التثؚيت"
diff --git a/locale/ar/LC_MESSAGES/pyLoad.po b/locale/ar/LC_MESSAGES/pyLoad.po
index 7acb978f5..2f37f4a1b 100644
--- a/locale/ar/LC_MESSAGES/pyLoad.po
+++ b/locale/ar/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "تم استقؚال ا؎ارة انهاء"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "ؚاي لود يعمل حاليا ؚمعرف العملية %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "ف؎ل في تغيير المجموعه: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "ف؎ل في تغيير المستخدم: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "مجلد للتقارير"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "ؚدء"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "استخدام مجلد المنزل: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "مجلد للملفات الم؀قتة"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "مجلد للتحميلات"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL لاتصال امن"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "نقل اعدادت المستخدم القديم الى قاعدة الؚيانات"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "يرجى التاكد من ؚيانات الدخول ؚستخدام ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "تم مسح جميع الرواؚط"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "وقت التحميل: %"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "المساحه الحره: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "تفعيل الحساؚات..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "تفعيل الاضافات..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "ؚاي ولد محدث و يعمل"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "اعادة ت؎غيل ؚاي لود"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "اغلاق ؚاي لود"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "التثؚيت %"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "لا يمكن ايجاد %(وصف): %(اسم)"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "لا يمكن ان؎اء %(وصف): %(اسم)"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "جاري ايقاف الت؎غيل..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "خطاء اثناء ايقاف الت؎غيل "
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "انهاء ؚاي لود من الطرفيه"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "تم الانتهاء"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "غير متصل"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "متصل"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "في قا؊مة الانت؞ار"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "تخطي"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "انت؞ار"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "م؀قت. غير متصل"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "الؚدء"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "ف؎ل"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "الغاء"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "فك ت؎فير"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "مخصص"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "جاري التنزيل"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "تجهيز"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "غير معروف"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "انتهت الحزمه: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "خطاء في الواجهة الخلفيه للؚرنامج "
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "ؚدء %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "ف؎ل في تحميل الواجهه الخلفيه للؚرنامج %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "انت؞ار %"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "؎هادة SSL غير موجوده."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "نأسف, لقد اوقفنا الدعم للؚد؊ % مؚا؎ره من ؚاي لود "
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "عينات الاعدادات موجودة في المجلد module/webui/servers "
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "عينات الاعدادات موجودة في المجلد pyload/webui/servers "
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "لايمكن استخدام %(خادم), لم يتم تثؚيت python-flup!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "تحتاج لتحميل و تثؚيت bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "انسخ boern.so الى module/lib او استخدم setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "انسخ boern.so الى pyload/lib او استخدم setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "ؚالطؚع يجؚ ان تكون معتاد على لنكس وتعرف كيف تثؚت الؚرامج"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "هذا المخدم لا يقدم خدمة SSL، يرجى الن؞ر في استخدام ؚديلاً من ذلك"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "لا يوجد لديك صلاحيات للوصول لهذه الصفحه"
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "مجلد التحميلات غير موجود"
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "غير محدود"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "غير متوفر"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "قم ؚت؎غيل pyload.py -s لتؚداء التثؚيت"
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "ف؎ل التنزيل على اجزاء, العودة الى التنزيل على اتصال واحد | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "ؚدء التنزيل: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "تم الانتهاء من التنزيل: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "الاضافة %s تفتقد الى و؞يفة."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "تم الغاء التنزيل: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "تم اعادة ت؎غيل التنزيل: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "التنزيل غير متصل: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "التنزيل غير متصل م؀قتا: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "ف؎ل التنزيل: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "لايمكن الوصول الى الخادم او اعادة الاتصال, الانت؞ار 1 دقيقة و اعادة المحاولة."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "تم تخطي التنزيل: %(name)s ؚسؚؚ %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "ف؎ل جلؚ المعلومات ل %(name)s | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "ف؎ل التفعيل %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "الاضافات المفعلة: %"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "الاضافات المعطلة: %"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "ف؎ل في اعادة الاتصال: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "الؚرنامج النصي لاعادة الاتصال غير متوفر!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "ؚدء اعادة الاتصال"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "ف؎ل في تنفيذ الؚرنامج النصي لاعادة الاتصال!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "تمت اعادة الاتصال, IP جديد: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "لم يتؚقى مساحة كافية على الجهاز"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "لا يمكن تسجيل الدخول ؚهذا الحساؚ %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "كلمة مرور خاط؊ة"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "الحساؚ %s ليس فية كمية ؚيانات كافية, اعد التحقق خلال 30 دقيقة"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "انتهت مدة الحساؚ %s, تحقق مرة اخرى في 1 ساعة"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "لقد وصلت الى الحد الاقصى للتنزيل"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "خطأ في استيراد %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "لا مستضيف محمل"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "قم ؚتفعيل التحميل المؚا؎ر في حساؚ Bitshare لديك"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "مطلوؚ تصريح (اسم مستخدم: كلمة مرور)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "الرجاء إدخال حساؚك في %s أو إلغاء تن؎يط هذة الاضافة"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "هناك رمز HTML في الملفات اللتي تم تنزيلها (%s)...خطاء اعادة توجية؟سوف يتم اعادة ت؎غيل التنزيل."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "الملف غير متوفر م؀قتا"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "ضغط ال؎ؚكة: الانت؞ار ؚين التنزيلات %d."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "ضغط ال؎ؚكة: الانت؞ار من اجل كلمة التحقق%d."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "الملف اللذي تم تنزيلة فارغ"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "مفتاح واحهة ؚرمجة التطؚيقات غير صالح"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: لم يتؚقى لديك ؚيانات كافية"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "تم تجاوز الؚيانات المتوفرة"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: ؚيانات الم؎اركة (تحميل مؚا؎ر)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "جاري التحميل من عنوان الانترنت هذا, انت؞ر ل 60 ثانية"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "رمز تاكيد غير صالح, سوف يتم اعادة التنزيل"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: لا يوجد مساحات فارغة"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "تحناج لحساؚ مدفوع من اجل هذا الملف"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "تم الاؚلاغ عن اسم الملف غير صالح"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "خطاء تنزيلات متوازية, الان انت؞ر 60 ثانية."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "لم يتم تسجيل الدخول."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "ف؎ل في فك الت؎فير"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "لا يوجد مفتاح ملف مقدم في عنوان الانترنت"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "رمز خطاء:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** تم تحديث الاضافات, يرجى اعادة ت؎غيل ؚاي لود ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "تم تحديث الاضافات و اعادة ت؎غيلها"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "لا يوجد تحديثات للاضافات"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "لايوجد تحديثات ل ؚاي لود"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** نسخه جديده %s من ؚاي لود متوفره ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** احصل عليها من هنا: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "غير قادر على الاتصال ؚالخادم من اجل التحديث"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "نسخه جديدة من %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "حصل خطاء عند التحديث %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "نسخة غير متطاؚقة"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "انتهى التنزيل: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "طلؚ كلمة تحقق جديد: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "اجؚ Øš 'c %s نص على كلمة التحقق'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "اضافه %s من HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "لا %s مثؚت"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "لا يمكن تفعيل %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "تم التفعيل"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "لا اضافات استخراج مفعلة"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "الحزمه %s في قا؊مة الانت؞ار للاستخراج لاحقا"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "تفحص الحزم %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "استخراج الى %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "لم يتم العثور على ملفات للاستخراج"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "فك ال؞غط"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "محمي ؚكلمة مرور"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "كلمة مرور خاط؊ة"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "حذف %s الملفات"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "تم الانتهاء من الاستخراج"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "خطأ في الأر؎يف"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC غير متطاؚق"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "خطاء غير معروف"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "ف؎ل في تحديد المستخدم و المجموعة"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "ضغط و تحميل: منفذ 9666 قيد الاستخدام"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%sرصيد متؚقي"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "لايمكن ارسال رد."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "حساؚك في CaptchaTrader لا يحتوي رصيد كافي"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "لم يتم العثور على قا؊مة Crypter"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "قا؊مة Crypter فارغة"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "انتهى التحميل: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "هوية تحقق جديدة من upload: %s :%s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "حساؚك للتحقق 9kw.eu لا يحتوي على رصيد كافي"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "سكرؚت مثؚت ل %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "سكرؚت غير قاؚل للتنفيذ:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "خطاء في %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "لم يتؚقى لديك رصيد كافي في حساؚ ExpertDecoders لديك"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "يرجى اضافة حساؚ rehost.to اولا ثم اعاده ت؎غيل ؚاي لود"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d رصيد متؚقي"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "pil و tesseract غير مثؚت ولايوجد عميل متصل لفك كلمة التحقق"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "ف؎ل في اعداد المستخدم و المجموعه: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "لايوجد عميل متصل لفك ت؎فير الكاؚات؎ا"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "حزم مضافه %(اسم) تحتوي %(عدد) رواؚط"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "مضافه %(عدد) رواؚط الى الحزمه #%(حزم)"
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "لم يتم العثور على محرك js, يرجى تثؚيت Spidermonkey, ossp-js, pyv8 او rhino"
diff --git a/locale/ar/LC_MESSAGES/pyLoadCli.po b/locale/ar/LC_MESSAGES/pyLoadCli.po
index 68d792617..fabbb0d85 100644
--- a/locale/ar/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ar/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " واجهة سطر الأوامر"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s التنزيلات:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " السرعة: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " الحجم: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " الانتهاء في: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " معرف: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "في انت؞ار: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "الحالة:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "تم إيقاف م؀قتاً"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "ت؎غيل"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "السرعة الإجمالية"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "الملفات الموجودة في قا؊مة الانت؞ار"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "المجموع"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "القا؊مة:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " اضافة رواؚط"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " إدارة قا؊مة الانت؞ار"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " إدارة جامع الرواؚط"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " (عدم) ايقاف م؀قت للخادم"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " قتل الخادم"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " إنهاء"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "الرجاء استخدام ؚناء الجملة التالي: إضافة <Package name><link><link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "التحقق %d من الرواؚط:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "الملف غير موجود."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "تم انهاء ؚاي لود"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "اطؚع حالة الخادم"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "اكتؚ التنزيلات اللتي في قا؊مة الانت؞ار"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "اكتؚ التنزيلات اللتي في جامع الرواؚط"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "اضافة حزمة الى قا؊مة الانت؞ار"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "اضافة حزمة إلى جامع الرواؚط"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "حذف الملفات من قا؊مة الانت؞ار/جامع الرواؚط"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "حذف حزم من قا؊مة الانت؞ار/جامع الرواؚط"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "نقل الحزم من قا؊مة الانت؞ار إلى جامع الرواؚط أو العكس ؚالعكس"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "إعادة ت؎غيل الملفات"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "إعادة ت؎غيل الحزم"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "تحقق من حالة الاتصال، يعمل مع المحتوى المحلي"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "التحقق من حالة الاتصال من الملف المحتوى"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "إيقاف الخادم م؀قتا"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "متاؚعة التنزيلات"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "تؚديل إيقاف/عدم ايقاف الإيقاف الم؀قت"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "قتل الخادم"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "قا؊مة الأوامر:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "لا يمكن كتاؚة ملف اعدادات المستخدم"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "العنوان: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "المنفذ: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "اسم المستخدم: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "كلمة المرور: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "ؚيانات تسجيل الدخول خاط؊ة."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "لا يمكن ان؎اء اتصال %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "أنت ؚحاجة إلى py-openssl للاتصال ؚهذا الاساس من ؚاي لود."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "الوضع التؚادلي تم تجاهله حيث انك مررت ؚعض الاوامر."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "إضافة حزمة:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "أدخل اسماً للحزمة الجديدة"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "الحزمة: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "تحليل الرواؚط التي تريد إضافتها."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "اكتؚ %s عند الانتهاء."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "تم اضافة الرواؚط: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " العودة إلى القا؊مة الر؊يسية"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "إدارة الحزم:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "إدارة الرواؚط:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "ما اللذي تريد نقلة ؟"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "ما اللذي تريد حذفة ؟"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "ما اللذي تريد اعادة ت؎غيلة ؟"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "حذف"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "نقل"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "إعادة ت؎غيل"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " -الساؚقة"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " -التالي"
diff --git a/locale/ar/LC_MESSAGES/setup.po b/locale/ar/LC_MESSAGES/setup.po
index b9b466981..00bfae831 100644
--- a/locale/ar/LC_MESSAGES/setup.po
+++ b/locale/ar/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "مرحؚا ؚكم في مساعد اعداد ؚاي لود ."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "سوف يتم فحص ن؞امك وعمل تثؚيت اولي من اجل ت؎غيل ؚاي لود."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "القيمة الموجودة في الأقواس [] هي دا؊ماً القيمة الافتراضية،"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "في حال كنت لا ترغؚ في تغييرها أو كنت غير متأكد من ما تختار، فقط اضغط أدخال."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "لا تنسى: يمكنك دا؊ماً إعادة ت؎غيل هذا المساعد ؚستخدام--setup أو-s المعلمة، عند ؚدء ت؎غيل pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "للانهاء، وعدم السماح له الؚد؊ مع pyload.py تلقا؊ياً ؚعد الآن."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "عندما تكون على استعداد للتحقق من الن؞ام، اضغط مفتاح الادخال."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "واجهة ال؎نكؚوتية"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "الاستمرار في التنصيؚ؟"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "هل تريد تغير مكان الاعدادات؟ الحالي هو %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "تغيير مسار الاعداد؟"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "هل تريد اعداد الاعدادات الأساسية وؚيانات الدخول؟"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "هذا مستحسن من اجل الت؎غيلة الاولى."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "صنع الاعدادات الاساسية؟"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "هل تريد اعداد ssl؟"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "اعداد ssl؟"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "هل تريد اعداد واحهة الويؚ؟"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "اعداد واجهة الويؚ؟"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "تم انهاء التثؚيت ؚنجاح."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "اضغ؞ مفتاح الادخال للانهاء و اعادة ت؎غيل ؚاي لود"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "# # الإعداد الأساسي # #"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "ؚيانات تسجيل الدخول التالية صالحة لواجهة سطر الاوامر, واجهة المستخدم و واجهة الويؚ."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "اسم المستخدم"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "اللغة"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "العدد الاقصى التنزيلات المتوازيية (التنزيلات في نفس الوقت)"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "استخدام إعادة الاتصال؟"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "موقع الؚرنامج النصي لاعادة الاتصال"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "# # اعداد واجهة الويؚ # #"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "تن؎يط واجهة الويؚ؟"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "عنوان الواجهة, اذا قمت ؚستخدام 127.0.0.1 او localhost, واجهة الويؚ سوف تكون قاؚلة للوصول محليا فقط."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "عنوان"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "المنفذ"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "يقدم ؚاي لود خوادم متعددة للواجهة الخلفية، الآن ؚعد ؎رحاً موجزاً."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "يمكن استخدامها ؚواسطة أؚات؎ي، lighttpd، يتطلؚ منك اعدادهم, وهي ليست مهمة سهلة جداً."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "يمكنك الحصول علية من هنا : https://github.com/jonashaag/bjoern, قم ؚتجميعة ؚرمجيا"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "انتؚاه: في ؚعض الحالات النادرة الخادم المدمج لا يعمل، إذا لاح؞ت وجود م؎اكل مع واجهة الويؚ"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "عد إلى هنا وقم ؚتغير الخادم مدمج لذالك المذكور هنا."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "خادم"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "# # إعداد SSL # #"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "تنفيذ هذه الأوامر من مجلد اعداد ؚاي لود لانتاج ؎هادات ssl:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "اذا انتهيت وكل ؎يء جرى ؚ؎كل صحيح, تستطيع تفعيل ssl الان."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "تفعيل SSL؟"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "حدد الإجراء"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1-إن؎اء/تحرير المستخدم"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2-قا؊مة المستخدمين"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3-إزالة المستخدم"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4-إنهاء"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "المستخدمين"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "اضغط Enter للإنهاء."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "ف؎ل الإعداد مسار التكوين: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "كلمة المرور: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "كلمة المرور قصيرة جداً. استخدام 4 رموز على الاقل."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "كلمة المرور (مرة أخرى): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "لم تتطاؚق كلمتا المرور."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "نعم"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "صحيح"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "لا"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "خاط؊ة"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "الإدخال غير صالح"
diff --git a/locale/bn/LC_MESSAGES/django.po b/locale/bn/LC_MESSAGES/django.po
index 9f320829d..759264ae6 100644
--- a/locale/bn/LC_MESSAGES/django.po
+++ b/locale/bn/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/bn/LC_MESSAGES/pyLoad.po b/locale/bn/LC_MESSAGES/pyLoad.po
index 002e93ad1..99e491023 100644
--- a/locale/bn/LC_MESSAGES/pyLoad.po
+++ b/locale/bn/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/bn/LC_MESSAGES/pyLoadCli.po b/locale/bn/LC_MESSAGES/pyLoadCli.po
index 945fc0276..dc7a6deaf 100644
--- a/locale/bn/LC_MESSAGES/pyLoadCli.po
+++ b/locale/bn/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/bn/LC_MESSAGES/setup.po b/locale/bn/LC_MESSAGES/setup.po
index da42f421a..cc40924e3 100644
--- a/locale/bn/LC_MESSAGES/setup.po
+++ b/locale/bn/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/ca/LC_MESSAGES/django.po b/locale/ca/LC_MESSAGES/django.po
index 2306240f8..e91b2fe3f 100644
--- a/locale/ca/LC_MESSAGES/django.po
+++ b/locale/ca/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Sol·licitud d'un nou Captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Si us plau introdueixi el text que apareix al captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad ha estat reiniciat"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "apagat"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Èxit"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "encÚs"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Estas segur que vols sortir del pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Reiniciar Enllaç"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Elimina enllaç"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Introdueixi el nom del paquet."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Clica a la posició correcta del captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "S'ha produït un error."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "El directori és buit"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Ha fallat"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "No hi ha captchas per llegir."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Les contrasenyes no coincideixen."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Paràmetres desats."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nou directori"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Estas segur que vols reiniciar pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperant %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Descàrregues actives"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Inici"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Descàrregues"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Registres"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuració"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nom"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Estat"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informació"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Mida"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Progrés"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Inici de sessió"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Nom d'usuari"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Contrasenya"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "El teu usuari d'usuari i contrasenya no concorden. Torna-ho a provar."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Per reiniciar les teves dades de login o afegir usuari executa:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Eliminar acabat"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Reiniciar fallit"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Carpeta:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Contrasenya:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Editar paquet"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Editar detalls del paquet segÃŒent."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Nom del paquet."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Carpeta"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nom de la subcarpeta per aquestes descàrregues."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Llista de contrasenyes emprades per l'unrar."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Enviar"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Reiniciar"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Has tancat la sessió correctament."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Ruta"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolut"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relatiu"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nom"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "mida"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tipus"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "última modificació"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "directori pare"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "sense contingut"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "General"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Comptes"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Tria una secció del menú"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Connector"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Vàlid fins"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Tràfic restant"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Temps"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max Paral·lel"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Eliminar?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "vàlid"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "invàlid"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "sí"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Afegir"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Afegir compte"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Introdueix les dades del teu compte per emprar les característiques premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "El seu nom d'usuari."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "La contrasenya és per aquest compte."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Tipus"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Tria proveïdor del teu compte."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Començar"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "anterior"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "segÃŒent"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fi"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Notícies"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Suport"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistema"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "S.O.:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "versió del pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Carpeta de instal·lació:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Carpeta de configuració:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Carpeta de descàrregues:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Espai lliure:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Idioma:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Port de la interfície Web:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Port de la interfície remota:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Configuració"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Gestor de Fitxers"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Afegir paquet"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Aferra els teus enllaços o puja un fitxer contenidor."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Nom del nou paquet."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Enllaços"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Aferra els teus enllaços aquó o qualsevol text i pitja el botó de filtrat."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtra urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Contrasenya per l'arxiu RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Fitxer"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Puja un contenidor."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Destinació"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Llegint captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "El captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Introdueix el text del captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Tancar"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interfície web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Hi ha una actualització de pyLoad disponible!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins actualitzats, si us plau reinicia!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Esperant captcha"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Sortir"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrar"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Informació"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Si us plau fes login!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Aturar"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Cancel·lar"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Descàrrega:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Reconnectar:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Velocitat:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Actiu:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Recarregar pàgina"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "carregant"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Tornar a l'inici"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Sortir de pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Reiniciar pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Per afegir usuari o canviar contrasenya emprar:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Important: L'usuari administrador sempre te tots els permisos!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Canviar Contrasenya"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Administrador"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Permisos"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "canviar"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Introdueixi la contrasenya actual i la desitjada."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Usuari"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Contrasenya actual"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Contrasenya nova"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "La nova contrasenya."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nova contrasenya (repetir)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Siusplau repeteix la nova contrasenya."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "No tens permisos per accedir a aquesta pàgina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "No s'ha trobat el directori de descàrregues."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "il·limitat"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "no disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Executa pyload.py -s per accedir a l'instal·lació."
diff --git a/locale/ca/LC_MESSAGES/pyLoad.po b/locale/ca/LC_MESSAGES/pyLoad.po
index 5d58ff375..732ef9ec8 100644
--- a/locale/ca/LC_MESSAGES/pyLoad.po
+++ b/locale/ca/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "S'ha rebut la senyal de Sortida"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "ja s'estat executant pyLoad amb el pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Ha fallat el canvi de el grup: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Ha fallat el canvi d'usuari: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "carpeta de registre"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Començant"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Emprant el directori d'inici: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto descodificarà el contenidor de fitxers"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "carpeta per fitxers temporals"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "carpeta de descàrregues"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL per connexions segures"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Movent l'antiga configuració d'usuari a la DB"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Comprova les teves dades de login amb ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Tots els enllaços eliminats"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Temps de descàrrega: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Espai lliure: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Activant Comptes..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Activant Plugins..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad està en funcionament"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "reiniciant pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad està sortint"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Instal·la %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "no s'ha pogut trobar %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "no s'ha pogut crear %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "apagant..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "ha succeït un error mentre s'apagava"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "matat pyLoad des de el Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "L'arxiu de la base de dades ha estat eliminat per una incompatiblitat de la versió."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "El fitxer de la base de dades NO pot ser convertit."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "La base de dades ha estat convertida de la v2 a la v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "La base de dades ha estat convertida de la v3 a la v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Convertint l'antiga BD de Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "finalitzat"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "fora de línia"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "en línia"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "en cua"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "saltat"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "esperant"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temporalment fora de línia"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "començant"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "fallit"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "avortat"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "desxifrant"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personalitzat"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "descarregant"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "processant"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "deconegut"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paquet finalitzat: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Emprant SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Error al backend remot: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Iniciant %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "S'ha fallat la carrega del backend %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperant %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "No s'han trobat els certificats SSL."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Ho sent molt, ja no permetem iniciar %s directament emprant pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Pots emprar el servidor amb fils que ofereix millor rendiment i ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "per suposat encara pots emprar el teu %s amb el servidor fastcgi de pyLoad"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "les configuracions d'exemple estan al directori module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "les configuracions d'exemple estan al directori pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "No s'ha pogut emprar %(server)s, python-flup no està instal·lat!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Error important el servidor lleuger: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Has de descarregar i compilar el bjoern. https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Copia el fitxer boern.so a la carpeta module/lib o empra setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Copia el fitxer boern.so a la carpeta pyload/lib o empra setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Per suposat hauràs d'estar familiaritzat amb GNU/Linux i sabre com compilar programes"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "El servidor està en mode multi-fil degut als problemes de rendiment a windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Aquest servidor no ofereix SSL, si us plau considera l'opció d'emprar el servidor amb fils"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Iniciant el servidor incorporat: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Iniciant el servidor web SSL amb fils: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Iniciant el servidor web amb fils: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Iniciant el servidor fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Iniciant el servidor web lleuger (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "No tens permisos per accedir a aquesta pàgina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "No s'ha trobat el directori de descàrregues."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "il·limitat"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "no disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Executa pyload.py -s per accedir a l'instal·lació."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Descàrrega per trossos fallida, tornant a la connexió única | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Iniciant descàrrega: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Descàrrega finalitzada: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "El plugin %s troba a faltar una funció."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Descàrrega avortada: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Descàrrega reiniciada: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "La descàrrega està fora de línia: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "La descàrrega està temporalment fora de línia: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Descàrrega fallida: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "No s'ha pogut connectar amb el servidor o la connexió s'ha reiniciat, esperant 1 minuts per tornar-ho a provar."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Descàrrega omitida: %(name)s due to %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Desxifrant comença en: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Desxifrat fallit: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Re-intentant %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Obtenint informació per %(name)s failed | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Error executant ganxos: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "L'activació de %(name)s ha fallat"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Plugins activats: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Plugins desactivats: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Reconnexió fallida: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "No s'ha trobat l'script de reconnexió!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Iniciant reconnexió"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "L'execució de l'script de reconnexió ha fallat!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Reconnectat, nova IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "No queda suficient espai lliure al dispositiu"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "No s'ha pogut iniciar sessió amb el compte %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Contrasenya Errònia"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "L'hora %s està en un format incorrecte, empra: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "El compte %s no te suficient tràfic, es tornarà a comprovar d'aquí 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "El compte %s està caducat, es tornarà a comprovar d'aquí 1h"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Límit de descàrrega assolit"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s té un patró invàlid."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Error important %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "No s'ha carregat cap proveïdor"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Activa la descàrrega directa al teu compte de Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList no pot ser netejat."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Els ajustaments del compte han estat eliminats degut al nou format de la configuració."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorització requerida (usuari:contrasenya)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Si us plau, introdueixi el seu compte de %s o desactivar aquest plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Hi havia Codi HTML en el fitxer (%s) descarregat... error de re-direcció? Es re-iniciarà la descàrrega."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Fitxer temporalment no disponible"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: esperant entre descàrregues %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: esperant per captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "El fitxer descarregat estava buit"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Clau de API invàlida"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: No queda suficient tràfic"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Tràfic excedit"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Tràfic Compartit (descàrrega directa)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Ja s'està descarregant des de aquesta adreça IP, esperant 60 segons"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Codi d'Autenticació invàlid, la descàrrega serà reiniciada"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: No hi ha espais lliures"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Necessites un compte premium per aquest fitxer"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Nom de fitxer informat invàlid"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Error de descàrrega paral·lela, esperant 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "No connectat."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Desxifrat ha fallat"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Cap clau de fitxer proporcionat a la URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Codi d'error:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "El fitxer no existeix."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "* * * Plugins s'han actualitzat, si us plau reinicieu pyLoad * * *"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins actualitzats i recarregats"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "No hi ha actualitzacions de plugins disponibles"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "No hi ha actualitzacions del pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** La nova Versió %s de pyLoad està disponible ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Obtengui'l aquí: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "No es pot connectar al servidor per actualitzacions"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nova versió de %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "S'ha produït un error mentre s'actualitzava %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "La versió no coincideix"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Descàrrega finalitzada: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nova petició de Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Constesta amb 'c %s text del captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Si us plau, afegeiu el vostre compte premium.to i torneu a iniciar pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Afegit %s des de HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "El %s no està instal·lat"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "No s'ha pogut activar %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Activat"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "No hi han connectors d'extracció activats"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "El paquet %s s'ha posat a la cua per una posterior extracció"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Revisa el paquet %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Extreu a %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "No s'han trobat fitxers per extreure"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "extraient"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Protegit amb contrasenya"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Contrasenya incorrecta"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Eliminant els fitxers %s"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Extracció finalitzada"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Error d'arxiu"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "El CRC no coincideix"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Error desconegut"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Configuració d'usuari i el grup ha fallat"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: El Port 9666 ja s'està en ús"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s crÚdits restants"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "No s'ha pogut enviar la resposta."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "El teu compte de CaptchaTrader no te crÚdits suficients"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Llista de Crypter no trobada"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "La llista de Crypter està buida"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Descàrrega finalitzada : %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nou CaptchaID de càrrega: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "El teu compte de 9kw.eu no te crÚdits suficients"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Scripts instal·lats per %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script no executable:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Error en %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "El teu compte de ExpertDecoders no te crÚdits suficients"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Si us plau afegir el seu compte de rehost.to primer i reinicieu pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Si us plau afegiu un compte vàlid premiumize.me primer i reinicieu pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d crÚdits restants"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil i tesseract no estan instal·lats i no hi ha cap Client connectat per desxifrar captchas"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Cap plugin ha pogut obtenir resultats apropiats d'aquest captcha en un temps assignat."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Aplicació d'Usuari i el Grup ha fallat: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "No hi ha cap client connectat per des-encriptar el captcha"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Afegit paquet %(name)s que conté les enllaços %(count)d"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Afegits %(count)d enllaços al paquet #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "No s'ha trobat cap motor js, si us plau instal·la Spidermonkey, ossp-js, pyv8 o rhino"
diff --git a/locale/ca/LC_MESSAGES/pyLoadCli.po b/locale/ca/LC_MESSAGES/pyLoadCli.po
index 995e05137..da383b6a7 100644
--- a/locale/ca/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ca/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Línia de Comandes"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Baixades:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Velocitat: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Mida: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Acabarà en: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "esperant: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Estat:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "pausat"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "executant"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "velocitat Total"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Fitxers en cua"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Menú:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Afegeix enllaços"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Gestiona Cua"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Gestiona Col·lector"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "ReprÚn/Pausa Servidor"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Mata Servidor"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Surt"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Si us plau empreu aquesta sintaxi: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Comprovant %d enllaç(os):"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "El fitxer no existeix."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad ha finalitzat"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Mostra estat del servidor"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Mostra descàrregues en cua"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Mostra descàrreges en el col·lector"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Afegeix paquet a la cua"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Afegeix paquet al col·lector"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Elimina Fitxers de la Cua/Col·lector"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Elimina Paquets de la Cua/Col·lector"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Mou Paquets de la Cua al Col·lector o viceversa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Reinicia fitxers"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Reinicia paquets"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Comprova l'estat online, funciona amb contenidor local"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Comprova l'estat online d'un fitxer contenidor"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pausa el servidor"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continua les descàrregues"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Canvia pausa/reprÚn"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "mata servidor"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Llista de comandes:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "No s'ha pogut escriure el fitxer de configuració d'usuari"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Necessites py-openssl per connectar-te al nucli del pyLoad."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adreça: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Nom d'usuari: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Contrasenya: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Dades d'accés incorrectes."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "No s'ha pogut establir la connexió a %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Necessites py-openssl per connectar-te al nucli del pyLoad."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Mode interactiu ignorat ja que has especificat algunes comandes."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Afegeix Paquet:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Introdueix el nom per el nou paquet"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paquet: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analitza dels enllaços que vols introduir."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Introdueix %s en acabar."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Enllaços afegits: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " torna al menú principal"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Gestiona Paquets:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Gestiona Enllaços:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "QuÚ vols moure?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "QuÚ vols eliminar?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "QuÚ vols reiniciar?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Tria el que vols fer o introdueix un número de paquet."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "elimina"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "mou"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "reinicia"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - anterior"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - segÃŒent"
diff --git a/locale/ca/LC_MESSAGES/setup.po b/locale/ca/LC_MESSAGES/setup.po
index 0ad9ba08a..8f6fbeb8c 100644
--- a/locale/ca/LC_MESSAGES/setup.po
+++ b/locale/ca/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "s"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Benvingut a l'Assistent de Configuració de pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Es comprovarà el teu equip i es farà una configuració bàsica per executar pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "El valor entre claudàtors [] sempre és el valor per defecte,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "en cas de no voler canviar-ho o si estas insegur de que triar simplement pitja enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "No oblidis: Sempre pots tornar a l'assistent amb els paràmetres --setup o -s quan inicies el pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Si tens cap problema amb l'assistent pitja Control-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "per avortar i no permetre que s'iniciï automàticament amb pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Quan estiguis llest per la comprovació del sistema pitja enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Necessites pycurl, squlit i python 2.5, 2.6 o 2.7 per executar pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Si us plau corregeix aixo i torna a executar el pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "L'assistent ara es tancarà."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "La comprovació del sistema ha acabat, pitja enter per veure l'informe de l'estat."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Estat ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "desxifrant contenidor"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "connexió SSL"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "desxifrat automàtic de captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interfície web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "extensió Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Funcionalitats disponibles:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Funcionalitats no disponibles: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crytop no disponible"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Això es necessari si vols desxifrar els contenidors de fitxers."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL no disponible"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Això es necessari si vols establir connexions segures amb el nucli o la interfície web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Si només voleu accedir a pyLoad localment el SSL no és necessari."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "reconeixedor de Captchas no disponible"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Només necessari per alguns proveïdors com a usuari gratuït."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI no disponible"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "La Interfície Gràfica d'Usuari."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "no s'ha trobat el motor JavaScript"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Es necessari algun d'aquests paquets per els enllaços Click'N'Load. Instal.la Spidermonkey, ossp-js, pyv8 o rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Ara pots avortar la instal·lació i arreglar les dependÚncies, si així ho prefereixes."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Continuar amb la instal·lació?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Vols canviar la ruta de configuració? Actualment és %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Si estas emprant pyLoad en un servidor o en una partició a un dispositiu flash intern és una bona idea canviar-ho."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Canviar la ruta de configuració?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Vols configurar les dades d'accés i la configuració bàsica?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Això és recomanant en la primera execució."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Establir una configuració bàsica?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Vols configurar el SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Configurar SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Vols configurar l'interíicie web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Configurar interfície web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Configuració finalitzada satisfactòriament."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Pitja enter i reinicia pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Comprovació del Sistema ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "La teva versió de python és massa nova. Si us plau empra Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "La teva versió de python és massa antiga. Si us plau empra com a mínim Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Versió de Python: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "La teva versió %s de jinja2 es massa antiga."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Pots continuar tranquil·lament encara que la interfície web no funcioni,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "si us plau actualitza o desinstal·la-ho, pylLoad ja inclou una biblioteca jinja2."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "Motor JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Configuració bàsica ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Les dades d'accés segÌents són vàlides per CLI, GUI i la interfície web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Nom d'usuari"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Els clients externs (GUI, CLI i altres) necessiten accés remot a través de la xarxa per funcionar."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "No obstant, si només vos emprar la interfície web pots deshabilitar-lo per estalviar memòria ram."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Activar accés remot"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Idioma"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Directori de descàrregues"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Nombre màxim de descàrregues paral·leles"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Emprar el reconnectar?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Ubicació de l'script de reconnexió"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Configuració de la interfície Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Activar interfície web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adreça d'escolta, si empres 127.0.0.1 o localhost la interfície web només serà accessible localment."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adreça"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad ofereix uns quants backends, ara se'n farà una breu explicació."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "El servidor per defecte es la millor opció si no saps quin triar."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Aquest servidor ofereix SSL i es una bona alternativa a l'integrat."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Pots emprar apache, lighttpd, però requereixen ser configurats i no sempre és una tasca fàcil."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Una alternativa escrita en C, requereix libev i coneixements de GNU/Linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Aconsegueix-lo aquí: https://github.com/jonashaag/bjoern, compila'l"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "i copia bjoren.so a module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "i copia bjoren.so a pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Atenció: En alguns casos estranys el servidor integrat no funciona, ho notareu amb problemes a la interfície web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "torna aquí i canvia el servidor integrat per el servidor amb fils."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Servidor"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Configuració SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Executa aquesta comanada des de la carpeta de configuració de pyLoad per fer els certificats SSL:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Si has acabat i tot ha anat bé ara podràs activar el SSL."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Activar SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Tria una opció"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Crear/editar usuari"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Llistar usuaris"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Eliminar usuari"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Sortir"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Usuaris"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Configurant nova ruta de configuració, la configuració actual no serà transferida!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Ruta de configuració"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Ruta de configuració canviada, la instal·lació es tancarà, si us plau reinicia per continuar."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Pitja enter per sortir."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "L'ajustament de la ruta de configuració ha fallat: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: perdut"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Contrasenya: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "La contrasenya és massa curta. Utilitzeu almenys 4 caràcters."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Contrasenya (altre cop): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Les contrasenyes no coincideixen."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "sí"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "cert"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "c"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "fals"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Entrada invàlida"
diff --git a/locale/cli.pot b/locale/cli.pot
index e6cd0a1e3..db8033d31 100644
--- a/locale/cli.pot
+++ b/locale/cli.pot
@@ -17,283 +17,283 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/core.pot b/locale/core.pot
index 177ac109c..47550a6aa 100644
--- a/locale/core.pot
+++ b/locale/core.pot
@@ -17,882 +17,882 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: module/Core.py:181
+#: pyload/Core.py:181
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:302
+#: pyload/Core.py:302
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:316
+#: pyload/Core.py:316
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:326
+#: pyload/Core.py:326
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:328
+#: pyload/Core.py:328
msgid "folder for logs"
msgstr ""
-#: module/Core.py:339
+#: pyload/Core.py:339
msgid "Starting"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:349
+#: pyload/Core.py:349
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:352
+#: pyload/Core.py:352
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:357
+#: pyload/Core.py:357
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:360
+#: pyload/Core.py:360
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:364
+#: pyload/Core.py:364
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:367
+#: pyload/Core.py:367
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:370
+#: pyload/Core.py:370
msgid "All links removed"
msgstr ""
-#: module/Core.py:401
+#: pyload/Core.py:401
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:411
+#: pyload/Core.py:411
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:431
+#: pyload/Core.py:431
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:437
+#: pyload/Core.py:437
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:440
+#: pyload/Core.py:440
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:459
+#: pyload/Core.py:459
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:463
+#: pyload/Core.py:463
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:520
+#: pyload/Core.py:520
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:556
+#: pyload/Core.py:556
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:558
+#: pyload/Core.py:558
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:579
+#: pyload/Core.py:579
msgid "shutting down..."
msgstr ""
-#: module/Core.py:596
+#: pyload/Core.py:596
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:660
+#: pyload/Core.py:660
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:36
+#: pyload/threads/ServerThread.py:36
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:42
+#: pyload/threads/ServerThread.py:42
#, python-format
msgid ""
"of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:43
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:43
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:58
+#: pyload/threads/ServerThread.py:58
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid ""
"You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:60
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:60
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:61
+#: pyload/threads/ServerThread.py:61
msgid ""
"Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:64
+#: pyload/threads/ServerThread.py:64
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:127
+#: pyload/webui/app/pyload.py:127
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:195
+#: pyload/webui/app/pyload.py:195
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:264 module/webui/app/pyload.py:271
+#: pyload/webui/app/pyload.py:264 pyload/webui/app/pyload.py:271
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:509
+#: pyload/webui/app/pyload.py:509
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid ""
"Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:103
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:103
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:90
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:90
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:243
+#: pyload/plugins/Account.py:243
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:269
+#: pyload/plugins/Account.py:269
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:276
+#: pyload/plugins/Account.py:276
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:126
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:126
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:132
+#: pyload/plugins/internal/MultiHoster.py:132
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:38
+#: pyload/plugins/accounts/BitshareCom.py:38
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:64
+#: pyload/plugins/container/LinkList.py:64
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:23
-#: module/plugins/hoster/RealdebridCom.py:40
-#: module/plugins/hoster/FreeWayMe.py:39 module/plugins/hoster/ZeveraCom.py:21
-#: module/plugins/hoster/UnrestrictLi.py:52
-#: module/plugins/hoster/Vipleech4uCom.py:30
-#: module/plugins/hoster/Premium4Me.py:27 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/SimplyPremiumCom.py:52
-#: module/plugins/hoster/MegaDebridEu.py:46
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/LinksnappyCom.py:29
-#: module/plugins/hoster/DebridItaliaCom.py:39
-#: module/plugins/hoster/RPNetBiz.py:28
-#: module/plugins/hoster/MultiDebridCom.py:40
-#: module/plugins/hoster/ReloadCc.py:26 module/plugins/hoster/OverLoadMe.py:38
-#: module/plugins/hoster/RehostTo.py:25
-#: module/plugins/hoster/PremiumizeMe.py:24
-#: module/plugins/hooks/RPNetBiz.py:45
+#: pyload/plugins/hoster/SimplydebridCom.py:23
+#: pyload/plugins/hoster/RealdebridCom.py:40
+#: pyload/plugins/hoster/FreeWayMe.py:39 pyload/plugins/hoster/ZeveraCom.py:21
+#: pyload/plugins/hoster/UnrestrictLi.py:52
+#: pyload/plugins/hoster/Vipleech4uCom.py:30
+#: pyload/plugins/hoster/Premium4Me.py:27 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/SimplyPremiumCom.py:52
+#: pyload/plugins/hoster/MegaDebridEu.py:46
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/LinksnappyCom.py:29
+#: pyload/plugins/hoster/DebridItaliaCom.py:39
+#: pyload/plugins/hoster/RPNetBiz.py:28
+#: pyload/plugins/hoster/MultiDebridCom.py:40
+#: pyload/plugins/hoster/ReloadCc.py:26 pyload/plugins/hoster/OverLoadMe.py:38
+#: pyload/plugins/hoster/RehostTo.py:25
+#: pyload/plugins/hoster/PremiumizeMe.py:24
+#: pyload/plugins/hooks/RPNetBiz.py:45
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:98
+#: pyload/plugins/hoster/FilesMailRu.py:98
#, python-format
msgid ""
"There was HTML Code in the Downloaded File (%s)...redirect error? The "
"Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:145
-#: module/plugins/hoster/NetloadIn.py:169
+#: pyload/plugins/hoster/NetloadIn.py:145
+#: pyload/plugins/hoster/NetloadIn.py:169
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:182
+#: pyload/plugins/hoster/NetloadIn.py:182
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:213
+#: pyload/plugins/hoster/NetloadIn.py:213
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:251
+#: pyload/plugins/hoster/NetloadIn.py:251
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/MegaDebridEu.py:49
+#: pyload/plugins/hoster/MegaDebridEu.py:49
#, python-format
msgid "Impossible to connect to %s"
msgstr ""
-#: module/plugins/hoster/MegaDebridEu.py:89
+#: pyload/plugins/hoster/MegaDebridEu.py:89
#, python-format
msgid "Impossible to debrid %s"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:99
+#: pyload/plugins/hoster/RapidshareCom.py:99
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:126
-#: module/plugins/hoster/RapidshareCom.py:193
+#: pyload/plugins/hoster/RapidshareCom.py:126
+#: pyload/plugins/hoster/RapidshareCom.py:193
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:130
+#: pyload/plugins/hoster/RapidshareCom.py:130
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:198
+#: pyload/plugins/hoster/RapidshareCom.py:198
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:201
+#: pyload/plugins/hoster/RapidshareCom.py:201
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:203
+#: pyload/plugins/hoster/RapidshareCom.py:203
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:100
+#: pyload/plugins/hoster/FileserveCom.py:100
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:216
+#: pyload/plugins/hoster/FileserveCom.py:216
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:97
+#: pyload/plugins/hooks/UpdateManager.py:97
msgid "Not able to connect server to get updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:111
+#: pyload/plugins/hooks/UpdateManager.py:111
msgid "No pyLoad version available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:118
+#: pyload/plugins/hooks/UpdateManager.py:118
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:119
+#: pyload/plugins/hooks/UpdateManager.py:119
msgid "*** Get it here: https://github.com/pyload/pyload/releases ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:170
+#: pyload/plugins/hooks/UpdateManager.py:170
#, python-format
msgid "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:180
-#: module/plugins/hooks/UpdateManager.py:185
+#: pyload/plugins/hooks/UpdateManager.py:180
+#: pyload/plugins/hooks/UpdateManager.py:185
#, python-format
msgid "Error when updating plugin %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:185
+#: pyload/plugins/hooks/UpdateManager.py:185
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:196
+#: pyload/plugins/hooks/UpdateManager.py:196
#, python-format
msgid "Removed blacklisted plugin: [%(type)s] %(name)s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:204
+#: pyload/plugins/hooks/UpdateManager.py:204
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:206
+#: pyload/plugins/hooks/UpdateManager.py:206
msgid "*** Plugins have been updated, pyLoad will be restarted now ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:211
+#: pyload/plugins/hooks/UpdateManager.py:211
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:81
+#: pyload/plugins/hooks/HotFolder.py:81
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:94
+#: pyload/plugins/hooks/ExtractArchive.py:94
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:96
-#: module/plugins/hooks/ExtractArchive.py:101
+#: pyload/plugins/hooks/ExtractArchive.py:96
+#: pyload/plugins/hooks/ExtractArchive.py:101
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:106
+#: pyload/plugins/hooks/ExtractArchive.py:106
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:108
+#: pyload/plugins/hooks/ExtractArchive.py:108
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:120
+#: pyload/plugins/hooks/ExtractArchive.py:120
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:143
+#: pyload/plugins/hooks/ExtractArchive.py:143
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:184
+#: pyload/plugins/hooks/ExtractArchive.py:184
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:199
+#: pyload/plugins/hooks/ExtractArchive.py:199
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:206
+#: pyload/plugins/hooks/ExtractArchive.py:206
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:217
+#: pyload/plugins/hooks/ExtractArchive.py:217
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:238
+#: pyload/plugins/hooks/ExtractArchive.py:238
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:246
+#: pyload/plugins/hooks/ExtractArchive.py:246
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:253
+#: pyload/plugins/hooks/ExtractArchive.py:253
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:259
+#: pyload/plugins/hooks/ExtractArchive.py:259
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:261
+#: pyload/plugins/hooks/ExtractArchive.py:261
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:265
+#: pyload/plugins/hooks/ExtractArchive.py:265
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:317
+#: pyload/plugins/hooks/ExtractArchive.py:317
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:70
-#: module/plugins/hooks/Captcha9kw.py:60
-#: module/plugins/hooks/ExpertDecoders.py:51
+#: pyload/plugins/hooks/CaptchaTrader.py:70
+#: pyload/plugins/hooks/Captcha9kw.py:60
+#: pyload/plugins/hooks/ExpertDecoders.py:51
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:118
+#: pyload/plugins/hooks/CaptchaTrader.py:118
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:136
+#: pyload/plugins/hooks/CaptchaTrader.py:136
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:45
+#: pyload/plugins/hooks/LinkdecrypterCom.py:45
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:59
+#: pyload/plugins/hooks/LinkdecrypterCom.py:59
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:94
+#: pyload/plugins/hooks/Captcha9kw.py:94
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:130
+#: pyload/plugins/hooks/Captcha9kw.py:130
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:96
+#: pyload/plugins/hooks/ExpertDecoders.py:96
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:50
+#: pyload/plugins/hooks/PremiumizeMe.py:50
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:70
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:70
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid ""
"Pil and tesseract not installed and no Client connected for captcha "
"decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid ""
"No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or "
"rhino"
diff --git a/locale/cs/LC_MESSAGES/django.po b/locale/cs/LC_MESSAGES/django.po
index deaf35622..1136362de 100644
--- a/locale/cs/LC_MESSAGES/django.po
+++ b/locale/cs/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Nová captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Prosím přečtěte text captchy."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad restartován"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "vypnuto"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Úspěch"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "zapnuto"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Opravdu chcete ukončit pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Restartovat odkaz"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Smazat odkaz"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Prosím zadejte jméno balíčku."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Prosím, klikněte na správnou pozici captchy."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Nastala chyba."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Sloşka je prázdná"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Selhalo"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Ŝádné Captchy k přečtení."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Hesla se neshodují."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Nastavení uloşeno."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nová sloşka"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Opravdu chcete restartovat pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "cekam %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktivní Stahování"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Domů"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Stahování"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Logy"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Konfigurace"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Jméno"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Stav"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informace"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Velikost"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Postup"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Přihlásit se"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Uşivatelské jméno"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Heslo"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Vaše uşivatelské jméno a heslo se neshodují s údaji v databázi. Prosím zkuste to znovu."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Pro reset vaÅ¡ich přihlaÅ¡ovacích údajů nebo přidání uÅŸivatele spusÅ¥te:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Smazat dokončené"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Restartovat nezdařené"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "SloÅŸka:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Heslo:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Upravit Balíček"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Níşe upravte vlastnosti balíčku."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Jméno balíčku."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "SloÅŸka"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Jméno podsloşky pro toto stahování."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Seznam hesel pouşitÜch pro unrar."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Odeslat"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Byli jste úspěšně odhlášeni."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Cesta"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolutní"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativní"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "jméno"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "velikost"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "typ"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "naposledy upraveno"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "nadřazenÜ adresář"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "şádnÜ obsah"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Obecné"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Pluginy"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Účty"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Vyberte sekci z menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Doplněk"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "PlatnÜ do"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "ZbÜvá traffic"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Čas"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max Současně"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Smazat?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "platnÜ"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "neplatnÜ"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "ano"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "ne"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Přidat"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Přidat Účet"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Pro přístup k prémiovÜm funkcím vloÅŸte vaÅ¡e přístupová data."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Vaše uşivatelské jméno."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Heslo pro tento účet."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Typ"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Vyberte filehosting vašeho účtu."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "předchozí"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "další"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Konec"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Novinky"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Podpora"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Systém"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad verze:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "SloÅŸka instalace:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Sloşka nastavení:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Sloşka stahování:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Volné Místo:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Jazyk:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Port Vzdaleneho Rozhrani:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Nastavení"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "SouborovÜ Manaşer"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Přidat Balíček"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "VloÅŸte vaÅ¡e odkazy nebo uploadněte kontejner."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Jméno nového balíčku."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Odkazy"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Sem vloÅŸte vaÅ¡e odkazy nebo jakÜkoli text a stiskněte tlačítko filtrovat."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrovat URL"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Heslo pro archiv RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Soubor"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Upload kontejneru."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Cíl"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Čtení captchy"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "VloÅŸte text captchy."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Zavřít"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Webové rozhraní"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad Aktualizace k dispozici!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Pluginy aktualizovány, restartuj pyLoad!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha čeká"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Odhlásit"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrace"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Informace"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Přihlašte se prosím!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Zastavit"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Zrušit"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Stahování:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Rychlost:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktivní:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Obnovit stránku"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "načítám"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Nahoru"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Ukončit pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Restartovat pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Pro přidání uÅŸivatele nebo změnu hesla pouÅŸijte:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Důleşité: Admin má vşdy plná práva!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Změnit heslo"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Oprávnění"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "změnit"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Zadejte aktuální a poşadované heslo."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "UÅŸivatel"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Aktuální heslo"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nové heslo"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Nové heslo."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nové heslo (znovu)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Prosím zadej nové heslo znovu."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Pro zobrazeni teto stranky nemate opravneni."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Adresar pro stahovani nenalezen."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "neomezenÜ"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "neni k dispozici"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Pro setup spustte pyload.py -s."
diff --git a/locale/cs/LC_MESSAGES/pyLoad.po b/locale/cs/LC_MESSAGES/pyLoad.po
index 386dfb739..842f2fc6b 100644
--- a/locale/cs/LC_MESSAGES/pyLoad.po
+++ b/locale/cs/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Prijat Quit signal"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad je jiz spusten pod pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Zmena skupiny selhala: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Zmena uzivatele selhala: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "slozka pro logy"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Spoustim"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Nastaven domovsky adresar: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto pro dekodovani kontejnerovych souboru"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "slozka pro docasne soubory"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "slozka pro stahovani"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL pro zabezpecene pripojeni"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Presunuji stara nastaveni uzivatele do DB."
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Prosim zkontrolujte sve prihlasovaci udaje pres ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Všechny odkazy odstraněny"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Cas stahovani: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Volne misto: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Aktivuji Ucty..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Aktivuji Pluginy..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad je spusten"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "restartuji pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad se ukonci"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Instalujte %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "nelze najit %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "nelze vytvorit %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "vypinani..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "chyba pri vypinani"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad zastaven z terminalu"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Databaze souboru byla smazana pro nekompatibilni verzi."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Databáze nemůşe bÜt převedena"
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Databaze byla konvertovana z v2 na v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Databaze byla konvertovana z v3 na v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Konvertuji starou databazi Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "hotovo"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "ve fronte"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "preskoceno"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "ceka"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "doc. nedostupne"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "spoustim"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "selhalo"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "zruseno"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "dekoduji"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "vlastni"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "stahuji"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "zpracovavam"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "neznamy"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Balicek dokoncen: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Pouzivam SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Vzdalena chyba systemu: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Zahajuji %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Spousteni backendu %(name)s selhalo | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "cekam %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certifikaty SSL nenalezeny."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Omlouvame se, ale spousteni %s v ramci pyLoad jiz neni podporovano"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Je mozne pouzit server podporujici vlakna, ktery nabizi dobry vykon a ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "a samozrejme je take mozne pouzit vas jiz existujici %s se serverem fastcgi pyLoadu"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "vzorove konfiguracni soubory jsou umisteny v adresari module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "vzorove konfiguracni soubory jsou umisteny v adresari pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Nelze pouzit %(server)s, python-flup neni nainstalovan!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Chyba pri importu lightweight serveru: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Musíte si stáhnout a zkompilovat bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Zkopirujte soubor boern.so do adresare module/lib nebo pouzijte setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Zkopirujte soubor boern.so do adresare pyload/lib nebo pouzijte setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Samozrejme budete potrebovat znalost linuxu a kompilace software"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Server nyni pracuje s vlakny i pres zname obtize s vykonem na Windows"
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Tento server nenabizi SSL, zvazte pouziti rezimu s vlakny"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Spoustim vestaveny Webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Spoustim SSL webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Spoustim webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Spoustim fastcgi server: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Startuji lightweight server (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Pro zobrazeni teto stranky nemate opravneni."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Adresar pro stahovani nenalezen."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "neomezenÜ"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "neni k dispozici"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Pro setup spustte pyload.py -s."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Stahování částí selhalo, přecházím na jediné připojení | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Zahajuji stahovani: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Stahovani dokonceno: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "V pluginu %s chybi funkce."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Stahovani zruseno: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Stahovani obnoveno: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Zdroj stahovani je offline: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Zdroj stahovani je docasne nedostupny: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Stahovani selhalo: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "K hostiteli se nelze pripojit, nebo bylo pripojeni resetovano, cekam 1 minutu do dalsiho pokusu."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Stahovani preskoceno: %(name)s v dusledku %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Zacina dekodovani: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Dekodovani selhalo: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Zkousim znovu %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Ziskavani informaci pro %(name)s selhalo | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Chyba pri provadeni zaveseni: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Aktivace %(name)s selhala"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Aktivovane pluginy: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Deaktivovat pluginy: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Reconnect selhal: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Skript pro reconnect nenalezen!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Spoustim reconnect"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Provadeni skriptu pro Reconnect selhalo!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Reconnectnuto, nova IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Není dostatek místa na zařízení"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Nezdařílo se přihlášení k účtu %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Špatné heslo"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Vas cas %s ma nespravny format, pouzijte 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Účet %s nemá nedostatek trafficu, další kontrola za 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Účet %s vypršel, další kontrola za 1h"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Dosaşen limit pro stahování"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s ma neplatny vzor."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Chyba pri importu %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Nenačten şádnÜ plugin Hoster"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Aktivovat přímé stahování na vašem Bitshare accountu"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList nemohl byt vyprazdnen."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Pro novy format konfiguracniho souboru bylo nastaveni uctu smazano."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Je vyşadována autorizace (username:password)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Prosím vloşte svůj %s účet nebo tento plugin deaktivujte"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Ve staÅŸeném souboru (%s) byl nalezen HTML kód... Chyba přesměrování? Stahování bude restartováno."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Soubor není dočasně k dispozici"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: čekání mezi stahováním %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: čekám na captchu %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "StaşenÜ soubor byl prázdnÜ"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "NeplatnÜ API klíč"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: NezbÜvá dostatečnÜ traffic"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Překročen Traffic"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "RapidShare: Traffic Share (přímé staÅŸení)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Z této ip adresy jiş stahování probíhá, čekám 60 sekund"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "ŠpatnÜ autentizační kód, stahování bude restartováno"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Ŝádné volné sloty"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Pro tento soubor potřebujete prémiovÜ účet"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Ohlášeno neplatné jméno souboru"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Chyba souběşného stahování, čekám 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Nejste přihlášeni."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Dešifrování selhalo"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "URL neobsahuje klíč souboru"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Kód chyby:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Soubor neexistuje."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Pluginy byly aktualizovány, prosím restartujte pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Pluginy aktualizovány a znovu načteny"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Ŝádné aktualizace rozšíření"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Ŝádné aktualizace pro pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Je dostupná nové verze pyLoad (%s) ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Získejte ji zde: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Nelze se připojit k update serveru"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nová verze %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Chyba při aktualizaci %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Nesprávná verze"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Stahování dokončeno: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "NovÜ poşadavek na Captchu: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Odpovězte \"c %s text z captchy\""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Nejdříve prosím přidejte váš premium.to účet a restartujte pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Přidán %s ze sledované sloÅŸky"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s není nainstalován"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Nelze aktivovat %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Aktivní"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Nejsou aktivovány şádné rozbalovací pluginy"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Balíček %s zařazen do fronty pro pozdější rozbalení"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Kontrola balíčku %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Rozbalit do %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Nenalezeny şádné soubory k rozbalení"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "rozbaluji"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Chráněno heslem"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Chybné heslo"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Maşu %s souborů"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Rozbalení dokončeno"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Chyba archivu"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC nesouhlasí"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Neznámá chyba"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Nastavení Uşivatele a Skupiny selhalo"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Port 9666 se jiş pouşívá"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s kreditů zbÜvá"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Nelze odeslat odpověď."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Na vašem CaptchaTrader účtu není dostatek kreditu"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Seznam pluginů Crypter nenalezen"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Seznam pluginů Crypter je prázdnÜ"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Stahování dokončeno: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nové CaptchaID z uploadu: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Na vašem captcha účtu 9kw.eu není dostatek kreditu"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Nainstalované skripty pro %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Skript není spustitelnÜ:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Chyba v %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Na vašm ExpertDecoders účtu není dostatek kreditu"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Nejdříve prosím přidejte váš rehost.to účet a restartujte pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Nejdříve prosím přidejte váš premiumize.me účet a restartujte pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "ZbÜvá %d kreditů"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil a tesseract nejsou nainstalovány a není připojen şádnÜ klient pro rozpoznávání Captchy"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Zadny plugin nedodal vysledek Captchy v prijatelnem case."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Nastavení uÅŸivatele a skupiny se nezdařilo: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Neni pripojen zadny klient pro dekodovani Captchy"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Pridan balicek %(name)s obsahujici %(count)d odkazu"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Do balicku #%(package)d pridano %(count)d odkazu "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Nenalezen zadny js engine, prosim naistalujte Spidermonkey, ossp-js, pyv8 nebo rhino"
diff --git a/locale/cs/LC_MESSAGES/pyLoadCli.po b/locale/cs/LC_MESSAGES/pyLoadCli.po
index 02483efb5..bd97917d6 100644
--- a/locale/cs/LC_MESSAGES/pyLoadCli.po
+++ b/locale/cs/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Příkazová řádka"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Stahování:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Rychlost: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Velikost: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Dokončeno za: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "čeká: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Stav:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "pozastaveno"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "probíhá"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "celková rychlost"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Souborů ve frontě"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Celkem"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Přidat Odkazy"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Správa fronty"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Správa Sběrače"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Pozastavit/Spustit server"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Ukončit server"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Konec"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Prosím pouşijte tuto syntaxi: add <Jmeno balicku> <odkaz> <odkaz2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Kontroluji %d odkazů:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Soubor neexistuje."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad byl ukončen"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Vypíše stav serveru"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Vypíše stahování ve frontě"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Vypíše stahování ve sběrači"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Přidá balíček do fronty"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Přidá balíček do sběrače"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Smazat soubory z fronty/sběrače"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Smazat balíčky z fronty/sběrače"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Přesun balíčku z fronty do sběrače nebo naopak"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Restart souborů"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Restart balíčků"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Zkontrolovat stav online - funguje s místním zásobníkem"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Zkontroluje online stav souboru ze zásobníku"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pozastavit server"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "pokracovat ve stahovani"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Prepnout pozastaveni/beh"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "ukoncit server"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Seznam prikazu:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Nemohu zapsat nastavení uşivatele"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Pro pripojeni k tomuto jadru pyLoad je vyzadovano py-openssl."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adresa: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Uzivatelske jmeno: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Heslo: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Prihlasovaci udaje jsou chybne."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Nelze vytvorit pripojeni k %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "K pripojeni na toto pyLoad jadro potrebujete py-openssl."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Byly zadany prikazy, interaktivni mod je ignorovan."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Přidat Balíček:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Zadej název nového balíčku"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Balíček: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analyzuje odkazy které chcete přidat."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Pokud jste hotovi, napište %s"
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Přidáno odkazů: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " zpět do hlavního menu"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Správa balíčků:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr " Spravovat Odkazy:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Co chcete přesunout?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Co chcete smazat?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Co chcete restartovat?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Vyberte si, co chcete dělat, nebo zadejte číslo balíčku."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "smazat"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "přesunout"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "restartovat"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - předchozí"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - další"
diff --git a/locale/cs/LC_MESSAGES/setup.po b/locale/cs/LC_MESSAGES/setup.po
index 25c99bd7a..f5b2ae040 100644
--- a/locale/cs/LC_MESSAGES/setup.po
+++ b/locale/cs/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "a"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Vitejte v konfiguracnim pruvodci programu pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Zkontroluje vas system a provede zakladni nastaveni pro spusteni programu pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Hodnota v zavorkach [] je vzdy vychozi,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "v pripade, ze ji nechcete zmenit nebo si nejste jisti co vybrat, jen stisknete enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Nezapomente: Tohoto pruvodce muzete kdykoli sputit znovu pouzitim parametru --setup nebo -s pri startu pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Pokud mate s pruvodcem jakekoli problemy, stisknete CTRL-C"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "pro zruseni a zamezeni jeho automatickeho spusteni pri dalsim startu pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Az budete pripraveni na kontrolu systemu, stisknete enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Pro beh pyLoad je potreba pycurl a python verze 2.5, 2.6 nebo 2.7."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Prosim odstrante problem a znovu spustte pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Setup bude nyni ukoncen."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Kontrola systemu ukoncena, stisknete enter pro zobrazeni zpravy o stavu."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Stav ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "dekodovani kontejneru"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "pripojeni ssl"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "automaticke rozpoznavani captchy"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Webové rozhraní"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "rozsirene Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Dostupne funkce:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Chybejici funkce: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto nedostupne"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Toto potrebujede k dekodovani souboru kontejneru."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL nedostupne"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Je potreba k vytvoreni zabezpeceneho pripojeni k jadru nebo webovemu rozhrani."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Pokud budete pyLoad pouzivat pouze lokalne, ssl neni nutne."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "rozpoznavani Caprtchy nedostupne"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Je potreba jen pro nektere filehostingy pro neplaceny pristup."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Gui nedostupne"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Graficke Uzivatelske Rozhrani"
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "nenalezeno zadne jadro JavaScriptu"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Toto budete potrebovat pro nektere Click'N'Load linky. Naistalujte Spidermonkey, ossp-js, pyv8 nebo rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Pokud chcete, muzete nyni zrusit instalaci a opravit nektere zavislosti."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Pokracovat v instalaci?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Chcete zmenit cestu k nastaveni? Stavajici je %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Pokud pouzivate pyLoad na serveru, nebo je domovsky oddil na vnitrni flash, muze byt dobre ji zmenit."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Zmenit cestu k nastaveni?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Chcete nastavit prihlasovaci udaje a zakladni volby?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Doporuceno pri prvnim spusteni."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Vytvorit zakladni nastaveni?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Prejete si nastavit ssl?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Nastavit ssl?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Prejete si nastavit webove rozhrani?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Nastavit webove rozhrani?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Nastaveni uspesne dokonceno."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Stiknete enter pro ukonceni a restartujte pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Kontrola Systemu ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Vase verze pythonu je prilis nova, prosim pouzijte verzi 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Vase verze pythonu je prilis stara, prosim pouzijte alespon Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Verze Pythonu: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Vase nainstalovana verze %s jinja2 je prilis stara."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Muzete bezpecne pokracovat, nicmene pokud bude webove rozhani nefunkcni,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "bude treba ji upgradovat nebo odistalovat, pyLoad jiz obsahuje knihovnu jinja2."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "jadro JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Zakladni nastaveni ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Nasledujici prihlasovaci udaje jsou platne pro CLI, GUI a webove rozhrani."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Uşivatelské jméno"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Externí klientské aplikace (např. GUI a CLI) vyÅŸadují vzdálenÜ přístup pro fungovaní přes síť."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Pokud vÅ¡ak chcete pouşívat pouze webové rozhraní, můşete jej zakázat a uÅ¡etřit tak paměť."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Povolit vzdálenÜ přístup"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Jazyk"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Slozka pro stahovani"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Max soubeznych stahovani"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Pouzivat Reconnect?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Umisteni skriptu pro Reconnect"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Nastaveni Weboveho rozhrani ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Aktivovat webove rozhrani?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adresa pro naslouchani, pokud pouzijete 127.0.0.1 nebo localhost, bude webove rozhrani pristupne pouze lokalne."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adresa"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad nabizi mnoho vezri administrace, nize kratke vysvetleni."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Vychozi server, nejlepsi volba, pokud nevite, ktery vybrat."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Tento server nabizi SSl a je dobrou alternativou k vestavenemu."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Muze byt pouzit apachem, lighttpd, vyzaduje vsak nastaveni, ktere nemusi byt snadne."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Velmi svizna alternativa napsana v C, vyzaduje znalost linuxu a libev."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Stahnete jej zde: https://github.com/jonashaag/bjoern a zkompilujte"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "a zkopirujte bjoern.so do adresare module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "a zkopirujte bjoern.so do adresare pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Pozor: V nekterych zvlastnich pripadech neni vestaveny server funkcni. Pokud mate problemy s webovym rozhranim,"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "vratte se sem a zmente vestaveny server za server s vlakny."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Server"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Nastaveni SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Pro vytvoreni ssl certifikatu spustte tyto prikazy v konfiguracni slozce pyLoad:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Pokud jste skoncili a vse probehlo v poradku, muzete aktivovat SSL."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Aktivovat SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Zvolte akci"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Vytvorit/Upravit uzivatele"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Seznam uzivatelu"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Odstranit uzivatele"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Konec"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Uzivatele"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Nastavuji novou cestu ke konfiguracnim souborum, stavajici konfigurace nebude prenesena!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Cesta ke konfiguracnim souborum"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Cesta ke konfiguracnim souborum byla zmenena, instalace se nyni ukonci, pro pokracovani ji prosim restartujte."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Stisknete enter pro ukonceni."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Nastaveni cesty ke konfiguracnim souborum selhalo: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: chybi"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Heslo: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Heslo je příliÅ¡ krátké. PouÅŸijte nejméně 4 znaky."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Heslo (znovu): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Hesla se neshodují."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "ano"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "pravda"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "p"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "ne"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "nepravda"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "n"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Neplatne zadani"
diff --git a/locale/da/LC_MESSAGES/django.po b/locale/da/LC_MESSAGES/django.po
index 786082c8e..b131d9408 100644
--- a/locale/da/LC_MESSAGES/django.po
+++ b/locale/da/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Ny Captcha anmodning"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "LÊs venligst teksten i captcha"
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad genstartet"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Succes"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Er du virkelig sikker på du vil lukke pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Genstart Link"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Slet link"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Indtast venligst et pakkenavn"
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Tryk venligst på den hÞjre captcha"
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Fejl opstod"
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Mappen er tom"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Ingen Captcha at lÊse"
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Adgangskoden stemte ikke overens"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Indstillinger gemt."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Ny mappe"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Er du sikker på du vil genstarte pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktive hentninger"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Hjem"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Logfiler"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Konfiguration"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Fremskridt"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Dit brugernavn og adgangskode stemte ikke overens. PrÞv venligst igen."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "For at nulstille dine logind data eller tilfÞje en bruger kÞr:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Slet afsluttede"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Genstart mislykkedes"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Mappe:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Adgangskode:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Redigér pakke"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Redigér pakke detaljerne nedenfor."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Pakkens navn."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Navnet på disse nedhentnigers undermappe."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Liste over adgangskoder brugt til unrar."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Nulstil"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Du er logget ud med succes."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Sti"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolut"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativ"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "navn"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "stÞrrelse"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "indtast"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "sidst Êndret"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "forrige mappe"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "intet indhold"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "VÊlg en sektion fra menuen"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Gyldig indtil"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Trafik tilbage"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tid"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Maks paralelle"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Slet?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "ikke gyldig"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "ja"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nej"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Indtast dine konto data for at benytte premium egenskaber."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Dit brugernavn."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Adgangskoden til denne konto."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "VÊlg udbyderen for din konto"
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "forrige"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "nÊste"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Slut"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Nyheder"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Installations mappe:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Konfigurations mappe:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Download mappe:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Fri plads:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Sprog:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Webinterface port:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Fjerninterface port:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "FilManager"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "TilfÞj pakke:"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "IndsÊt dine links eller overfÞr en beholder."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Navnet på den nye pakke"
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "IndsÊt dine links eller hvilkensomhelst tekst her og tryk filtrer knappen."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrér urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Adgangskode for RAR-arkiv"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Fil"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "OverfÞr en beholder."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha lÊser"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha'en"
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Tekst"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "IndsÊt teksten i captcha'en"
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Webbrugerflade"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "TilgÊngelig pyLoad opdatering!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins blev opdateret, genstart venligst!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha venter"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Log af"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrér"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "info"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Log venligst ind!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Genstart:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Hastighed:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktiv:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Genhent side"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "indlÊser"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Tilbage til toppen"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Luk pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Genstart pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "For at tilfÞje bruger eller Êndre adgangskode brug:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Vigtigt: Admin brugere har altid alle rettigheder"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Skift adgangskode"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Rettigheder"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "skift"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Indtast din nuvÊrende og Þnskede adgangskode "
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Bruger"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "NuvÊrende adgangskode"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Ny adgangskode"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Den nye adgangskode."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Ny adgangskode (gentag)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Gentag venligst den nye adgangskode."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "ikke tilgÊngelig"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/da/LC_MESSAGES/pyLoad.po b/locale/da/LC_MESSAGES/pyLoad.po
index 84f0e21a3..8b0ccab04 100644
--- a/locale/da/LC_MESSAGES/pyLoad.po
+++ b/locale/da/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Starter"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "mappe til midlertidige filer"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL til sikker forbindelse"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Fri plads: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Aktiverer konti..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "genstarter pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad afslutter"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installér %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "lukker ned..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "fejl ved nedlukning"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "drÊbte pyLoad fra terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "Starter"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "ikke tilgÊngelig"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/da/LC_MESSAGES/pyLoadCli.po b/locale/da/LC_MESSAGES/pyLoadCli.po
index 303155034..c87fd85ab 100644
--- a/locale/da/LC_MESSAGES/pyLoadCli.po
+++ b/locale/da/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Hentes:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "Hastighed:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "StÞrrelse:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "FÊrdig om:"
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "Venter:"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "TilfÞj Links"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "Genoptag/Pause Server"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "Afslut Server"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "Afslut"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Brug venligst denne syntaks: add <Pakkens Navn> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad var afslutte"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Udskriver server status"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Flyt pakker fra kÞ til samler og opmvendt"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Genstart filer"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Genstart pakker"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pause serveren"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "FortsÊt hentning"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Pause/Genoptag"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "Afslut server"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Kommando liste"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Kunne ikke skrive til bruger config filen"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Du mangler py-openssl for at tilslutte til denne pyLoad Kerne"
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adresse:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Brugernavn:"
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Kode:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Login oplysninger er forkerte"
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Can ikke etablere forbindelse til %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Du mangler py-openssl for at tilslutte til denne pyLoad Kerne"
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Interaktiv tilstand ignoreres da du gik nogle kommandoer."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "IndsÊt de links du Þnsker at tilfÞje"
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Skriv %s når du er fÊrdig."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Links tilfÞjet:"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "tilbage til hovedmenu"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Håndtér pakker:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Håndtér Links:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Hvad vil du flytte?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Hvad vil du slette?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Hvad vil du genstarte?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "slet"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "flyt"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "genstart"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr "- forrige "
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "- nÊste"
diff --git a/locale/da/LC_MESSAGES/setup.po b/locale/da/LC_MESSAGES/setup.po
index 8ae55af99..a14bdf05f 100644
--- a/locale/da/LC_MESSAGES/setup.po
+++ b/locale/da/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Webbrugerflade"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Kode:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Adgangskoden stemte ikke overens"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "ja"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nej"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index cdcf10c1d..f40ad98a7 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Neue CAPTCHA-Anfrage"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Bitte lies den Text auf dem Captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad wurde neu gestartet"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "aus"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Erfolgreich"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "ein"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Bist du sicher, dass du pyLoad beenden möchtest?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Link neu starten"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Link löschen"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Bitte gib einen Paketnamen ein."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Bitte klicke auf die richtige Position im Captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Ein Fehler ist aufgetreten."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Ordner ist leer"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Fehlgeschlagen"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Keine CAPTCHA's verfÃŒgbar."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Passwörter stimmen nicht Ìberein."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Einstellungen gespeichert"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Neuer Ordner"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Sicher, dass du pyLoad neustarten willst?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "Warte %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktiv"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Start"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "Warteschlange"
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "Linksammler"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Downloads"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Log"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Einstellungen"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Name"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Status"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informationen"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Größe"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Fortschritt"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Anmeldung"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Benutzername"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Passwort"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Dein Benutzername und/oder Passwort sind falsch. Bitte versuche es noch einmal."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Um deine Login-Informationen zu resetten oder un einen Benutzer hinzuzufÃŒgen, starte:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Fertige löschen"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Fehlgeschlagene neustarten"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Ordner:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Passwort:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Paket bearbeiten"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Bearbeiten Sie hier die Paketdetails."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Name des Pakets."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Verzeichnis"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Name des Unterordners fÃŒr diese Downloads."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Liste der Passwörter, welche fÌr das Entpacken genutzt werden."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Übernehmen"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Abbrechen"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Du wurdest erfolgreich abgemeldet."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Pfad"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolut"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativ"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "Name"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "Größe"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "Typ"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "zuletzt verÀndert"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "ÃŒbergeordnetes Verzeichnis"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "kein Inhalt"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Allgemein"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Zusatzprogramme"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Konten"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "WÀhle einen Abschnitt aus dem MenÌ."
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Erweiterung"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "Premium"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "GÃŒltig bis:"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Verbleibender Traffic:"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Zeit:"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max Parallel"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Löschen?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "gÃŒltig"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "ungÃŒltig"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "ja"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nein"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "HinzufÃŒgen"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Konto hinzufÃŒgen"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Gib deine Benutzerdaten ein, um die Premiumfunktionen zu nutzen."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Dein Benutzername."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Das Password fÃŒr diesen Account."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Typ"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "WÀhle den Hoster fÌr dein Benutzerkonto."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Starten"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "zurÃŒck"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "weiter"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Ende"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Neuigkeiten"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Support"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "System"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr "Python:"
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "Betriebssystem:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad Version:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Installationsordner:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Konfigurationsordner:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Downloadordner:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Freier Speicherplatz:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Sprache:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Webinterface Port:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Remoteinterface Port:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Konfiguration"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Dateimanager"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Paket hinzufÃŒgen"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Links einfÃŒgen oder Container hochladen."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Name des neuen Pakets."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Links"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "FÃŒge deine Links oder einen Text hier ein und drÃŒck den 'Filter' Knopf"
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Links filtern"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Passwörter fÌr RAR-Dateien"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Datei"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Container hochladen."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Ziel"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captchas lesen"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "Captcha"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Das Captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Text"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Gib den Text aus dem Captcha ein."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Schließen"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "WeboberflÀche"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad Update verfÃŒgbar!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins aktualisiert, bitte pyLoad neustarten!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captchas verfÃŒgbar"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Abmelden"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrieren"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Info"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Bitte anmelden!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Stoppen"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Abbrechen"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Download:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Erneut verbinden:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Geschwindigkeit:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktiv:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Aktualisieren"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "lade"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Nach oben"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "pyLoad beenden"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "pyLoad neustarten"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Um Benutzer hinzuzufÌgen oder Passwörter zu Àndern benutze:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Wichtig: Admin User haben immer alle Berechtigungen!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Passwort Àndern"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Admin"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Berechtigungen"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "Àndern"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Gib dein momentanes und dein neues Passwort ein."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Benutzer"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Momentanes Passwort"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Neues Passwort"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Das neue Passwort."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Neues Passwort (wiederholen)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Bitte wiederhole das neue Passwort."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Sie haben nicht die Berechtigung diese Seite zu besuchen."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Downloadverzeichnis nicht gefunden."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "unbegrenzt"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "nicht verfÃŒgbar"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Starte pyload.py -s um auf dieses Setup zuzugreifen."
diff --git a/locale/de/LC_MESSAGES/pyLoad.po b/locale/de/LC_MESSAGES/pyLoad.po
index 1b402845a..61c5eaa15 100644
--- a/locale/de/LC_MESSAGES/pyLoad.po
+++ b/locale/de/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Signal zum Beenden erhalten"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad ist bereits gestartet mit der pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Fehler beim Ändern der Gruppe: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Fehler beim Ändern des Benutzers: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "Ordner fÃŒr Logs"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "starte"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Benutze Home-Verzeichnis: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pyCrypto um Containerdateien zu öffnen"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "Ordner fÌr temporÀre Dateien"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "Downloadordner"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL fÃŒr eine sichere Verbindung"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Migriere alte Benutzereinstellungen in die Datenbank..."
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Bitte ÃŒberprÃŒfe deine Login-Informationen mit './pyload.py -u'"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Alle Links entfernt"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Downloadzeit: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Freier Speicher: %sGB"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Aktiviere Konten..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Aktiviere Plugins..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad ist gestartet und lÀuft"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "starte pyLoad neu"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad wird beendet"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installiere %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "konnte %(desc)s nicht finden: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "konnte %(desc)s nicht erstellen: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "Beenden..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "Fehler beim Beenden"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad vom Terminal beendet"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Link Datenbank wurde aufgrund inkompatibler Version gelöscht."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Link Datenbank konnte nicht konvertiert werden."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Datenbank wurde von v2 nach v3 konvertiert."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Datenbank wurde von v3 nach v4 konvertiert."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Konvertiere alte Django DB"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "Fertig"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "Offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "Online"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "eingereiht"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "ÃŒbersprungen"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "wartend"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "kurzzeitig offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "starte"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "fehlgeschlagen"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "abgebrochen"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "entschlÃŒsseln"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "benutzerdefiniert"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "downloade"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "verarbeite"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "unbekannt"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paket fertiggestellt: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Nutze SSL Thrift Backend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Fehler beim Fernzugriff: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Starte %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Konnte Backend %(name)s nicht laden | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "Warte %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL Zertifikat nicht gefunden."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Entschuldigung! Wir haben den Support fÃŒr das Starten von %s direkt in pyLoad eingestellt"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Du kannst den multithreaded-server benutzen, welcher eine gute Performance, SSL und"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "natÃŒrlich kannst du weiterhin deine existierende %s mit pyLoads fastcgi server benutzen"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "Beispiel-Konfigurationsdateien befinden sich in dem Verzeichnis 'module/webui/servers'"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "Beispiel-Konfigurationsdateien befinden sich in dem Verzeichnis 'pyload/webui/servers'"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Kann %(server)s nicht benutzen, weil python-flup nicht installiert ist!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Fehler beim Laden vom lightweight Server: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Du musst 'bjoern' herunterladen und kompilieren, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Kopiere 'boern.so' in 'module/lib' oder benutze 'setup.py install'"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Kopiere 'boern.so' in 'pyload/lib' oder benutze 'setup.py install'"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "NatÃŒrlich musst musst etwas Ahnung von Linux haben und wie man Software kompiliert"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Der 'threaded' Server wird wegen Performance Problemen unter Windows benutzt."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "SSL funktioniert mit diesem Server nicht, benutze bitte alternativ den 'threaded' Server"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Starte den eingebauten Webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Starte den threaded SSL Webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Starte den threaded Webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Starte fastcgi Webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Starte bjoern Webserver: %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Sie haben nicht die Berechtigung diese Seite zu besuchen."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Downloadverzeichnis nicht gefunden."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "unbegrenzt"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "nicht verfÃŒgbar"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Starte pyload.py -s um auf dieses Setup zuzugreifen."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Eine Download Verbindung ist fehlggeschlagen, Falle zurÃŒck auf eine Verbindung | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Starte Download: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Download fertiggestellt: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Dem Plugin %s fehlt eine Funktion."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Download abgebrochen: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Download erneut gestartet: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Download ist nicht verfÃŒgbar: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Download ist vorÃŒbergehend nicht verfÃŒgbar: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Download fehlgeschlagen: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Verbindungsaufbau zum Host fehlgeschlagen oder die Verbindung wurde zurÃŒckgesetzt. Erneuter Versuch in 1 Minute..."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Download %(name)s wegen %(plugin)s ÃŒbersprungen"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Decrypting startet: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Decrypting fehlgeschlagen: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Wiederhole %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Holen von Informationen fÃŒr %(name)s fehlgeschlagen | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Fehler beim ausfÃŒhren des Hook: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Konnte %(name)s nicht aktivieren"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Aktivierte Plugins: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Deaktivierte Plugins: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "erneute Verbindung fehlgeschlagen: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Skript fÃŒr erneute Verbindung nicht gefunden!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "versuche erneute Verbindung"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Fehler beim AusfÃŒhren des Skriptes fÃŒr die erneute Verbindung!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Verbindung erneut aufgebaut, IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Auf dem GerÀt ist nicht mehr genÌgend Speicherplatz vorhanden"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Fehler beim Anmelden mit Konto %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Falsches Passwort"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Ihre Zeit %s hat ein falsches Format, nutzen Sie dieses: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Konto %s hat nicht genÃŒgend Traffic, erneuter Versuch in 30 min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Konto %s ist abgelaufen, erneuter Versuch in 1Std"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Downloadlimit erreicht"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s hat ein ungÃŒltiges Muster."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Fehler beim Importieren von %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Kein Hoster geladen"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Aktiviere direkten Download in deinem Bitshare Account"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "links.txt konnte nicht geleert werden."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Account-Einstellungen aufgrund neuem Konfigurationsformat gelöscht."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Authorisierung erforderlich (Benutzername:Passwort)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Bitte gib deine %s Kontodaten ein oder deaktiviere dieses Plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Es gab HTML-Code in der heruntergeladen Datei (%s)... Umleitungsfehler? Der Download wird neu gestartet."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Datei zur Zeit nicht verfÃŒgbar"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: warte zwischen den Downloads %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: Warte auf Captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Die heruntergeladene Datei ist leer"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API SchlÃŒssel ungÃŒltig"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Nicht genÃŒgend Traffic ÃŒbrig"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Traffic ÃŒberschritten"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Traffic Share (direkter Download)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Von dieser IP Adresse wird bereits heruntergeladen, warte 60 Sekunden"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "UngÃŒltiger Authorization-Code, Download wird neugestartet"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Keine freien Slots"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Du benötigst ein Premium-Konto fÌr diese Datei"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Dateiname als ungÃŒltig gemeldet"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Parallel-Download Fehler, warte 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Nicht eingeloggt."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "EntschlÃŒsselung fehlgeschlagen"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "FÃŒr die Datei wurde kein SchlÃŒssel in der URL ÃŒbertragen"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Fehler Code:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Datei existiert nicht."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Plugins wurden aktualisiert, bitte starte pyLoad neu ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins aktualisiert und neu geladen"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Keine Plugin-Updates verfÃŒgbar"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Keine Updates fÃŒr pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Neue pyLoad Version %s verfÃŒgbar ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Download hier: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Konnte keine Verbindung zum Server herstellen, um auf Updates zu prÃŒfen"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Neue Version von %(type)s | %(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Fehler beim Aktualisieren von %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Versionskonflikt"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Download fertig: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Neue Captcha Anfrage: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Beantworte Captcha mit \"c %s Text\""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Bitte fÃŒge erst dein premium.to Konto hinzu und starte pyLoad neu"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "%s aus HotFolder hinzugefÃŒgt"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "Kein %s installiert"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Konnte %s nicht aktivieren"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Aktiviert"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Keine Entpacken-Plugins aktiviert"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Paket %s eingereiht fÌr spÀteres entpacken"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "ÜberprÃŒfe Paket %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Entpacke nach %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Keine Dateien zum entpacken gefunden"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "entpacke"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "PasswortgeschÃŒtzt"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Falsches Passwort"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Lösche %s Dateien"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Entpacken abgeschlossen"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Archiv-Fehler"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC Fehler"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Unbekannter Fehler"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Setzen von Benutzer und Gruppe fehlgeschlagen"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Port 9666 wird bereits verwendet"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s Credits verbleibend"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Konnte keine Antwort senden."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Dein CaptchaTrader Konto hat nicht genÃŒgend Credits"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Liste von Cryptern nicht gefunden"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Liste von Cryptern ist leer"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Download abgeschlossen: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Neue CaptchaID von Upload: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Dein Captcha 9kw.eu Account hat nicht genÃŒgend Credits"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Installierte Skripte fÃŒr %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script nicht ausfÃŒhrbar:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Fehler in %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Dein ExpertDecoders Account hat nicht genÃŒgend Credits"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Bitte fÃŒgen Sie zuerst Ihr rehost.to Konto hinzu und starten Sie pyLoad danach neu"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Bitte fÃŒge erst ein gÃŒltiges premiumize.me Konto hinzu und starte pyLoad neu."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d Credits verbleibend"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil und Tesseract sind nicht installiert und kein Client ist verbunden fÃŒr Captcha-Entzifferung"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Es konnte in angemessener zeit kein Captcha-Ergebnis durch dies Plugins ermittelt werden."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Benutzer und Gruppe setzen fehlgeschlagen: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Kein Client verbunden zum eingeben des Captchas"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Paket %(name)s mit %(count)d Links hinzugefÃŒgt"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "%(count)d Links wurden zum Paket #%(package)d hinzugefÃŒgt "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Keine JS Engine erkannt. Bitte installiere entweder Spidermonkey, ossp-js, pyv8 oder rhino"
diff --git a/locale/de/LC_MESSAGES/pyLoadCli.po b/locale/de/LC_MESSAGES/pyLoadCli.po
index 86b59213c..2e4bd9056 100644
--- a/locale/de/LC_MESSAGES/pyLoadCli.po
+++ b/locale/de/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Kommandozeile"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Downloads:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Geschwindigkeit: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Größe: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Fertig in: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "wartend: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Status:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "pausiert"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "lÀuft"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Gesamtgeschwindigkeit"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Dateien in Warteschlange"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Gesamt"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "MenÌ:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Links hinzufÃŒgen"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Warteschlange verwalten"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Linksammler anpassen"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Server fortsetzen/pausieren"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Server beenden"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Beenden"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Bitte benutze folgende Syntax: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "ÜberprÃŒfe %d Links:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Datei existiert nicht."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad wurde beendet"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Zeigt den Server-Status"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Zeigt die Warteschlange"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Zeigt den Linksammler"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "FÃŒgt Paket der Warteschlange hinzu"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "FÃŒgt Paket zum Linksammler hinzu"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Löscht Dateien aus der Warteschlange/Linksammler"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Löscht Pakete aus der Warteschlange/Linksammler"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Verschiebt Pakete aus der Warteschlange in den Linksammler oder umgekehrt"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Dateien neustarten"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Pakete neustarten"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "ÜberprÃŒfe Onlinestatus, funktioniert mit lokalen Containern"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Onlinestatus eines Containers prÃŒfen"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "pausiert den Server"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "Downloads fortsetzen"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Pause/Fortsetzen"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "Server beenden"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Liste aller Befehle:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Konnte Benutzer-Konfigurationsdatei nicht schreiben"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Du benötigst py-openssl um dich zu diesem pyLoad Server verbinden zu können."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adresse: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Benutzername: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Passwort: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Logindaten sind falsch."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Konnte keine Verbindung zu %(addr)s:%(port)s aufbauen."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Du benötigst py-openssl um dich zu diesem pyLoad Server verbinden zu können."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Befehle im interaktiven Modus werden ignoriert, wenn zusÀtzliche Befehle Ìbergeben wurden."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Paket hinzufÃŒgen:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Gib einen Namen fÃŒr das neue Paket ein"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paket: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Kopiere die Links, die du hinzufÃŒgen willst."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "DrÃŒcke %s wenn du fertig bist."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "HinzugefÃŒgte Links: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " ZurÌck zum MenÌ"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Pakete verwalten:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Links verwalten:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Was möchtest du verschieben?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Was möchtest du löschen?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Was möchtest du neustarten?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "WÀhle, was du machen möchtest oder gib eine Paketnummer an."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "löschen"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "verschieben"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "neustarten"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - vorige Seite"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - nÀchste Seite"
diff --git a/locale/de/LC_MESSAGES/setup.po b/locale/de/LC_MESSAGES/setup.po
index ac026d48c..41992ce3b 100644
--- a/locale/de/LC_MESSAGES/setup.po
+++ b/locale/de/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "j"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "n"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Willkommen im pyLoad Konfigurations Assistenten."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Er wird dein System prÌfen und einige Grundeinstellungen vornehmen um pyLoad ausfÌhren zu können,"
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Der Wert in Klammern [] ist immer der Standardwert,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "Falls du sie nicht Àndern möchtest oder unsicher bist, drÌcke einfach Enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Beachte: Du kannst diesen Assistenten jederzeit wieder mit dem --setup oder -s Parameter starten."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Falls du beenden willst, drÃŒcke STRG-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "um abzubrechen und ihn nicht mehr automatisch zu starten."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Wenn du fÃŒr die SystemÃŒberprÃŒfung bereit bist, drÃŒcke Enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Du brauchst pycurl, sqlite und python 2.5, 2.6 oder 2.7 um pyLoad zu starten."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Bitte korrigiere das und starte pyLoad neu."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Das Setup wird sich nun beenden."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "System-Check beendet, drÃŒcke Enter um deinen Status Bericht zu sehen."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Status ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "Container decrypting"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "SSL Verbindung"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "Automatisches Captcha einlesen"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "GUI"
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "WeboberflÀche"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "erweitertes Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "VerfÃŒgbare Funktionen:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Fehlende Funktionen: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "kein py-crypto verfÃŒgbar"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Du brauchst es, um Container Dateien zu öffnen."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "Kein SSL verfÃŒgbar"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Wird gebraucht falls du eine SSL Verbindung zu Core oder Webinterface einstellen willst."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Falls du nur lokal zugreifen willst, ist SSL ÃŒberflÃŒssig."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "keine Captcha Erkennung verfÃŒgbar"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Wird fÌr einige Hoster als Freeuser benötigt."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI nicht verfÃŒgbar"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Die Grafische Benutzer OberflÀche."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "keine JavaScript Engine gefunden"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Du benötigst das fÌr einige Click'n'Load links. Installiere Spidermonkey, ossp-js, pyv8 oder rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Du kannst das Setup nun abbrechen und AbhÀngigkeiten fixen, falls du willst."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Mit Setup fortfahren?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Möchtest du den Pfad zu den Konfigurationsdateien Àndern? Jetziger ist %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Falls du pyLoad auf einem Server benutzt, oder die home Partition auf einem internen Flashspeicher liegt, wÀr es eine gute Idee ihn zu Àndern."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Konfigurationspfad Àndern?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Wollen Sie die Anmeldedaten und Grundeinstellungen festlegen?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Wird fÃŒr den ersten Start empfohlen."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Grundeinstellungen vornehmen?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Willst du SSL konfigurieren?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "SSL konfigurieren?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Willst du das Webinterface konfigurieren?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Webinterface konfigurieren?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Setup erfolgreich beendet."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "DrÃŒcke Enter zum beenden und starte pyLoad neu"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## System Check ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Deine python version ist zu neu, benutze python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Deine Python Version ist zu alt, benutze mindestens 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python Version: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Ihre installierte Version %s von jinja2 scheint veraltet zu sein."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Sie können problemlos fortfahren, sollte jedoch das Webinterface nicht funktionieren,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "sollten Sie es upgrade oder deinstallieren, pyload bringt eine ausreichende jinja2 Bibliothek mit."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS engine"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Grundeinstellungen ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Die folgenden Anmeldedaten sind fÃŒr CLI, GUI und Webinterface gÃŒltig."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Benutzername"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Externe Clients (GUI, CLI und andere) benötigen Fernzugriff, um via Netzwerk zugreifen zu können."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Solltest Du jedoch nur das Webinterface nutzen, kannst Du Ihn deaktivieren, um den Speicherverbrauch zu verringern."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Aktiviere Fernzugriff"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Sprache"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Download Ordner"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Maximale parallele Downloads"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Benutze Reconnect?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Reconnect Script Pfad"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Webinterface Setup ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Aktiviere Webinterface?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adresse des Webservers. Falls du 127.0.0.1 oder localhost eintrÀgst wird das Webinterface nur lokal erreichbar sein."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adresse"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad verfÌgt Ìber verschiedene Webserver, eine kurze ErklÀrung folgt."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Standardserver, beste Wahl wenn du nicht weißt welchen du wÀhlen sollst."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Dieser Server unterstÃŒtzt SSL und ist eine gute Alternative zu builtin."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Kann von apache, lighttpd benutzt werden. Muss konfiguriert werden, welches aber nicht sehr einfach ist."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Sehr schnelle Alternative geschrieben in C, benötigt libev und Linux-Kenntnisse."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Downloaden von: https://github.com/jonashaag/bjoern, danach kompilieren."
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "und kopiere die bjoern.so nach module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "und kopiere die bjoern.so nach pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Achtung: In manchen FÀllen funktioniert der builtin Server nicht, wenn du Probleme mit dem Webinterface bemerkst."
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "komme zurÌck und Àndere den builtin server zu threaded hier"
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Server"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Einstellungen fÃŒr SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "FÃŒhren Sie die folgenden Kommandos im pyLoad Konfigurationsordner aus, um ein SSL-Zertifikate zu erstellen:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Falls du fertig bist und alles erfolgreich war, kannst du nun SSL aktivieren."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "SSL aktivieren?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Aktion wÀhlen"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Erstelle/Bearbeite Nutzer"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Liste Nutzer auf"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Entferne Nutzer"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Verlassen"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Benutzer"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Setze neuen Config Pfad, momentane Konfiguration wird nicht ÃŒbernommen!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Config Pfad"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Config Pfad geÀndert, Setup wird nun beenden, bitte starte neu um weiterzumachen."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "DrÃŒcke Enter zum Beenden."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Fehler beim Setzen des Pfades fÃŒr die Konfiguration: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr "%s: OK"
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: fehlt"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Passwort: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Passwort zu kurz. Benutze mindestens 4 Zeichen."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Passwort (bestÀtigen): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Passwörter stimmen nicht Ìberein."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "ja"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "ja"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "j"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nein"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "nein"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "n"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "UngÃŒltige Eingabe"
diff --git a/locale/django.pot b/locale/django.pot
index 39b39aded..277108e5b 100644
--- a/locale/django.pot
+++ b/locale/django.pot
@@ -17,673 +17,673 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
#, python-format
msgid "New pyLoad version %s available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:127
+#: pyload/webui/app/pyload.py:127
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:195
+#: pyload/webui/app/pyload.py:195
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:264 module/webui/app/pyload.py:271
+#: pyload/webui/app/pyload.py:264 pyload/webui/app/pyload.py:271
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:509
+#: pyload/webui/app/pyload.py:509
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/el/LC_MESSAGES/django.po b/locale/el/LC_MESSAGES/django.po
index f292fcb89..c7fc04fc0 100644
--- a/locale/el/LC_MESSAGES/django.po
+++ b/locale/el/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Αίτηση για Μέο Captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Παρακαλώ Ύιαβάστε το κείΌεΜο στο captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "ΈγιΜε επαΜεκκίΜηση στο pyLoad "
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "αΜεΜεργό"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Επιτυχία"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "εΜεργό"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Είστε σίγουροι ότι Ξέλετε Μα τερΌατίσετε το pyLoad ;"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "ΕπαΜεκκίΜηση συΜΎέσΌου"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Διαγραφή συΜΎέσΌου"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Παρακαλώ εισάγετε έΜα όΜοΌα για το πακέτο"
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Παρακαλώ πατήστε στη σωστή Ξέση captcha"
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Παρουσιάστηκε έΜα σφάλΌα"
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Ο φάκελος είΜαι άΎειος"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "ΑπέτυχαΜ"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "ΔεΜ υπάρχουΜ Captchas για αΜάγΜωση."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Οι κωΎικοί ΎεΜ ταιριάζουΜ"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Οι ρυΞΌίσεις αποΞηκεύτηκαΜ"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Νέος φάκελος"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Είσαστε σίγουροι ότι Ξέλετε Μα κάΜετε επαΜεκκίΜηση στο pyLoad ;"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "αΜαΌοΜή %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "ΕΜεργές Μεταφορτώσεις "
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Αρχική"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Λήψεις"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Αρχεία καταγραφής"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "ΡυΞΌίσεις"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "ΌΜοΌα"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Κατάσταση"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Πληροφορία"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "ΜέγεΞος"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "ΠρόοΎος"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "ΣύΜΎεση"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "ΌΜοΌα Χρήστη"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "ΚωΎικός πρόσβασης"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "΀ο όΜοΌα χρήστη και ο κωΎικός πρόσβασης ΎεΜ ταιριάζουΜ. ΔοκιΌάστε ΟαΜά."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Για Μα επαΜαφέρετε τα στοιχεία εισόΎου ή για Μα προσΞέστε χρήστη τρέΟτε: "
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Διαγραφή ΀ελείωσε"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "ΕπαΜεκκίΜηση Απέτυχε"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Ίάκελος:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "ΚωΎικός Πρόσβασης:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "ΕπεΟεργασία Πακέτου"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "ΕπεΟεργαστείτε λεπτοΌέρειες του πακέτου παρακάτω. "
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "΀ο όΜοΌα του πακέτου."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Ίάκελος"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "ΌΜοΌα υποφακέλου για αυτές τις Όεταφορτώσεις."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Λίστα κωΎικώΜ που χρησιΌοποιούΜται για το unrar."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Υποβολή"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "ΕπαΜαφορά"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "ΑποσυΜΎεΞήκατε επιτυχής."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "ΔιαΎροΌή"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "απόλυτη"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "σχετική"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "όΜοΌα"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "ΌέγεΞος"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "τύπος"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "τελευταία αλλαγή"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "γοΜικός φάκελος"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "χωρίς περιεχόΌεΜο"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "ΓεΜικά"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "ΠρόσΞετα"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "ΛογαριασΌοί"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "ΕπιλέΟτε από το menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "ΠρόσΞετα"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Έγκυρο εως"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "ΕΜαποΌείΜουσα κίΜηση"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "ΧρόΜος"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Μέγιστος αριΞΌός ταυτόχροΜωΜ"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Διαγραφή;"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "έγκυρο"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "άκυρο"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "Μαι"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "όχι"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "ΠροσΞήκη"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "ΠροσΞήκη ΛογαριασΌού"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Εισάγετε τα στοιχεία του λογαριασΌού σας για Μα χρησιΌοποιήσετε τα επιπλέοΜ χαρακτηριστικά."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "΀ο όΜοΌα χρήστη σας."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Ο κωΎικός χρήστης για αυτόΜ το λογαριασΌό."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "΀ύπος"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "ΧρησιΌοποιήστε άλλο hoster για τοΜ λογαριασΌό σας. "
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "ΕκκίΜηση"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "προηγ."
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "επόΌ."
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "΀έλος"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Νέα"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "ΥποστήριΟη"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "ΣύστηΌα"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "έκΎοση pyLoad: "
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Ίάκελος Εγκατάστασης: "
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Ίάκελος ΡυΞΌίσεωΜ: "
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Ίάκελος Λήψης: "
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "ΕλεύΞερος Χώρος: "
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Γλώσσα: "
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Θύρα Webinterface: "
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Θύρα ΑποΌακρυσΌέΜης Πρόσβασης: "
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Εγκατάσταση"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Διαχείριση ΑρχείωΜ"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "ΠροσΞήκη Πακέτου "
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Επικολλήστε συΜΎέσΌους η φορτώστε αρχείο container."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "΀ο όΜοΌα του Μέου πακέτου."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "ΣύΜΎεσΌοι"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Επικολλήστε τους συΜΎέσΌους σας εΎώ ή οποιοΎήποτε κείΌεΜο και πατήστε το πλήκτρο φίλτρου."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "ΊιλτράρισΌα urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "ΚωΎικός για Aρχείο RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Aρχείο"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "ΑΜεβάστε αρχείο container."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "ΠροορισΌός"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "ΑΜάλυση Captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "΀ο captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "ΚείΌεΜο"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Εισάγετε το κείΌεΜο που φαίΜεται στο captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "ΚλείσιΌο"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Διεπαφή ιστού"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Υπάρχει ΎιαΞέσιΌη αΜαβάΞΌιση για το pyLoad!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "΀α πρόσΞετα αΜαβαΞΌίστηκαΜ, παρακαλούΌε κάΜτε επαΜεκκίΜηση!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "ΠεριΌέΜει Captcha"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "ΑποσύΜΎεση"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Διαχείριση"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Πληροφορίες"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Παρακαλώ ΣυΜΎεΞείτε!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Διακοπή"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Ακύρωση"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Λήψη:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "ΕπαΜασύΜΎεση:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "΀αχύτητα:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "ΕΜεργό:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "ΕπαΜαφόρτιση σελίΎας"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "φορτώΜει "
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Επιστροφή στηΜ κορυφή"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "ΣταΌάτηΌα του pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "ΕπαΜεκκίΜηση του pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Για Μα προσΞέσετε χρήστες ή Μα αλλάΟετε κωΎικούς πρόσβασης χρησιΌοποιήσετε: "
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "ΕπισήΌαΜση: Ο Διαχειριστής έχει πάΜτα όλα τα ΎικαιώΌατα!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Αλλαγή ΚωΎικού Πρόσβασης"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Διαχειριστής"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "ΔικαιώΌατα"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "αλλαγή"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Εισάγετε το παρόΜ και το επιΞυΌητό κωΎικό χρήστη."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "ΌΜοΌα χρήστη"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "ΠαρόΜ κωΎικός χρήστη"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Νέος κωΎικός χρήστη"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Ο Μέος κωΎικός χρήστη."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Νέος κωΎικός χρήστη (επαΜάληψη)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Παρακαλώ επαΜαλάβετε το Μέο κωΎικό χρήστη."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "ΔεΜ σας επιτρέπετε η πρόσβαση σε αυτή τη σελίΎα"
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Ο κατάλογος ΌεταφορτώσεωΜ ΎεΜ βρέΞηκε"
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "απεριόριστο"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "Όη ΎιαΞέσιΌο"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Εκτελέστε τηΜ εΜτολή pyload.py -s για πρόσβαση στηΜ εγκατάσταση."
diff --git a/locale/el/LC_MESSAGES/pyLoad.po b/locale/el/LC_MESSAGES/pyLoad.po
index c292ac965..cb4826ca9 100644
--- a/locale/el/LC_MESSAGES/pyLoad.po
+++ b/locale/el/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "ΕλήφΞη σήΌα εγκατάλειψης"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "΀ο pyLoad εκτελείται ήΎη Όε pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Αποτυχία αλλαγής οΌάΎας: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Αποτυχία αλλαγής χρήστη: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "φάκελος για αρχεία καταγραφής"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Σε εκκίΜηση"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Χρήση γοΜικού καταλόγου: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "το pycrypto Ξα αποκωΎικοποιήσει τα περιέχοΜτα αρχεία"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "φάκελος για προσωριΜά αρχεία"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "φάκελος για κατεβασΌέΜα"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL για ασφαλή σύΜΎεση"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Παρακαλώ ελέγΟτε τα στοιχεία σύΜΎεσης Όε τη χρήση του ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Όλοι οι συΜΎεσΌοι αφαιρέΞηκαΜ"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "ΧρόΜος κατεβάσΌατος: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "ΕλέυΞερος χώρος στο Ύίσκο: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "ΕΜεργοποίηση ΛογαριασΌώΜ..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "ΕΜεργοποίηση ΠρόσΞετωΜ..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "΀ο pyLoad είΜαι εΜεργό και εκτελείται "
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "το pyLoad επαΜεκκιΜείται"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "το pyLoad σταΌατάει"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Εγκατάσταση %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "ΎεΜ βρεΞηκε(καΜ) %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "ΎεΜ ΎιΌιουργήΞηκε(καΜ) %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "κλείσιΌο..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "σφάλΌα κατα το κλείσιΌο"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "το pyLoad σταΌατήΞηκε απο το ΀ερΌατικο"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "τελείωσε"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "αποσυΜΎεΌέΜος"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "συΜΎεΌέΜος"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "στηΜ ουρά"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "προσπεράστηκε"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "σε αΜαΌοΜή"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "προσωριΜά χωρίς σύΜΎεση"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "ΟεκιΜάει"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "απέτυχε"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "ΌαταιώΞηκε"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "αποκρυπτογραφείται"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "προσαρΌοσΌέΜο"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "σε λήψη"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "σε εΟέλιΟη"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "άγΜωστο"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Ολοκλήρωση πακέτου: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "ΣφάλΌα αποΌακρυσΌέΜου backend: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "ΓίΜεται εκκίΜηση %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Απέτυχε η φόρτωση του backend %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "αΜαΌοΜή %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "ΔεΜ βρέΞηκαΜ πιστοποιητικά SSL."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Μπορείτε Μα χρησιΌοποιήσετε τοΜ threaded server που προσφέρει καλή απόΎοση και ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "παραΎείγΌατα αρχείωΜ ρυΞΌίσεωΜ βρίσκοΜται Όέσα στο φάκελο module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "παραΎείγΌατα αρχείωΜ ρυΞΌίσεωΜ βρίσκοΜται Όέσα στο φάκελο pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Αποτυχία χρήσης του %(server)s, ΎεΜ είΜαι εγκατεστηΌέΜο το πακέτο python-flup!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Χρειάζεται Μα κατεβλασετε και Μα συΜτάΟετε το bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Μα φυσικά και χρειάζετε Μα είστε οικείος Όε τα linux και Μα Οέρετε πως Μα συΜτάσσεται λογισΌικό"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Ο ΎιακοΌιστής άλλαΟε σε threaded, λόγω κάποιωΜ γΜωστώΜ προβληΌάτωΜ απόΎοσης στα windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Αυτός ο ΎιακοΌιστής ΎεΜ προσφέρει SSL, αΜτί για αυτόΜ παρακαλώ σκεφτείτε τηΜ περίπτωση χρήσης του threaded"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "ΕκκίΜηση του εΜσωΌατωΌέΜου ΎιακοΌιστή web: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "ΕκκίΜηση του threaded SSL ΎιακοΌιστή web: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "ΕκκίΜηση του threaded ΎιακοΌιστή web: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "ΕκκίΜηση του ΎιακοΌιστή fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "ΔεΜ σας επιτρέπετε η πρόσβαση σε αυτή τη σελίΎα"
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Ο κατάλογος ΌεταφορτώσεωΜ ΎεΜ βρέΞηκε"
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "απεριόριστο"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "Όη ΎιαΞέσιΌο"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Εκτελέστε τηΜ εΜτολή pyload.py -s για πρόσβαση στηΜ εγκατάσταση."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Η λήψη τωΜ κοΌΌατιώΜ απέτυχε, επιστροφή σε κατάσταση ΌοΜής σύΜΎεσης | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Η λήψη ΟεκιΜά: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Η λήψη ολοκληρώΞηκε: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Στο πρόσΞετο %s λείπει Όια λειτουργία."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Η λήψη ΌαταιώΞηκε: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Η λήψη επαΜεκκιΜήΞηκε: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Η λήψη είΜαι εκτός σύΜΎεσης: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Η λήψη είΜαι προσωριΜά εκτός σύΜΎεσης: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Η λήψη απέτυχε: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Αποτυχία σύΜΎεσης Όε το ΎιακοΌιστή ή Ύιακοπή σύΜΎεσης, αΜαΌοΜή 1 λεπτό πριΜ γίΜει κι άλλη προσπάΞεια."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "ΈγιΜε παράλειψη στη λήψη: %(name)s εΟαιτίας του %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Η αΜάκτηση πληροφοριώΜ για το %(name)s απέτυχε | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Αποτυχία εΜεργοποίησης %(name)s "
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "ΕΜεργοποιηΌέΜα πρόσΞετα: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "ΑπεΜεργοποίηση πρόσΞετωΜ: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "ΕπαΜασύΜΎεση απέτυχε %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "ΔεΜ βρέΞηκε αρχείο εΜτολώΜ για επαΜασύΜΎεση!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "ΞεκιΜάει η επαΜασύΜΎεση"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Αποτυχία εκτέλεσης αρχείου εΜτολώΜ επαΜασύΜΎεσης!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "ΕπαΜασυΜΎέΞηκε, Μέα ΎιέυΞυΜση IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "ΔεΜ έχει αποΌείΜει αρκετός χώρος στηΜ συσκευή"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Αποτυχία σύΜΎεσης Όε τοΜ λογαριασΌό %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "ΛάΞος κωΎικός"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "ΣτοΜ λογαριασΌό %s ΎεΜ έχει αποΌείΜει αρκετή κίΜηση ΎεΎοΌέΜωΜ, Ξα γίΜει πάλι έλεγχος σε 30 λεπτά"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Ο λογαριασΌός %s έχει λήΟει, Ξα γίΜει ΟαΜά έλεγχος σε 1 ώρα"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Ίτάσατε στο Όέγιστο όριο λήψεωΜ"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "ΣφάλΌα κατά τηΜ εισαγωγή %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "ΔεΜ φορτώΞηκε κάποιος hoster"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "ΕΜεργοποιήστε τις απευΞείας λήψεις στοΜ Bitshare λογαριασΌό σας"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Απαιτείται πιστοποίηση (όΜοΌα χρήστη:κωΎικός)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Παρακαλώ εισάγετε το λογαριασΌό σας %s ή απεΜεργοποιήστε αυτό το πρόσΞετο"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Υπήρχε κώΎικας HTML στο αρχείο που ΌεταφορτώΞηκε (%s)...πρόβληΌα αΜακατεύΞυΜσης ίσως; Η Όεταφόρτωση Ξα επαΜεκκιΜήσει."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "΀ο αρχείο είΜαι προσωριΜά Όη ΎιαΞέσιΌο"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: αΜαΌοΜή ΌεταΟύ τωΜ λήψεωΜ %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: αΜαΌοΜή για captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "΀ο ληφΞέΜ αρχείο ήταΜ άΎειο"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "΀ο κλειΎί API ΎεΜ είΜαι έγκυρο"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: ΔεΜ απέΌειΜε αρκετή κίΜηση ΎεΎοΌέΜωΜ"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Υπέρβαση ορίου κίΜησης ΎεΎοΌέΜωΜ"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Traffic Share (απευΞείας λήψη)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Κατεβάζετε ήΎη από αυτή τη ΎιεύΞυΜση ΙΡ, αΜαΌοΜή 60 ΎευτερολέπτωΜ"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Μη έγκυρος κώΎικας , η λήψη Ξα γίΜει επαΜεκκίΜηση"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: ΔεΜ υπάρχουΜ ελέυΞερα slots"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Χρειάζεστε έΜαΜ λογαριασΌό premium για αυτό το αρχείο"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "΀ο όΜοΌα αρχείου αΜαφέρΞηκε ως Όη έγκυρο"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "ΣφάλΌα ταυτόχροΜης λήψης, αΜαΌοΜή 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "ΔεΜ έχετε συΜΎεΞεί."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Η αποκρυπτογράφηση απέτυχε"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Η ΎιεύΞυΜση URL ΎεΜ παρείχε καΜέΜα κλειΎί αρχείου"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "ΚωΎικός σφάλΌατος:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "΀ο αρχείο ΎεΜ υπάρχει"
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** ΀α πρόσΞετα έχουΜ αΜαβαΞΌιστεί, παρακαλώ επαΜεκκιΜήστε το pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "΀α πρόσΞετα αΜαβαΞΌίστηκαΜ και ΟαΜαφορτώΞηκαΜ"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "ΔεΜ υπάρχουΜ αΜαβαΞΌίσεις για τα πρόσΞετα"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "ΔεΜ βρέΞηκε αΜαβάΞΌιση για το pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** ΕίΜαι ΎιαΞέσιΌη Όια καιΜούρια έκΎοση (%s) του pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Κατεβάστε απο εΎώ: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "ΑΎυΜαΌία σύΜΎεσης στοΜ κεΜτρικό ΎιακοΌιστή για έλεγχο εΜηΌερώσεωΜ"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Νέα έκΎοση του%(type)s | %(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "ΣφάλΌα κατά τηΜ αΜαβάΞΌιση του %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "ΑσυΌφωΜία έκΎοσης"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Η λήψη ολοκληρώΞηκε: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Αίτηση για Μέο Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "ΑπάΜτηση Όε 'c %s κείΌεΜο για το captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Παρακαλώ προσΞέστε πρώτα τοΜ λογαριαΌό σας στο premium.to και επαΜεκκιΜήστε το pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "ΠροστέΞηκε το %s από HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "ΔεΜ έχει εγκατασταΞεί το %s"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Αποτυχία εΜεργοποίησης του %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "ΕΜεργοποιήΞηκε"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "ΔεΜ έχουΜ εΜεργοποιηΞεί πρόσΞετα για αποσυΌπίεση"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "΀ο πακέτο %s έχει ΎροΌολογηΞεί για αποσυΌπίεση αργότερα"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Έλεγχος του πακέτου %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "ΑποσυΌπίεση στο %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "ΔεΜ βρέΞηκαΜ αρχεία για αποσυΌπίεση"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "αποσυΌπιέζεται"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "ΠροστατευΌέΜο Όε κωΎικό"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "ΛάΞος κωΎικός"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Διαγραφή %s αρχείωΜ"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Η αποσυΌπίεση τελείωσε"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "ΣφάλΌα στο συΌπιεσΌέΜο αρχείο"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "ΑσυΌφωΜία CRC"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "ΆγΜωστο ΣφάλΌα"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Ο ορισΌός του Χρήστη και της ΟΌάΎας απέτυχαΜ"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Η Ξύρα 9666 χρησιΌοποιείται ήΎη"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "αποΌέΜουΜ %s πόΜτοι"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Αποτυχία αποστολής απάΜτησης."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Ο λογαρισΌός σας CaptchaTrader ΎεΜ έχει αρκετούς πόΜτους"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Η λίστα Crypter ΎεΜ βρέΞηκε"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Η λίστα Crypter είΜαι κεΜή"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Η λήψη ολοκληρώΞηκε: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Νέο CaptchaID από τη Όεταφόρτωση: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Ο λογαριασΌός σας Captcha 9kw.eu ΎεΜ έχει αρκετούς πόΜτους"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "ΕγκατεστηΌέΜα αρχεία εΜτολώΜ για το %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "΀ο αρχείο εΜτολώΜ ΎεΜ είΜαι εκτελέσιΌο:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "ΣφάλΌα στο %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Ο λογαριασΌός στο ExpertDecoders ΎεΜ έχει αρκετούς πόΜτους"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Παρακαλώ προσΞέστε πρώτα τοΜ λογαριαΌό σας στο rehost.to και επαΜεκκιΜήστε το pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Παρακαλώ προσΞέστε πρώτα έΜαΜ έγκυρο λογαριαΌό στο premiumize.me και επαΜεκκιΜήστε το pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "αποΌέΜουΜ %d πόΜτοι"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "΀ο PIL και το tesseract ΎεΜ είΜαι εγκαταστηΌέΜα και ΎεΜ υπάρχει πρόγραΌΌα-πελάτης συΜΎεΌέΜος για αποκρυπτογράφηση captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Η ρύΞΌιση χρηστώΜ και οΌάΎωΜ απέτυχε: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "ΠροστέΞηκαΜ %(count)d σύΜΎεσΌοι στο πακέτο #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "ΚαΌία ΌηχαΜή js ΎεΜ βρέΞηκε, παρακαλώ εγκαταστήσετε Όια απο τις παρακάτω Spidermonkey, ossp-js, pyv8, rhino "
diff --git a/locale/el/LC_MESSAGES/pyLoadCli.po b/locale/el/LC_MESSAGES/pyLoadCli.po
index 52d49be62..bec3abe08 100644
--- a/locale/el/LC_MESSAGES/pyLoadCli.po
+++ b/locale/el/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "ΔιασύΜΎεση ΓραΌΌής ΕΜτολώΜ"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Λήψεις:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "΀αχύτητα:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "ΜέγεΞος:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "Ολοκλήρωση σε: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "αΜαΌοΜή: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Κατάσταση:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "σε παύση"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "εκτελείται"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "συΜολική ταχύτητα"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Αρχεία στηΜ ουρά"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "ΣύΜολο"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr " ΜεΜού:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " ΠροσΞήκη ΣυΜΎέσΌωΜ"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Διαχείριση Ουράς"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Διαχείριση Συλλέκτη "
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " ΕΜεργοποίηση/ΑΎραΜοποίηση"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " ΀ερΌατισΌός ΔιακοΌιστή"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " ΈΟοΎος"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Χρήση Όε: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Έλεγχος %d συΜΎέσΌωΜ:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "΀ο αρχείο ΎεΜ υπάρχει."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "΀ο pyLoad τερΌατίστηκε"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "ΕΌφαΜίζει τηΜ κατάσταση του ΎιακοΌιστή"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "ΕΌφαΜίζει τις λήψεις σε ουρά"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "ΕΌφαΜίζει τις λήψεις στο συλλέκτη"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "ΠροσΞέτει το πακέτο στηΜ ουρά"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "ΠροσΞέτει το πακέτο στο συλλέκτη"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Διαγραφή αρχείου από Ουρά/Συλλεκτη"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Διαγραφή πακέτωΜ από Ουρά/Συλλέκτη"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "ΜετακίΜηση πακέτωΜ από τηΜ Ουρά στο Συλλέκτη και αΜτίστροφα"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "ΕπαΜεκκίΜηση αρχείωΜ"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "ΕπαΜεκκίΜηση πακέτωΜ"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Έλεγχος κατάστασης σύΜΎεσης. Λειτουργεί Όε τοπικά container"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Έλεγχος κατάστασης σύΜΎεσης εΜός αρχείου container"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Παύση του ΎιακοΌιστή"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "συΜέχιση λήψεωΜ"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "ΕΜαλλαγή παύσης/εκτέλεσης"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "τερΌατισΌός ΎιακοΌιστή"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Λίστα εΜτολώΜ:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "ΑΎυΜαΌία εγγραφής του αρχείου ρυΞΌίσεωΜ του χρήστη"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Απαιτείται το py-openssl για σύΜΎεση σε αυτόΜ το pyLoad Core."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "ΔιεύΞυΜση:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Θύρα:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "ΌΜοΌα χρήστη:"
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "ΚωΎικός χρήστη:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "΀α στοιχεία σύΜΎεσης είΜαι λάΞος."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "ΑΎυΜαΌία σύΜΎεσης στη ΎιεύΞυΜση %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Απαιτείται το py-openssl για σύΜΎεση σε αυτόΜ τοΜ pyLoad Core."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "H αλληλεπιΎραστική λειτουργία αγΜοήΞηκε εφόσοΜ Ύώσατε κάποιες εΜτολές."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "ΠροσΞήκη Πακέτου:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Εισάγετε όΜοΌα για το καιΜούργιο πακέτο"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Πακέτο: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "ΑΜάλυση τωΜ συΜΎέσΌωΜ που Ξέλετε Μα προσΞέσετε. "
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Πληκτρολογείστε %s όταΜ τελειώσετε. "
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "ΣύΜΎεσΌοι που προστέΞηκαΜ:"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "επιστροφή στο αρχικό ΌεΜού"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Διαχείριση πακέτωΜ:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Διαχείριση ΣυΜΎέσΌωΜ:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "΀ι Ξέλετε Μα ΌετακιΜήσετε;"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "΀ί Ξέλετε Μα Ύιαγράψετε;"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "΀ί Ξέλετε Μα επαΜεκκιΜήσετε;"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "ΕπιλέΟτε εΜέργεια ή πληκτρολογήστε αριΞΌό πακέτου."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "Ύιαγραφή"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "ΌετακίΜηση"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "επαΜεκκίΜηση"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - προηγούΌεΜο"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - επόΌεΜο"
diff --git a/locale/el/LC_MESSAGES/setup.po b/locale/el/LC_MESSAGES/setup.po
index 0f9903201..0a5ba97a6 100644
--- a/locale/el/LC_MESSAGES/setup.po
+++ b/locale/el/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Καλώς ήλΞατε στο ΒοηΞό ΡύΞΌισης του pyLoad"
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Θα γίΜει έλεγχος και βασική ρύΞΌιση του συστήΌατός σας, ώστε Μα εκτελεστεί το pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Η τιΌή στις αγκύλες [] είΜαι πάΜτα η προεπιλεγΌέΜη τιΌή,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "σε περίπτωση που ΎεΜ επιΞυΌείτε αλλαγή ή αΌφιβάλλετε για τηΜ επιλογή σας, απλά πατήστε enter. "
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "ΜηΜ ΟεχΜάτε: Μπορείτε πάΜτα Μα εκτελέσετε ΟαΜά τοΜ ΒοηΞό, εισάγοΜτας τη παράΌετρο --setup ή -s, κατά τηΜ εκτέλεση του pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "ΑΜ αΜτιΌετωπίσετε προβλήΌατα Όε το ΒοηΞό, πατήστε CTRL-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "για Μα εγκαταλείψετε και Μα αποτρέψετε τηΜ αυτόΌατη εκτέλεσή του."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "ΌταΜ είστε έτοιΌος για τοΜ έλεγχο του συστήΌατος, πατήστε enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "ΑπαιτούΜται τα pycurl, sqlite και python 2.5, 2.6 ή 2.7 για Μα εκτελέσετε το pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Παρακαλώ κάΜετε τις ΎιορΞώσεις και εκτελέστε ΟαΜά το pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Η εγκατάσταση Ξα τερΌατιστεί."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Ο έλεγχος του συστήΌατος ολοκληρώΞηκε, πατήστε το enter για Μα Ύείτε τα αποτελέσΌατα."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Κατάσταση ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "αποκρυπτογράφηση περιεχόΌεΜου"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "σύΜΎεση ssl"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "αυτόΌατη αποκρυπτογράφηση captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Διεπαφή ιστού"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Χαρακτηριστικά ΎιαΞέσιΌα:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Χαρακτηριστικά που λείπουΜ:"
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "ΎεΜ είΜαι ΎιαΞέσιΌο το py-crypto"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Αυτό απαιτείται αΜ Ξέλετε Μα αποκρυπτογραφήσετε αρχεία container."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "ΎεΜ είΜαι ΎιαΞέσιΌο το SSL"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Αυτό απαιτείται για τηΜ πραγΌατοποίηση ασφαλής σύΜΎεσης Όε τοΜ πυρήΜα ή το Webιnterface."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "ΑΜ Ξέλετε Μα έχετε πρόσβαση ΌόΜο τοπικά στο pyLoad, το ssl ΎεΜ είΜαι χρήσιΌο."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "ΎεΜ υπάρχει ΎιαΞέσιΌη αΜαγΜώριση Captcha"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Χρειάζεται ΌόΜο από Όερικούς ΎιακοΌιστές ΎιαΌοιρασΌού αρχείωΜ και σαΜ ΎωρεάΜ χρήστης."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "΀ο GUI ΎεΜ είΜαι ΎιαΞέσιΌο"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "΀ο Γραφικό ΠεριβάλλοΜ Χρήστη."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "ΎεΜ βρέΞηκε ΌηχαΜή JavaScript"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Θα το χρειαστείτε για Όερικούς συΜΎέσΌους Click'N'Load. Εγκαταστήστε Spidermonkey, ossp-js, pyv8 ή rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "ΑΜ Ξέλετε Όπορείτε Μα ακυρώσετε τηΜ εγκατάσταση τώρα και Μα ΎιορΞώσετε κάποιες εΟαρτήσεις."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "ΣυΜέχιση Όε τηΜ εγκατάσταση;"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Θέλετε Μα αλλάΟετε τη ΎιαΎροΌή του αρχείου αποΞήκευσης τωΜ ρυΞΌίσεωΜ; Η τρέχουσα είΜαι %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "ΑΜ χρησιΌοποιήτε το pyLoad σε εΟυπηρετητή ή το ΎιαΌέρισΌα home βρίσκεται σε εσωτερική ΌΜήΌη flash, Ξα ήταΜ καλή ιΎέα Μα το αλλάΟετε."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Αλλαγή ΎιαΎροΌής αποΞήκευσης αρχείου ρυΞΌίσεωΜ;"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Θέλετε Μα ορίσετε στοιχεία σύΜΎεσης και Μα κάΜετε τις βασικές ρυΞΌίσεις;"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Αυτό συΜιστάται για τηΜ πρώτη εκτέλεση."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "ΔηΌιουργία βασικής ρύΞΌισης;"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Θέλετε Μα ρυΞΌίσετε το SSL;"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "ΡύΞΌιση SSL;"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Θέλετε Μα ρυΞΌίσετε το περιβάλλοΜ Web;"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "ΡύΞΌιση του Web Interface;"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Η εγκατάσταση ολοκληρώΞηκε Όε επιτυχία."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Πατήστε Enter για Μα εΟέλΞετε και Μα επαΜεκκιΜήσετε το pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Έλεγχος ΣυστήΌατος ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Η έκΎοση της python που χρησιΌοποιείτε είΜαι πολύ Μέα, παρακαλώ χρησιΌοποιήστε Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Η έκΎοση της python που χρησιΌοποιείτε είΜαι πολύ παλιά, παρακαλώ χρησιΌοποιήστε τουλάχιστοΜ Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "ΈκΎοση Python: ΟΚ"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Η έκΎοση %s του jinja2 που έχετε εγκατεστηΌέΜη φαίΜεται πολύ παλιά."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Μπορείτε Μα συΜεχίστε, αλλά αΜ ΎεΜ Ύουλεύει το Web Interface,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "παρακαλώ αΜαβαΞΌίστε το ή απεγκαταστήστε το, το pyLoad συΌπεριλαΌβάΜει Όια επαρκή βιβλιοΞήκη jinja2."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "ΜηχαΜή JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Βασική Εγκατάσταση ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "΀α ακόλουΞα στοιχεία σύΜΎεσης είΜαι έγκυρα για τη ΓραΌΌή ΕΜτολώΜ, το GUI και το περιβάλλοΜ Web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "ΌΜοΌα Χρήστη"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Οι εΟωτερικοί πελάτες (για το GUI, τη ΓραΌΌή εΜτολώΜ ή άλλο) χρειάζοΜται αποΌακρυσΌέΜη πρόσβαση για Μα λειτουργήσουΜ Όέσω Ύικτύου."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "ΌΌως, αΜ Ξέλετε Μα Μα χρησιΌοποιήσετε ΌοΜο το Web Interface, Όπορείτε Μα το απεΜεργοποιήσετε για Μα γλυτώσετε RAM."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "ΕΜεργοποίηση αποΌακρυσΌέΜης πρόσβασης"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Γλώσσα"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Ίάκελος ΌεταφορτώσεωΜ"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Μέγιστος αριΞΌός ταυτόχροΜωΜ λήψεωΜ"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Χρήση ΕπαΜασύΜΎεσης;"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "΀οποΞεσία αρχείου εΜτολώΜ επαΜασύΜΎεσης"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Εγκατάσταση ΠεριβάλλοΜτος Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "ΕΜεργοποίηση περιβάλλοΜτος Web;"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "ΔιεύΞυΜση που Ξα \"ακούει\". ΑΜ χρησιΌοποιήσετε 127.0.0.1 ή localhost, το περιβάλλοΜ Web Ξα είΜαι προσβάσιΌο ΌόΜο τοπικά."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "ΔιεύΞυΜση"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Θύρα"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "΀ο pyLoad προσφέρει αρκετoύς ΎιακοΌιστές υποστήριΟης. ΑκολουΞεί σύΜτοΌη επεΟήγηση."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "ΠροεπιλεγΌέΜος ΎιακοΌιστής, η καλύτερη επιλογή αΜ ΎεΜ γΜωρίζετε ποιοΜ Μα ΎιαλέΟετε."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Αυτός ο ΎιακοΌιστής υποστηρίζει SSL και είΜαι καλή εΜαλλακτική λύση σε σχέση Όε τοΜ προεπιλεγΌέΜο."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Μπορεί Μα χρησιΌοποιήΞεί από τοΜ apache και το lighttpd, απαιτείται παραΌετροποίηση, η οποία ΎεΜ είΜαι πολύ εύκολη."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Πολύ γρήγορη εΜαλλακτική λύση, γραΌΌέΜη σε C, απαιτεί libev και γΜώσεις linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Κατεβάστε το από εΎώ: https://github.com/jonashaag/bjoern, κάΜτε το compile,"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "και αΜτιγράψτε το bjoern.so στο module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "και αΜτιγράψτε το bjoern.so στο pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Προσοχή: Σε σπάΜιες περιπτώσεις ο προεπιλεγΌέΜος ΎιακοΌιστής ΎεΜ Ύουλεύει. ΑΜ παρατηρήσετε προβλήΌατα Όε το Web Interface,"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "επιστρέψτε εΎώ και αλλάΟτε τοΜ Όε τοΜ threaded."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "ΔιακοΌιστής"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Εγκατάσταση SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Εκτελέστε αυτές τις εΜτολές από τοΜ φάκελο παραΌετροποίησης του pyLoad για Μα ΎηΌιουργήσετε πιστοποιητικά SSL:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "ΑΜ τελειώσατε και όλα πήγαΜ καλώς, τώρα Όπορείτε Μα εΜεργοποιήσετε το SSL."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "ΕΜεργοποίηση SSL;"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "ΕπιλέΟτε εΜέργεια"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - ΔηΌιουργία/ΕπεΟεργασία χρήστη"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Λίστα χρηστώΜ"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Διαγραφή χρήστη"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - ΀ερΌατισΌός"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Χρήστες"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "ΟρισΌός καιΜούριας ΎιαΎροΌής ρυΞΌίσεωΜ, ΎεΜ Ξα ΌεταφερΞούΜ οι τρέχουσες ρυΞΌίσεις!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "ΔιαΎροΌή αρχείου ρυΞΌίσεωΜ"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Η ΎιαΎροΌή ρυΞΌίσεωΜ ορίστηκε, η εγκατάσταση τώρα Ξα κλείσει, παρακαλώ κάΜτε επαΜεκκίΜηση για Μα συΜεχίστε."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Πατήστε Enter για έΟοΎο."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Ο ορισΌός της ΎιαΎροΌής ρυΞΌίσεωΜ απέτυχε: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: λείπει"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "ΚωΎικός χρήστη:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Ο κωΎικός είΜαι πολύ Όικρός. ΧρησιΌοποιήστε τουλάχιστοΜ 4 χαρακτήρες."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "ΚωΎικός (ΟαΜά):"
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Οι κωΎικοί ΎεΜ ταιριάζουΜ"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "Μαι"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "σωστό"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "όχι"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "λάΞος"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "ΛαΜΞασΌέΜη εισαγωγή"
diff --git a/locale/eo/LC_MESSAGES/django.po b/locale/eo/LC_MESSAGES/django.po
index 3758d96c9..beb7646ec 100644
--- a/locale/eo/LC_MESSAGES/django.po
+++ b/locale/eo/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/eo/LC_MESSAGES/pyLoad.po b/locale/eo/LC_MESSAGES/pyLoad.po
index a4012d712..23f1b78f1 100644
--- a/locale/eo/LC_MESSAGES/pyLoad.po
+++ b/locale/eo/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/eo/LC_MESSAGES/pyLoadCli.po b/locale/eo/LC_MESSAGES/pyLoadCli.po
index d098a93a2..10d313833 100644
--- a/locale/eo/LC_MESSAGES/pyLoadCli.po
+++ b/locale/eo/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/eo/LC_MESSAGES/setup.po b/locale/eo/LC_MESSAGES/setup.po
index 259ad8543..6eb3fbddd 100644
--- a/locale/eo/LC_MESSAGES/setup.po
+++ b/locale/eo/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index 4c928537a..dd1a7f293 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Solicitud de nuevo Captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Por favor lee el texto en el captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad se reinició"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "apagado"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Éxito"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "encendido"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "¿Estás seguro de que quieres salir de pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Reiniciar enlace"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Borrar enlace"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Por favor, introduce un nombre de paquete."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Por favor, haz clic en la posición del captcha correcto."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Se produjo un error."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "La carpeta está vacía"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Fallidos"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "No hay captchas."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Las contraseñas no coinciden."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Ajustes guardados."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nueva carpeta"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "¿Estás seguro de que quieres reiniciar pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperando a %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Descargas activas"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Inicio"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "Cola"
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "Recolector"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Descargas"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Registros"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuración"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nombre"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Estado"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Información"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Tamaño"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Progreso"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Iniciar sesión"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Usuario"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Contraseña"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Tu nombre de usuario y contraseña no coinciden. Por favor inténtalo de nuevo."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Para reiniciar tus datos de inicio de sesión o añadir un usuario ejecuta:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Borrar terminados"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Reiniciar Fallidos"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Carpeta:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Contraseña:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Editar paquete"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Editar los detalles del paquete siguiente."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Nombre del paquete."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Carpeta"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nombre de la subcarpeta para estas descargas."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lista de contraseñas usadas para unrar."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Enviar"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Reiniciar"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Se ha cerrado sesión correctamente."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Ruta"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absoluta"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativa"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nombre"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "tamaño"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tipo"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "última modificación"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "directorio padre"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "sin contenido"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "General"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Complementos"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Cuentas"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Elige una sección del menú"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "Premium"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Válido hasta"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Tráfico restante"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tiempo"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Máx. en Paralelo"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "¿Borrar?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "válido"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "inválido"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "sí"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "no"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Añadir"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Agregar cuenta"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Introduce los datos de tu cuenta para usar características premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Tu nombre de usuario."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "La contraseña para esta cuenta."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Tipo"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Elige el proveedor de alojamiento para tu cuenta."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Iniciar"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "anterior"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "siguiente"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fin"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Novedades"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Soporte"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistema"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr "Python:"
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "S.O.:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "versión de pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Carpeta de instalación:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Carpeta de configuración:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Carpeta de descarga:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Espacio Libre:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Idioma:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Puerto de interfaz web:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Puerto de interfaz remota:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Configuración"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Administrador de archivos"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Añadir paquete"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Pega tus enlaces o carga un archivo contenedor."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Nombre del nuevo paquete."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Enlaces"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Pega tus enlaces o cualquier texto aquí y pulsa el botón filtrar."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrar urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Contraseña para el archivo-RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Archivo"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Cargar contenedor."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Destino"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Leyendo captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "Captcha"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "El captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Texto"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Introduzca el texto en el captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Cerrar"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interfaz web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "¡Actualización de pyLoad disponible!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins actualizados, ¡por favor reinicia!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Esperando captcha"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Salir"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrar"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Información"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "¡Por favor, inicie sesión!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Parar"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Cancelar"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Descarga:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Reconectar:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Velocidad:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Activo:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Recargar"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "cargando"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Volver al principio"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Salir de pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Reiniciar pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Para añadir un usuario o cambiar contraseñas usa:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Importante: ¡El usuario Admin tiene siempre todos los permisos!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Cambiar Contraseña"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Admin"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Permisos"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "cambiar"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Introduce tu contraseña actual y la deseada."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Usuario"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Contraseña actual"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nueva contraseña"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "La nueva contraseña."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nueva contraseña (repetir)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Por favor, repite la nueva contraseña."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "No tienes permiso para acceder a esta página."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "No se encuentra el directorio de descarga."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "ilimitado"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "no disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Ejecuta pyload.py -s para acceder a la instalación."
diff --git a/locale/es/LC_MESSAGES/pyLoad.po b/locale/es/LC_MESSAGES/pyLoad.po
index 6f94da4ff..bd029162f 100644
--- a/locale/es/LC_MESSAGES/pyLoad.po
+++ b/locale/es/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Señal de salida recibida"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad ya está ejecutándose con pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Cambio de grupo fallido: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Cambio de usuario fallido: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "carpeta para los registros"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Iniciando"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Usando directorio de inicio: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto va a decodificar archivos contenedores"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "carpeta para archivos temporales"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "carpeta de descargas"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL para conexión segura"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Moviendo la configuración antigua de usuario a la BD"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Por favor, comprueba tus datos de inicio de sesión con ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Se han eliminado todos los enlaces"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Tiempo de descarga: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Espacio libre: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Activando Cuentas..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Activando Plugins..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad está funcionando"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "reiniciando pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad se cierra"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Instalar %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "no se pudo encontrar %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "no se pudo crear %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "apagando..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "ha ocurrido un error mientras se apagaba"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyload terminado desde el Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "El archivo de la base de datos fue eliminado por ser de una versión incompatible."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "El archivo de la base de datos NO pudo convertirse."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "La base de datos se convirtió de la v2 a la v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "La base de datos se convirtió de la v3 a la v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Convirtiendo la BD Django antigua"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "Terminado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "sin conexión"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "en línea"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "en cola"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "omitido"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "esperando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temp. sin conexión"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "comenzando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "fallido"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "abortado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "descifrando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personalizado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "descargando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "procesando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "desconocido"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paquete terminado: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Usando SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Error de backend remoto: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Iniciando %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Fallo al cargar servidor %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperando a %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certificados SSL no encontrados."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Lo sentimos, ya no admitimos iniciar %s directamente en pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Puedes utilizar el servidor con hilos que ofrece un buen rendimiento y ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "por supuesto puedes usar aún tu %s existente con el servidor fastcgi de pyLoad"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "las configuraciones de ejemplo se encuentran en el directorio module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "las configuraciones de ejemplo se encuentran en el directorio pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "¡No puedes usar %(server)s, python-flup no está instalado!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Error importando servidor ligero: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Debes descargar y compilar bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Copia el módulo boern.so a la carpeta module/lib o usa la instalación setup.py"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Copia el módulo boern.so a la carpeta pyload/lib o usa la instalación setup.py"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Por supuesto debes estar familiarizado con linux y saber cómo compilar software"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Servidor en modo threaded, debido a problemas de rendimiento en Windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Este servidor no ofrece SSL, considera el usar el servidor con hilos en su lugar"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web incorporado: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web SSL con hilos : %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web con hilos: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Iniciando servidor fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Iniciando servidor web ligero (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "No tienes permiso para acceder a esta página."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "No se encuentra el directorio de descarga."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "ilimitado"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "no disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Ejecuta pyload.py -s para acceder a la instalación."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Descarga por trozos fallida, recurro a una única conexión | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Iniciando descarga: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Descarga finalizada: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Plugin %s no encuentra una función."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Descarga abortada: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Descarga reiniciada: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Descarga está fuera de servicio: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "La descarga está temporalmente fuera de servicio: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Descarga fallida: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "No pude conectar al servidor o conexión reiniciada, esperando 1 minuto y reintentando."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Descarga omitida: %(name)s debido a %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Descifrado comienza en: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Descifrado fallido: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Reintentando %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Obtención de información para %(name)s fallida | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Error ejecutando enlaces: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Falló la activación de %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Plugins activos: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Plugins desactivados: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Reconexión Fallida: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "¡Script de reconexión no encontrado!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Iniciando reconexión"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "¡Fallo al ejecutar script de reconexión!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Reconectado, nueva dirección IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "No hay suficiente espacio libre en el dispositivo"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "No pude iniciar sesión con cuenta %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Contraseña Incorrecta"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "La hora %s tiene un formato incorrecto, use: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "La cuenta %s no tiene tráfico suficiente, se comprobará otra vez en 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "La cuenta %s ha expirado, comprobando de nuevo en 1 hora"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Limite de descargas alcanzado"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s tiene un patrón inválido."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Error importando %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "No se cargó ningún proveedor"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Activa descarga directa en tu cuenta de Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList no puede ser limpiado."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Ajustes de cuenta eliminados, debido al nuevo formato de la configuración."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorización requerida (usuario:contraseña)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Por favor, introduce tu cuenta de %s o desactiva este plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Había Código HTML en el archivo Descargado (%s)... ¿error de redireccionamiento? La Descarga se reiniciará."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Archivo no disponible temporalmente"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: esperando entre descargas %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: esperando captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "El archivo descargado estaba vacío"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Clave de API inválida"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: No hay suficiente tráfico"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Tráfico excedido"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Tráfico compartido (descarga directa)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Ya estás descargando desde esta dirección IP, esperando 60 segundos"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Código de autenticación inválido, la descarga se reiniciará"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: No quedan espacios disponibles"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Necesitas una cuenta premium para este archivo"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Nombre de archivo inválido"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Error con descargas en paralelo, esperando 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "No has iniciado sesión."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Error de descifrado"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "No se proporcionó archivo de clave en la URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Código de error:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "El archivo no existe."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Los plugins se han actualizado, por favor reinicie pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins actualizados y cargados de nuevo"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "No hay disponibles actualizaciones de plugins"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "No hay actualizaciones de pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Nueva versión %s de pyLoad disponible ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Descarguela aquí: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "No se puede conectar con el servidor para actualizar"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nueva versión de %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Error mientras se actualizaba %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "No coincide la versión"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Descarga finalizada: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nueva Petición de Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Conteste con 'c %s texto al captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Por favor, añada primero su cuenta premium.to y reinicie pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Añadido %s desde HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s no instalado"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "No se puede activar %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Activado"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "No se ha activado ningún plugin de extracción"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Paquete %s encolado para su posterior extracción"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Comprobar paquete %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Extraer a %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "No se encontraron archivos para extraer"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "extrayendo"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Protegido con contraseña"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Contraseña errónea"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Borrando archivos %s"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Extracción finalizada"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Error de Archivo"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "El CRC no coincide"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Error Desconocido"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Error de configuración de usuario y grupo"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Puerto 9666 ya está en uso"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s créditos restantes"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "No se ha podido enviar la respuesta."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Su cuenta de CaptchaTrader no tiene créditos suficientes"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "No se ha encontrado lista de cifradores"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "La lista de cifradores está vacía"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Descarga finalizada: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nuevo CaptchaID desde carga: %s: %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Su Cuenta Captcha 9kw.eu no tiene suficientes créditos"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Código instalado para %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Código no ejecutable:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Error en %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Su cuenta de ExpertDecoders no suficientes créditos"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Por favor, añada primero su cuenta rehost.to y reinicie pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Por favor, agrega primero una cuenta válida de premiumize.me y reinicia pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d créditos restantes"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil y tesseract no están instalados y no hay cliente conectado para descifrar captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "No se obtuvieron resultados para el captcha en el tiempo asignado de ninguno de los plugins."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Configuración de usuario y grupo fallida: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "No hay cliente conectado para descifrar el captcha"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Paquete %(name)s agregado que contiene %(count)d enlaces"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Agregados %(count)d enlaces al paquete #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "No se detectó ningún motor de js, por favor instale Spidermonkey, ossp-js, pyv8 o rhino"
diff --git a/locale/es/LC_MESSAGES/pyLoadCli.po b/locale/es/LC_MESSAGES/pyLoadCli.po
index 1e9fc0af6..527f03c05 100644
--- a/locale/es/LC_MESSAGES/pyLoadCli.po
+++ b/locale/es/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Interfaz de Línea de Comandos"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Descargas:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Velocidad: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Tamaño: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Finalizado el: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "esperando: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Estado:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "pausado"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "ejecutando"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Velocidad total"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Ficheros en cola"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Total"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Menú:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Añadir enlaces"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Administrar Cola"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Administrar Recolector"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Detener/Reanudar Servidor"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Parar servidor"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Salir"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Por favor usa esta sintaxis: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Comprobando %d enlace(s):"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "El archivo no existe."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad ha finalizado"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Muestra el estado del servidor"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Muestra las descargas en cola"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Muestra las descargas en recolector"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Agregar paquetes a la cola"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Agrega un paquete al recolector"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Borrar Archivos de la Cola/Recolector"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Borrar Paquetes de la Cola/Recolector"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Mover Paquetes de la Cola al Recolector o viceversa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Reiniciar archivos"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Reiniciar paquetes"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Comprobar el estado en-linea, trabaja con el contenedor local"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Comprueba el estado en-linea de un contenedor"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pausar el servidor"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continuar descargas"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Alternar detener/reanudar"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "parar servidor"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista de comandos:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "No se puede escribir el archivo de configuración del usuario"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Necesitas py-openssl para conectar a este Núcleo pyLoad."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Dirección: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Puerto: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Usuario: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Contraseña: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Los datos de inicio de sesión son incorrectos."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "No se puede establecer la conexión a %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Necesitas py-openssl para conectar a este núcleo pyLoad."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Modo interactivo ignorado ya que pasaste algunas órdenes."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Agregar Paquete:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Introduce un nombre para el paquete nuevo"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paquete: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analizar los enlaces que quieres añadir."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Teclea %s cuando acabes."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Enlaces añadidos: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " volver al menú principal"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Administrar Paquetes:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Administrar Enlaces:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "¿Qué quieres mover?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "¿Qué quieres borrar?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "¿Qué quieres reiniciar?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Elige lo que quieres hacer o introduce el número de paquete."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "borrar"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "mover"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "reiniciar"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - anterior"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - siguiente"
diff --git a/locale/es/LC_MESSAGES/setup.po b/locale/es/LC_MESSAGES/setup.po
index 9595559bb..223755467 100644
--- a/locale/es/LC_MESSAGES/setup.po
+++ b/locale/es/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "s"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Bienvenido al Asistente de Configuración de pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Se revisará tu sistema y se hará una configuración básica para ejecutar pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "El valor entre corchetes [] siempre es el valor por defecto,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "en caso que no quieras cambiarlo o no estés seguro de que opción elegir, solo presiona entrar."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "No lo olvides: siempre puedes volver a ejecutar este asistente con el parámetro --setup ó -s, cuando inicies pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Si tienes algún problema con el asistente presiona Ctrl-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "para abortar y no permitirle volver a iniciarse automáticamente con pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Cuando estés listo para la revisión del sistema, presiona entrar."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Necesitas pycurl, sqlite y python 2.5, 2.6 ó 2.7 para ejecutar pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Por favor corrige esto y vuelve a ejecutar pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "El asistente de la instalación se cerrará."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "La revisión del sistema ha finalizado, presiona entrar para ver el informe de estado."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Estado ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "descifrando contenedor"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "conexión SSL"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "descifrado automático de captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "GUI"
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interfaz web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "extensión Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Características disponibles:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Características no disponibles: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto no disponible"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Necesario si quieres descifrar archivos contenedores."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL no disponible"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Esto es necesario si quieres establecer una conexión segura con el núcleo o la interfaz web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "SSL no es útil si solamente quieres acceder a pyLoad localmente."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "reconocimiento de captcha no disponible"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Solo necesario para algunos servidores y como usuario gratuito."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI no disponible"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "El Interfaz de Usuario Gráfica."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "motor de JavaScript no encontrado"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Necesario para algunos enlaces Click'N'Load. Instala Spidermonkey, ossp-js, pyv8 o rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Puedes cancelar el asistente ahora y corregir algunas dependencias si quieres."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "¿Desea continuar con el asistente?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "¿Quiere cambiar la ruta de configuración? Actualmente es %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Si usas pyLoad en un servidor o la partición primaria reside en una memoria flash interna, puede ser buena idea cambiarla."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "¿Cambiar la ruta de configuración?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "¿Quiere configurar los datos de acceso y la configuración básica?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Esto se recomienda en la primera ejecución."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "¿Realizar la configuración básica?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "¿Quiere configurar SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "¿Configurar SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "¿Quiere configurar la interfaz web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "¿Configurar la interfaz web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Configuración finalizada con éxito."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Pulse entrar para salir y reiniciar pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Revisión del sistema ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Tu versión de python es demasiado nueva, por favor usa Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Tu versión de python es demasiado antigua, por favor usa al menos Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Versión de Python: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Tu versión %s jinja2 instalada parece demasiado antigua."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Puedes continuar de manera segura aunque la interfaz web no funciona,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "por favor actualícela o desinstálela, pyLoad incluye una biblioteca jinja2 suficiente."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "Motor JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Configuración básica ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Los siguientes datos de acceso son válidos para CLI, GUI e interfaz web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Usuario"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Los clientes externos (GUI, CLI u otros) necesitan acceso remoto para trabajar a través de la red."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "No obstante, si sólo quieres utilizar interfaz web puedes deshabilitarlo para ahorrar ram."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Activar acceso remoto"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Idioma"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Directorio de descargas"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Máximas descargas paralelas"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "¿Usar reconectar?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Ubicación del script de reconexión"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Configuración de la Interfaz Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "¿Activar interfaz web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Dirección de escucha, si usas 127.0.0.1 o localhost, la interfaz web solo podrá ser accesible localmente."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Dirección"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Puerto"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "lapyLoad ofrece varios backends de servidor después de una breve explicación."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Servidor por defecto, la mejor opción si no sabes cual elegir."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Este servidor ofrece SSL y es una buena alternativa al integrado."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Puede ser usado por apache, lighttpd, requiere que lo configures, lo cual no es una tarea fácil."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Una alternativa muy rápida escrita en C, requiere libev y conocimientos de linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Obtenlo de aquí: https://github.com/jonashaag/bjoern, compílalo"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "y copia bjoern.so a module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "y copia bjoern.so a pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Atención: En algunos casos raros el servidor integrado no funciona, si notas problemas con la interfaz web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "vuelve aquí y cambia el servidor integrado por el servidor con hilos."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Servidor"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Configuración de SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Ejecuta estos comandos desde la carpeta de configuración pyLoad para crear los certificados ssl:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Si has terminado y todo acabo bien, podrás activar ssl ahora."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "¿Activar SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Elige una acción"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Crear/Editar usuario"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Listado de usuarios"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Eliminar usuario"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Salir"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Usuarios"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Configurando nuevo directorio de configuración, ¡la configuración actual no sera transferida!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Directorio de configuración"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Directorio de configuración cambiado, la instalación se cerrara, por favor reinicia para continuar."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Presiona Entrar para salir."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Ajuste del directorio de configuración fallido: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr "%s: OK"
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: perdido"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Contraseña: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "La contraseña es demasiado corta. Use al menos 4 símbolos."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Contraseña (de nuevo): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Las contraseñas no coinciden."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "sí"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "verdadero"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "v"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "no"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "falso"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Entrada no válida"
diff --git a/locale/fa/LC_MESSAGES/django.po b/locale/fa/LC_MESSAGES/django.po
index d53772faa..7d167ef88 100644
--- a/locale/fa/LC_MESSAGES/django.po
+++ b/locale/fa/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/fa/LC_MESSAGES/pyLoad.po b/locale/fa/LC_MESSAGES/pyLoad.po
index c2455afea..41ff60bc7 100644
--- a/locale/fa/LC_MESSAGES/pyLoad.po
+++ b/locale/fa/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/fa/LC_MESSAGES/pyLoadCli.po b/locale/fa/LC_MESSAGES/pyLoadCli.po
index 279daef1b..dd7471605 100644
--- a/locale/fa/LC_MESSAGES/pyLoadCli.po
+++ b/locale/fa/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " سرعت: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " حجم: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ؎ناسه: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "وضعیت:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "در حال اجرا"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "سرعت کل"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "فایل‌های درون صف"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "مجموع"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "منو:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " اضافه کردن لینک"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " ؚستن سرور"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " خروج"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "فایل وجود ندارد."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "ؚستن سرور"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "لیست دستورات:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "فایل ٟیکرؚندی کارؚر نمی‌تواند نو؎ته ؎ود"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "آدرس: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "درگاه: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "نام کارؚری: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "رمز عؚور: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "اطلاعات ورود ا؎تؚاه است."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "ؚرای اتصال ØšÙ‡ هسته‌ی pyLoad ØšÙ‡ py-openssl نیاز دارید."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "لینک‌های اضافه ؎ده: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "حذف"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "انتقال"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "راه‌اندازی مجدد"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - قؚلی"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - ؚعدی"
diff --git a/locale/fa/LC_MESSAGES/setup.po b/locale/fa/LC_MESSAGES/setup.po
index 2a1c9ad75..e9ad35a8a 100644
--- a/locale/fa/LC_MESSAGES/setup.po
+++ b/locale/fa/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "رمز عؚور: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po
index 04089267b..8dac03ec6 100644
--- a/locale/fi/LC_MESSAGES/django.po
+++ b/locale/fi/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/pyLoad.po b/locale/fi/LC_MESSAGES/pyLoad.po
index 857d06854..f50353be9 100644
--- a/locale/fi/LC_MESSAGES/pyLoad.po
+++ b/locale/fi/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/pyLoadCli.po b/locale/fi/LC_MESSAGES/pyLoadCli.po
index 6b2c3e606..d98e4636c 100644
--- a/locale/fi/LC_MESSAGES/pyLoadCli.po
+++ b/locale/fi/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "KomentorivikÀyttöliittymÀ"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s lataa:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "Nopeus:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "Koko:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "Valmistunut:"
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "Tunnus:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "odotetaan:"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Valikko:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "LisÀÀ linkkejÀ"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Jonon hallinta"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " KerÀÀjÀn hallinta"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Linkkien hallinta"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/setup.po b/locale/fi/LC_MESSAGES/setup.po
index 32aba57dd..f7fe897c7 100644
--- a/locale/fi/LC_MESSAGES/setup.po
+++ b/locale/fi/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index 09089992d..af432befa 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Nouvelle demande de captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Merci de lire le texte du captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "PyLoad redémarré"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "Eteint"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "SuccÚs"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "Allumé"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Êtes-vous vraiment sûr de vouloir quitter pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Relancer le lien"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Effacer le lien"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Merci d'entrer un nom de package."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Veuillez cliquer sur le cÎté droit du captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Une erreur est survenue."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Le dossier est vide"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Échoué"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Aucun captcha à lire."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Les mots de passe ne correspondent pas."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "ParamÚtres enregistrés."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nouveau répertoire"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Êtes-vous sûr de vouloir redémarrer pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "attend %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Téléchargements actifs"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Page principale"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "File d'attente "
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "Paquets"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Téléchargements"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuration"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nom"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Status"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Taille"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Progression"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Identifiant"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Nom utilisateur"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Mot de passe"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Veuillez réessayer."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Pour changer votre mot de passe ou ajouter un nouvel utilisateur, exécutez : "
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Supprimer les liens terminés"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Redémarrer les liens échoués"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Dossier :"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Mot de passe :"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Modifier le paquet"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Editer les détails du paquet ci-dessous."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Le nom du paquet."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Dossier"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nom du sous-dossier pour ces téléchargements."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Liste des mots de passes utilisés pour décompresser."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Valider"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Réinitialiser"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Vous êtes désormais déconnecté."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Chemin"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolu"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relatif"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nom"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "taille"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "derniÚre modification"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "dossier parent"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "pas de contenu"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Général"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Comptes"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Sélectionnez une section à partir du menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Valide jusqu'au"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Trafic restant"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Temps"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Nombre maximum en parallÚle"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Supprimer ? "
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "valide"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "invalide"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "oui"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "non"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Ajouter"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Ajouter un compte"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Entrez vos informations de compte pour utiliser les fonctionnalités premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Votre nom d'utilisateur."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Le mot de passe pour ce compte."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Choisissez l'hébergeur pour ce compte."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Démarrer"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "préc"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "suiv"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fin"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Nouvelles"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "SystÚme"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr "Python :"
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "OS :"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "Version de pyLoad :"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Dossier d'Installation :"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Dossier de configuration :"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Dossier de téléchargement :"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Espace libre :"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Langue :"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Port de l'interface web :"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Port de l'interface à distance :"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Configurer"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Gestionnaire de fichiers"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Ajouter un paquet"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Recopiez vos liens ou envoyez un conteneur."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Le nom du nouveau paquet."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Liens"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Collez vos liens ici ou n'importe quel texte, et cliquez sur le bouton « Filtrer les URL »."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrer les URL"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Mot de passe de l'archive RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Fichier"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Envoyer un conteneur."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Destination"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Lecture du catcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Le captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Texte"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Veuillez taper le texte du captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Fermer"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interface web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Mise à jour de pyLoad disponible !"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins mis à jour, redémarrez !"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha en attente"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Déconnexion"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administration"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Information"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Veuillez vous connecter !"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Arrêter"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Annuler"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Téléchargement :"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Reconnexion :"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Vitesse :"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Actif :"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Recharger la page"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "chargement"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Revenir en haut"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Quitter pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Redémarrer pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Pour ajouter un utilisateur ou modifier un mot de passe, utilisez :"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Important : L'utilisateur Admin a tous les droits !"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Modifier le mot de passe"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "modifier"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Entrez votre mot de passe actuel et celui souhaité."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Utilisateur"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Mot de passe actuel"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nouveau mot de passe"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Le nouveau mot de passe."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nouveau mot de passe (répéter)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "S'il vous plaît répétez le nouveau mot de passe."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Vous n'avez pas la permission d'accéder à cette page."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Répertoire de téléchargement introuvable."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "Illimité"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Lancez pyload.py -s pour accéder au paramétrage."
diff --git a/locale/fr/LC_MESSAGES/pyLoad.po b/locale/fr/LC_MESSAGES/pyLoad.po
index cd55bd545..fe56c2bfa 100644
--- a/locale/fr/LC_MESSAGES/pyLoad.po
+++ b/locale/fr/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Signal d'arrêt reçu"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad est déjà lancé avec le pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Echec lors du changement de groupe: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Echec lors du changement d'utilisateur: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "dossier des logs"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Démarrage"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Utilisation du dossier principal : %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto pour décoder les fichiers conteneurs"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "dossier des fichiers temporaires"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "dossier des téléchargements"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL pour les connexions sécurisées"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Déplacement des anciennes configurations utilisateur vers la BDD"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Vérifiez vos identifiants avec ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Tous les liens ont été supprimés"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Temps de téléchargement : %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Espace libre : %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Activation des comptes ..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Activation des Extensions..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad est opérationnel"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "redémarrage de pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad se termine"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installation %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "impossible de trouver %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "impossible de créer %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "arrêt..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "erreur lors de l'arrêt"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad a été tué depuis le Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "La base de données des fichiers est incompatible et a été supprimé."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "La base de données NE peut PAS être convertie."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "La base de données a été convertie de la v2 vers la v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "La base de données a été convertie de la v3 vers la v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Conversion de l'ancienne BDD Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "fini"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "hors ligne"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "en ligne"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "en file d'attente"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "ignoré"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "en attente"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temp. hors ligne"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "démarrage"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "échoué"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "annulé"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "décryptage"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personnalisé"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "téléchargement en cours"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "traitement en cours"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "inconnu"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paquet terminé : %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Utilise SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Erreur du backend distant: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Démarre %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Échec du chargement du backend %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "attend %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certificats SSL non trouvés."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Désolé, nous avons arrêté le support du démarrage de %s directement dans pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Vous pouvez utiliser le serveur \"threaded\" qui offre de bonnes performances et le ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "bien sur vous pouvez toujours utiliser vos %s existants avec pyLoads fastcgi server"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "les exemples de configurations sont localisés dans le répertoire module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "les exemples de configurations sont localisés dans le répertoire pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Ne peut utiliser %(server)s, python-flup n'est pas installé!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Erreur lors de l'importation du serveur léger : %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Vous devez télécharger et compiler bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Copiez le fichier boern.so dans le dossier module/lib, ou utilisez setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Copiez le fichier boern.so dans le dossier pyload/lib, ou utilisez setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Évidemment vous devez être familier avec Linux et savoir comment compiler un logiciel"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Serveur placé en mode “threaded”, en raison de problÚmes de performances connus sous Windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Ce serveur ne permet pas la connexion SSL, vous devriez envisager d'utiliser le mode “threaded” à la place"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Démarrage serveur web interne: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Démarrage serveur web SSL : %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Démarrage serveur web : %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Démarrage serveur webfastcgi : %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Démarrage du serveur léger (bjoern) : %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Vous n'avez pas la permission d'accéder à cette page."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Répertoire de téléchargement introuvable."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "Illimité"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non disponible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Lancez pyload.py -s pour accéder au paramétrage."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Téléchargement par blocs échoué, repli vers une seule connexion | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Le téléchargement commence : %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Téléchargement terminé : %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Il manque une fonction au plugin %s."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Abandon du téléchargement : %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Téléchargement redémarré : %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Le téléchargement est hors-ligne : %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Le téléchargement est temporairement hors ligne: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Téléchargement échoué : %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Impossible de se connecter à l'hÎte ou connexion perdue, prochain essai dans une minute."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Téléchargement ignoré : %(name)s à cause de %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Démarrage du décryptage : %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Décryptage échoué : %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Nouvelle tentative en cours %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Échec de la collecte des infos pour %(name)s | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Erreur de l'exécution du hook : %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Impossible d'activer %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Plugins activés: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Plugins désactivés: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "La reconnexion a échoué : %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Script de reconnexion non trouvé !"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Lancement de la reconnexion"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Echec d'exécution du script de reconnexion !"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Reconnecté, nouvelle IP : %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Il n'y a pas assez de place sur le périphérique"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Impossible de s'identifier avec le compte %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Mauvais mot de passe"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Votre heure %s utilise un format incorrect, utilisez 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Le compte %s n'a pas assez de trafic, re-vérification dans 30 minutes"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Le compte %s a expiré, re-vérification dans 1H"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Limite de téléchargement atteinte"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s a un format invalide."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Erreur d'importation %(name)s : %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Aucun hébergeur chargé"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Activez le téléchargement direct dans votre compte Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "Le fichier links.txt ne peut être vidé."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Paramétrage du compte supprimé, du fait d'un nouveau format de configuration."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorisation requise (identifiant:mot de passe)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Veuillez entrer votre compte %s ou désactivez ce plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Il y avait du code HTML dans le fichier téléchargé (%s)... erreur de redirection ? Le téléchargement va redémarrer."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Fichier temporairement indisponible"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload : attente de %d s entre chaque téléchargements."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload : attendre le captcha pendant %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Le fichier téléchargé est vide"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "La clé de l'API est invalide"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s : il ne reste pas assez de trafic"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Le trafic a été dépassé"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare : partage du trafic (téléchargement direct)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Un téléchargement est déjà en cours depuis cette adresse, 60 secondes d'attente"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Code d'authentification invalide, le téléchargement va redémarrer"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom : aucun slot disponible"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Vous avez besoin d'un compte premium pour ce fichier"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Le nom du fichier est invalide"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Erreur de téléchargement parallÚle, attente pendant 60 secondes."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Vous n'êtes pas identifiés."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Le déchiffrement à échoué"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Aucune clé de fichier fournie dans l'URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Code d'erreur :"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Le fichier n'existe pas."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Les plugins ont été mis à jour, veuillez redémarrer pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins mis à jour et rechargés"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Aucune mise à jour pour les plugins"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Aucune mise à jour pour pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Nouvelle version %s disponible de pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Téléchargez-le ici : http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Incapable de se connecter au serveur pour les mises à jour"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nouvelle version de %(type)s | %(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Erreur lors de la mise à jour de %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Les versions discordent"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Téléchargement terminé : %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nouvelle demande de captcha : %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Répondre avec ' le texte c %s sur le captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Veuillez tout d'abord ajouter votre compte premium.to et redémarrez pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Ajout de %s à partir du HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s non installé"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Impossible d'activer %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Activé"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Pas de plugin d'extraction activé"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Le paquet %s est mis dans la file d'attente pour une extraction ultérieure"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Vérification du paquet %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Extraction vers %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Aucun fichier trouvé pour l'extraction"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "extraction en cours"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Mot de passe protégé"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Mot de passe incorrect"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Suppression de %s fichiers"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Extraction terminée"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Erreur d'archive"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC différents"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Erreur inconnue"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "La définition de l'utilisateur et du groupe a échoué"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load : port 9666 déjà en cours d'utilisation"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s crédits restants"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Impossible d'envoyer une réponse."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Votre compte CaptchaTrader n'a pas assez de crédits"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Liste des crypteurs non trouvée"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "La liste des crypteurs est vide"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Téléchargement fini : %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nouveau CaptchaID de l'upload: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Votre compte de captcha 9kw.eu n'a pas assez de crédits"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Scripts installés pour %s : "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script non exécutable :"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Erreur dans %(script)s : %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Votre compte ExpertDecoders n'a pas assez de crédits"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Veuillez d'abord ajouter votre compte rehost.to et redémarrez pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Veuillez d'abord ajouter un compte valide premiumize.me et redémarrez pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d crédits restants"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil et tesseract ne sont pas installés et il n'y a pas de client connecté pour le déchiffrement des captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Pas de résultats pour le captcha obtenu dans le temps impartis par aucun des plugins."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "La définition de l'utilisateur et du groupe a échoué :: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Pas de Client connecté pour le décryptage captcha"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Ajout package %(name)s contenant %(count)d liens"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Ajout de %(count)d liens au paquet #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Aucun moteur JS détecté, s'il vous plaît installez soit SpiderMonkey, ossp-js, pyv8 ou rhino"
diff --git a/locale/fr/LC_MESSAGES/pyLoadCli.po b/locale/fr/LC_MESSAGES/pyLoadCli.po
index 43075a3a1..9fd31d4cd 100644
--- a/locale/fr/LC_MESSAGES/pyLoadCli.po
+++ b/locale/fr/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Interface en ligne de commande"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s téléchargement(s) :"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Vitesse : "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Taille : "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Fini dans : "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID : "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "en attente : "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Statut:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "en pause"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "en cours"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Vitesse totale"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Fichiers en attente"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Menu :"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Ajouter des liens"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "Gérer la file d'attente"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "Gérer le collecteur"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "Mettre en pause/Restaurer le serveur"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Stopper le serveur"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Quitter"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Utilisez cette syntaxe : add <Nom paquet> <lien> <lien2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Vérification de %d liens :"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Le fichier n'existe pas."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad a quitté"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Affiche le statut du serveur"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "affiche les téléchargements en file d'attente"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "affiche les téléchargements dans le collecteur"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Ajouter le paquet à la file d'attente"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Ajouter le paquet au collecteur"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Supprimer les fichiers de la file d'attente/du collecteur"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Supprimer les paquets de la file d'attente/du collecteur"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Déplacer les paquets de la file d'attente au collecteur ou vice versa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Redémarrer les fichiers"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Redémarrer les paquets"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Vérifie le statut en ligne (fonctionne avec un conteneur local)"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Vérifie le statut en ligne d'un fichier conteneur"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Mettre le serveur en pause"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continuer les téléchargements"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Basculer pause/reprendre"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "stopper le serveur"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Liste des commandes :"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Impossible d'écrire le fichier de configuration"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Vous avez besoin de py-openssl pour vous connecter à ce Core pyLoad."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adresse: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port : "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Nom d'utilisateur: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Mot de passe : "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Les identifiants sont incorrects."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Impossible d'établir la connexion à %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Vous avez besoin de py-openssl pour vous connecter au moteur de Pyload."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Mode interactif ignoré jusqu'à ce que vous entriez des commandes."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Ajouter un paquet:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Entrez un nom pour le nouveau paquet"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paquet : %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analyse des liens que vous voulez ajouter."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Tapez %s une fois fini."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Liens ajoutés : "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " retour au menu principal"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Gérer les paquets:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Gérer les liens:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Que voulez-vous déplacer ?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Que voulez-vous supprimer ?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Que voulez-vous redémarrer ?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Choisissez ce que vous voulez faire ou entrez le numéro du paquet."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "supprimer"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "déplacer"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "redémarrer"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - précédent"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - suivant"
diff --git a/locale/fr/LC_MESSAGES/setup.po b/locale/fr/LC_MESSAGES/setup.po
index 5afb2617a..bdb5c1cd8 100644
--- a/locale/fr/LC_MESSAGES/setup.po
+++ b/locale/fr/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "o"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Bienvenue dans l'Assistant de Configuration de pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Votre systÚme va être vérifié et subir un réglage de base afin de lancer pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "La valeur entre crochets [] est toujours la valeur par défaut,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "dans le cas où vous ne voulez pas la changer ou vous ne savez pas quoi choisir, appuyez sur entrée."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "N'oubliez pas : vous pouvez toujours relancer cet assistant avec l'option --setup ou -s, lorsque vous démarrez pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Si vous avez un problÚme avec cet assistant appuyer sur CTRL-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "pour annuler et ne plus le laisser démarrer automatiquement avec pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Lorsque vous êtes prêt pour la vérification du systÚme, appuyez sur entrée."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Vous avez besoin de pycurl, sqlite et python 2.5, 2.6 ou 2.7 pour exécuter pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Merci d'effectuer les corrections nécessaires et de relancer pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Le configurateur va se fermer."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Vérification du systÚme fini, appuyer sur entrée pour voir votre rapport de status."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "décryptage des conteneurs"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "connexion ssl"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "décryptage automatique des catchas"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interface web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "extension Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Fonctions disponibles :"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Fonctions indisponibles : "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto n'est pas disponible"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Vous en avez besoin si vous souhaitez décrypter les fichiers conteneurs."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL n'est pas disponible"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Vous en avez besoin si vous souhaitez établir une connexion sécurisé avec le logiciel principal ou l'interface web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Si vous souhaitez accéder à pyLoad uniquement en local, ssl n'est pas utile."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "La Reconnaissance des catchas n'est pas disponible"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Ceci est nécessaire uniquement pour certains hÎtes en tant qu'utilisateur gratuit."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Interface graphique non disponible"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "L'Interface Graphique."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "pas de moteur JavaScript trouvé"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Vous en aurez besoin pour certains liens Click'N'Load. Installez SpiderMonkey, ossp-js, pyv8 ou Rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Si vous le souhaitez, vous pouvez maintenant sortir du configurateur et corriger certaines dépendances."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Poursuivre l'installation ?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Vous voulez changer le chemin de la configuration ? Le chemin actuel est %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Si vous utilisez pyLoad sur un serveur ou si la partition home se trouve sur un disque flash il est conseillé de le modifier."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Changer le chemin de la configuration?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Vous voulez configurer les données de connexion et les paramÚtres de base ?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Ceci est recommandé pour la premiÚre exécution."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Faire le réglage de base ?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Vous voulez configurer ssl?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Configurer ssl?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Vous voulez configurer l'interface Web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Configurer l'interface Web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Installation terminée avec succÚs."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Appuyez sur entrée pour quitter et redémarrer pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Vérification du SystÚme ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Votre version de python est trop récente, Merci d'utiliser Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Votre version de python est trop ancienne, merci d'utiliser au moins Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Version de Python : OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Vous avez installé jinja2 version %s, elle semble trop ancienne."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Vous pouvez continuer en toute sécurité mais si l'interface web ne fonctionne pas,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "mettez à jour ou désinstallez la, pyLoad inclus une librairie jinja2 suffisante."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "moteur JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Configuration de base ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Les données de connexion suivantes sont valables pour le CLI, GUI et l'interface Web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Nom utilisateur"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Les clients externes (GUI, CLI ou autre) nécessitent un accÚs distant pour fonctionner sur le réseau."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Cependant, si vous souhaitez uniquement utiliser l'interface web vous pouvez le désactiver pour économiser la RAM."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Activer l'accÚs distant"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Langue"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Dossier de téléchargement"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Téléchargements parallÚles max"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Utiliser la reconnexion ?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Emplacement du script de reconnexion"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Configuration de l'interface Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Activer l'interface Web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adresse d'écoute, si vous utilisez 127.0.0.1 ou localhost, l'interface Web sera accessible uniquement localement."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adresse"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad offre plusieurs serveur d'arriÚre plan, suivez maintenant une brÚve explication."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Serveur par défaut ; c'est le meilleur choix si vous ne savez pas lequel choisir."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Ce serveur permet l'utilisation de SSL ; c'est une bonne alternative à builtin."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Peut être utilisé par apache, lighttpd, mais vous oblige à les configurer, ce qui n'est pas trÚs facile."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Une alternative trÚs rapide écrite en C, nécessite libev et des connaissances en linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Télécharger le ici : https://github.com/jonashaag/bjoern, compilez-le"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "et copiez bjoern.so vers module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "et copiez bjoern.so vers pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Attention : dans certain cas le serveur intégré ne marche pas, si vous avez des problÚmes avec l'interface web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "revenez ici et changez le serveur de “intégré” à “threaded”."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Serveur"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Configuration de SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Exécutez ces commande depuis le répertoire de configuration de pyLoad pour générer les certificats SSL :"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Si vous avez terminé et que tout s'est bien passé, vous pouvez activer le ssl maintenant."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Activer le SSL ?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Sélectionnez une action"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Créer/modifier l'utilisateur"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Lister les utilisateurs"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Supprimer un utilisateur"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Quitter"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Utilisateurs"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Définition d'un nouveau dossier de configuration, la configuration actuelle ne sera pas transférée !"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Dossier de configuration"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Dossier de configuration modifié, l'assistant va se fermer, veuillez le relancer ensuite."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Appuyez sur entrée pour quitter."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "La définition du dossier de configuration a échoué : %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr "%s : OK"
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s : absent"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Mot de passe : "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Le mot de passe est trop court. Utilisez au moins 4 caractÚres."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Mot de passe (encore) : "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Les mots de passe ne correspondent pas."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "oui"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "vrai"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "v"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "non"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "faux"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Entrée non valide"
diff --git a/locale/ga/LC_MESSAGES/django.po b/locale/ga/LC_MESSAGES/django.po
index a4a148192..617ce8b23 100644
--- a/locale/ga/LC_MESSAGES/django.po
+++ b/locale/ga/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/ga/LC_MESSAGES/pyLoad.po b/locale/ga/LC_MESSAGES/pyLoad.po
index c86006569..e3c89cc40 100644
--- a/locale/ga/LC_MESSAGES/pyLoad.po
+++ b/locale/ga/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/ga/LC_MESSAGES/pyLoadCli.po b/locale/ga/LC_MESSAGES/pyLoadCli.po
index e383ae6f0..67003e6d9 100644
--- a/locale/ga/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ga/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/ga/LC_MESSAGES/setup.po b/locale/ga/LC_MESSAGES/setup.po
index 006a7f1de..a03a53855 100644
--- a/locale/ga/LC_MESSAGES/setup.po
+++ b/locale/ga/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/gl/LC_MESSAGES/django.po b/locale/gl/LC_MESSAGES/django.po
index 50f453f9e..44713bac7 100644
--- a/locale/gl/LC_MESSAGES/django.po
+++ b/locale/gl/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Solicitude de Novo Captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Por favor lea o texto do captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad reiniciouse"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Éxito"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Está seguro de que quere saír de pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Reiniciar Ligazón"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Borrar Ligazón"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Por favor, introduza un nome ó paquete."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Por favor, prema á dereita do captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Produciuse un erro."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "O cartafol está baleiro"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Fallou"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Non hai Captchas para ler."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Os contrasinais non coinciden."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Parámetros gardados."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Novo cartafol"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Está seguro de que quere reiniciar pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperando %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Descargas Activas"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Inicio"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Descargas"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Rexistros"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuración"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Información"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Progreso"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "O seu nome de usuario e contrasinal non coinciden. Por favor, inténteo de novo."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Para reiniciar os seus datos de inicio de sesión ou engadir un usuario, execute:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Borrar Terminados"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Reiniciar Falidos"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Cartafol:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Contrasinal:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Editar Paquete"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Editar os detalles do seguinte paquete."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Nome do paquete."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nome do subcartafol para estas descargas."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lista de contrasinais usadas para descomprimir."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Reiniciar"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Pechouse a sesión correctamente."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Ruta"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absoluto"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativo"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nome"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "tamaño"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tipo"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "última modificación"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "directorio pai"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "sen contido"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Engadidos"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Elixa unha selección do menú"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Válido ata"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Tráfico restante"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tempo"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Máx. en Paralelo"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Borrar?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "inválido"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "sí"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "non"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Engadir Conta"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Introduza os datos da súa conta para usar características premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "O seu nome de usuario."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "O contrasinal para esta conta."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Tipo"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Elixa un servidor para a súa conta."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Iniciar"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "anterior"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "seguinte"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fin"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Novidades"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Soporte"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistema"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "S.O.:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "versión de pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Cartafol de Instalación:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Cartafol de Configuración:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Cartafol de Descarga:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Espazo Libre:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Idioma:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Porto da Interface Web:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Porto da Interface Remota:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Instalar"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Administrador de ficheiros"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Engadir Paquete"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Pegue as súas ligazóns ou suba un contedor de ligazóns."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Nome do novo paquete."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Ligazóns"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Pegue as súas ligazóns ou calquera texto aquí e prema o botón de filtrar."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrar urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Contrasinal para o arquivo RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Ficheiro"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Cargar un contedor de ligazóns."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Lendo captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "O captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Texto"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Introduza o texto no captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interface web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Hai unha actualización de pyLoad dispoñible!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Engadidos actualizados, por favor reinicia!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Esperando captcha"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Saír"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrar"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Información"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Por favor, inicie sesión!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Deter"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Descarga:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Volverse a conectar:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Velocidade:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Activo:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Recargar páxina"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "cargando"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Volver ó principio"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Saír de pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Reiniciar pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Para engadir un usuario ou cambiar contrasinais empregue:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Importante: O usuario Administrador sempre ten todos os permisos!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Cambiar Contrasinal"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Administrador"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Permisos"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "cambiar"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Introduza o seu contrasinal actual e a desexado."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Usuario"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Contrasinal actual"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Novo contrasinal"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "O novo contrasinal."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Novo contrasinal (repetir)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Por favor, repita o seu novo contrasinal."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Non ten permisos para acceder a esta páxina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Non se encontra o directorio de descarga."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non dispoñible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Execute pyload.py -s para acceder á instalación."
diff --git a/locale/gl/LC_MESSAGES/pyLoad.po b/locale/gl/LC_MESSAGES/pyLoad.po
index aadbdf35c..bca98364f 100644
--- a/locale/gl/LC_MESSAGES/pyLoad.po
+++ b/locale/gl/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Sinal de saída recibida"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad xa está executándose con pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Cambio de grupo falido: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Cambio de usuario falido: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "cartafol para os rexistros"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Comezando"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Usando directorio de inicio: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto para descodificar contedores de ligazóns"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "cartafol para ficheiros temporais"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "cartafol para as descargas"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL para conexión segura"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Movendo a antiga configuración de usuario á BD"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Por favor, comprobe os seus datos de inicio de sesión con ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Todas as ligazóns foron eliminadas"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Tempo de descarga: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Espazo libre: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Activando Contas..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Activando Engadidos..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad está funcionando"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "reiniciando pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad pechouse"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Instalar %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "non se puido atopar %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "no se puido crear %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "apagando..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "produciuse un erro mentres se apagaba"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyload terminado dende o Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "O ficheiro da base de datos eliminouse por ser dunha versión incompatible."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "O ficheiro da base de datos NON se puido converter."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "A base de datos converteuse da v2 á v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "A base de datos converteuse da v3 á v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Convertendo a antiga BD Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "finalizado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "fora de liña"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "en liña"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "na cola"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "omitido"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "esperando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temporalmente fora de servicio"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "comezando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "falido"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "abortado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "descifrando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personalizado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "descargando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "procesando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "descoñecido"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paquete finalizado: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "Usando SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Erro remoto do motor: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Iniciando %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Fallou ó cargar o motor %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "esperando %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certificados SSL non encontrados."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Sentímolo, pero retirámolo soporte para iniciar %s directamente en pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Pode empregar o servidor con fíos que ofrece un bo rendemento e ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "por suposto pode seguir empregando o seu %s existente co servidor fastcgi de pyLoad"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "as configuracións de exemplo encóntranse no directorio module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "as configuracións de exemplo encóntranse no directorio pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Non pode usar %(server)s, python-flup non está instalado!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Erro importando servidor lixeiro: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Debe descargar e compilar bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Copie o módulo boern.so ó cartafol module/lib ou use a instalación setup.py"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Copie o módulo boern.so ó cartafol pyload/lib ou use a instalación setup.py"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Evidentemente, debe estar familiarizado con linux e saber como compilar software"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Servidor en modo threaded, debido a problemas de rendemento coñecidos en windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Este servidor non ofrece SSL, por favor considere usar o servidor con fíos no seu lugar"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web incorporado: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web SSL con fíos: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Iniciando servidor web con fíos: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Iniciando servidor fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Iniciando servidor web lixeiro (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Non ten permisos para acceder a esta páxina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Non se encontra o directorio de descarga."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non dispoñible"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Execute pyload.py -s para acceder á instalación."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Descarga por partes falida, conexión única de emerxencia| %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Iniciando descarga: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Descarga finalizada: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "O engadido %s non atopa ningunha función."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Descarga cancelada: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Descarga reiniciada: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "A descarga está fóra de servizo: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "A descarga está temporalmente fora de servizo: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Descarga falida: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "No se puido conectar ó servidor ou conexión reiniciada, esperando 1 minuto e tentando de novo."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Descarga omitida: %(name)s debido a %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Comeza o descifrado: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Descifrado falido: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Reintentando %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "A Obtención de información para %(name)s fallou | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Erro executando as ligazóns: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Fallou a activación de %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Engadidos activados: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Engadidos desactivados: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Reconexión Falida: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Non se atopou o script de reconexión!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Iniciando reconexión"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Fallo executando o script de reconexión!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Conectado de novo, nova dirección IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Non hai suficiente espazo libre no dispositivo"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Non se puido iniciar sesión coa conta %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Contrasinal erróneo"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "A hora %s ten un formato incorrecto, use: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "A conta %s non ten tráfico suficiente, comprobarase outra vez en 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "A conta %s expirou, compróbea de novo en 1h"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Limite de descargas alcanzado"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s ten un patrón inválido."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Erro importando %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Non se cargou ningún servidor"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Active a descarga directa na súa conta de Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "A lista de ligazóns non se puido limpar."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Configuración da conta borrada, debido ó formato da nova configuración."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorización requirida (usuario:contrasinal)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Arquivo non dispoñible temporalmente"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: esperando entre descargas %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: esperando captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "O arquivo descargado estaba baleiro"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Clave de API inválida"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Non queda suficiente tráfico"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Tráfico excedido"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Tráfico compartido (descarga directa)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Xa está descargando dende esta dirección ip, esperando 60 segundos"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Código de Autenticación Inválido, a descarga reiniciarase"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: No quedan espazos dispoñibles"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Precisa dunha conta premium para este arquivo"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Nome do arquivo inválido"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Erro con descargas en paralelo, esperando 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Non iniciou sesión."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "O ficheiro non existe."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Os engadidos foron actualizados, por favor reinicie pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Engadidos actualizados e cargados de novo"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Non hai actualizacións de engadidos dispoñibles"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "No hai actualizacións para pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Nova versión %s de pyLoad dispoñible ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Obtéñaa aquí: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Imposible conectar co servidor para actualizacións"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nova versión de %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Erro mentres se actualizaba %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Non coincide a versión"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Descarga finalizada: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nova Petición de Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Responda con 'c %s texto ó captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Engadido %s dende HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s non instalado"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Non se puido activar %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Activado"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Non se activaron os engadidos de extracción"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Paquete %s posto na cola para a súa extracción posterior"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Comprobar paquete %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Extraer a %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "extraendo"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Protexido con contrasinal"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Contrasinal erróneo"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Borrando ficheiros %s"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Extracción finalizada"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Erro de Arquivo"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "O CRC non coincide"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Erro Descoñecido"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Configuración de Usuario e Grupo falida"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: O porto 9666 xa está en uso"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s créditos restantes"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "A súa conta de CaptchaTrader non ten créditos suficientes"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Descarga finalizada: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Scripts instalados para %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script non executable:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Erro en %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Por favor, engada primeiro a súa conta rehost.to e reinicie pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil e tesseract non están instalados e no hai cliente conectado para descifrar o captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Non se obtiveron resultados para o captcha no tempo asignado de ningún dos engadidos."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Configuración de Usuario e Grupo falida: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Non hai cliente conectado para descifrar o captcha"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Engadido o paquete %(name)s que contén %(count)d ligazóns"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Engadidos %(count)d ligazóns ó paquete #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Non se detectou ningún motor de js, por favor instale Spidermonkey, ossp-js, pyv8 ou rhino"
diff --git a/locale/gl/LC_MESSAGES/pyLoadCli.po b/locale/gl/LC_MESSAGES/pyLoadCli.po
index 4b1bbb714..deae3325f 100644
--- a/locale/gl/LC_MESSAGES/pyLoadCli.po
+++ b/locale/gl/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Interface de Liña de Comandos"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Descargas:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Velocidade: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Tamaño: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Finalizado en: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "esperando: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Menú:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Engadir Ligazóns"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Administrar Cola"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Administrar Colector"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Retomar/Deter Servidor"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Parar Servidor"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Saír"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Por favor use esta sintaxe: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Comprobando %d ligazóns:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "O ficheiro non existe."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad terminou"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Amosa-lo estado do servidor"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Amosa-las descargas en cola"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Amosa-las descargas en colector"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Engadir paquetes á cola"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Engadir paquetes ó colector"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Borrar Ficheiros da Cola/Colector"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Borrar Paquetes da Cola/Colector"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Mover os Paquetes da Cola ó Colector ou viceversa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Reiniciar ficheiros"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Reiniciar paquetes"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Comprobar o estado da conexión, traballa cun contedor local"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Comprobar o estado en liña dun contedor"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pausa o servidor"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continuar as descargas"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Alternar deter/continuar"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "finalizar servidor"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista de comandos:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Resultou imposíbel escribir no ficheiro de configuración do usuario"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Necesita py-openssl para conectarse a este Núcleo de pyLoad."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Enderezo: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Porto: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Nome de usuario: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Contrasinal: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Os datos de inicio de sesión son incorrectos."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Non se puido establecer a conexión a %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Necesita py-openssl para conectarse a este núcleo pyLoad."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Modo interactivo ignorado, xa que pasou algúns comandos."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Engadir Paquete:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Introduza un nome para o novo paquete"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paquete: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Procesar as ligazóns que desexe engadir."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Teclee %s cando remate."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Ligazóns engadidos: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " volver ó menú principal"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Administrar Paquetes:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Administrar Ligazóns:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Que quere mover?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Que quere borrar?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Que quere reiniciar?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Elixa o que queira facer ou introduza o número do paquete."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "borrar"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "mover"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "reiniciar"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - anterior"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - seguinte"
diff --git a/locale/gl/LC_MESSAGES/setup.po b/locale/gl/LC_MESSAGES/setup.po
index b04099b35..86276ecf3 100644
--- a/locale/gl/LC_MESSAGES/setup.po
+++ b/locale/gl/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "s"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Benvido ó Asistente de Configuración de pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Revisarase o seu sistema e farase unha configuración básica para executar pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "O valor entre corchetes [] sempre é o valor por defecto,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "en caso de que non queira cambialo ou non estea seguro de que opción elixir, só prema entrar."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Non o esqueza: Sempre pode volver a executar este asistente co parámetro --setup ou -s cando inicie pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Se ten algún problema co asistente presione Ctrl-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "para abortar e non permitirlle volver a iniciarse automaticamente con pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Cando estea listo para a comprobación do sistema, prema entrar."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Precisa pycurl, sqlite e python 2.5, 2.6 ou 2.7 para executar pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Por favor corrixa isto e volva a executar pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "O asistente da instalación pecharase."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "A comprobación do sistema concluíu, prema entrar para ver o informe de estado."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Estado ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "descifrando contedor"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "conexión ssl"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "descifrado automático de captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interface web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "extensión Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Características dispoñibles:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Características non dispoñibles: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto non dispoñible"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Precisa disto se quere descifrar arquivos de contedores."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL non dispoñible"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Isto é necesario se quere establecer unha conexión segura co núcleo ou a interface web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "SSL non é útil se tan só quere acceder a pyLoad localmente."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "recoñecemento de Captcha non dispoñible"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Só necesario para algúns servidores e como usuario gratuíto."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Gui non dispoñible"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "A Interface de Usuario Gráfica."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "motor de JavaScript non atopado"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Precisará disto para algunhas ligazóns Click'N'Load. Instale Spidermonkey, ossp-js, pyv8 ou rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Pode cancelar o asiste agora e corrixir algunhas dependencias se quere."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Desexa continuar co asistente?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Quere cambiar a ruta de configuración? Actualmente é %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Si usa pyLoad en un servidor ou a partición primaria reside nunha memoria flash interna, pode ser boa idea cambiala."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Cambia-la ruta de configuración?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Quere configurar os datos de acceso e a configuración básica?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Isto recoméndase na primeira execución."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Facer a configuración básica?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Quere configurar ssl?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Configurar ssl?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Quere configurar a interface web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Configurar a interface web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Configuración rematada correctamente."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Prema entrar para saír e reiniciar pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Comprobación do sistema ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "A súa versión de python é demasiado nova, por favor use Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "A súa versión de python é demasiado antiga, por favor use polo menos Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Versión de Python: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "A súa versión %s de jinja2 instalada parece demasiado antiga."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Pode continuar de maneira segura pero se a interface web non funcionara,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "por favor actualícea ou elimínea, pyLoad inclúe unha biblioteca jinja2 suficiente."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "Motor JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Configuración Básica ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Os seguintes datos de acceso son válidos para CLI, GUI e interface web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Os clientes externos (GUI, CLI ou outros) precisan acceso remoto para traballar a través da rede."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Non obstante, se só quere utilizar interface web pode desactivalo para aforrar ram."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Activar acceso remoto"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Cartafol de descargas"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Máximas descargas paralelas"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Usar reconectar?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Lugar do script de reconexión"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Configuración da Interface Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Activar a interface web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Dirección de escoita, se usa 127.0.0.1 ou localhost, a interface web só poderá ser accesible localmente."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad ofrece varias infraestruturas de servidores, a continuación unhas pequenas explicacións."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "O servidor por defecto, a mellor opción se non sabe cal elixir."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Este servidor ofrece SSL e é unha boa alternativa ó integrado."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Pode usalo apache, lighttpd, require que o configure, o cal non é unha tarefa fácil."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Unha alternativa moi rápida escrita en C, require libev e coñecementos de linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Obtéñao aquí: https://github.com/jonashaag/bjoern, e compíleo"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "e copie bjoern.so a module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "e copie bjoern.so a pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Atención: Nalgúns casos raros o servidor integrado non funciona, se nota problemas coa interface web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "volva aquí e cambie o servidor integrado polo servidor con fíos."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Configuración de SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Execute estes comandos dende o cartafol de configuración de pyLoad para crear os certificados ssl:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Se xa terminou e todo rematou ben, poderá activar ssl agora."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Activar SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Elixa unha acción"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Crear/Editar usuario"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Listar usuarios"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Eliminar usuario"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Saír"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Usuarios"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Configurando o novo directorio de configuración, os parámetros actuais non se transferirán!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Ruta de configuración"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Ruta de configuración cambiada, a instalación pecharase, por favor reinicie para continuar."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Prema Entrar para saír."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Axuste da ruta de configuración falida: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: non atopado"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Contrasinal: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Contrasinal (de novo): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Os contrasinais non coinciden."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "sí"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "verdadeiro"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "v"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "non"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "falso"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Ingreso non válido"
diff --git a/locale/he/LC_MESSAGES/django.po b/locale/he/LC_MESSAGES/django.po
index 50815063b..97c00c494 100644
--- a/locale/he/LC_MESSAGES/django.po
+++ b/locale/he/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/he/LC_MESSAGES/pyLoad.po b/locale/he/LC_MESSAGES/pyLoad.po
index d5efc9f35..4cbdb9e84 100644
--- a/locale/he/LC_MESSAGES/pyLoad.po
+++ b/locale/he/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/he/LC_MESSAGES/pyLoadCli.po b/locale/he/LC_MESSAGES/pyLoadCli.po
index 59cc71646..31c156f35 100644
--- a/locale/he/LC_MESSAGES/pyLoadCli.po
+++ b/locale/he/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/he/LC_MESSAGES/setup.po b/locale/he/LC_MESSAGES/setup.po
index 1e1bacb56..5e8e45761 100644
--- a/locale/he/LC_MESSAGES/setup.po
+++ b/locale/he/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/hi/LC_MESSAGES/django.po b/locale/hi/LC_MESSAGES/django.po
index 71cf38b32..7cd5d416a 100644
--- a/locale/hi/LC_MESSAGES/django.po
+++ b/locale/hi/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/hi/LC_MESSAGES/pyLoad.po b/locale/hi/LC_MESSAGES/pyLoad.po
index 5afc82339..ac081b482 100644
--- a/locale/hi/LC_MESSAGES/pyLoad.po
+++ b/locale/hi/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/hi/LC_MESSAGES/pyLoadCli.po b/locale/hi/LC_MESSAGES/pyLoadCli.po
index 4737f6785..734b08099 100644
--- a/locale/hi/LC_MESSAGES/pyLoadCli.po
+++ b/locale/hi/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s à€¡à€Ÿà€‰à€šà€²à¥‹à€¡:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " à€—à€€à€¿: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " à€†à€•à€Ÿà€°: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " à€†à€ˆà€¡à¥€: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "à€ªà¥à€°à€€à¥€à€•à¥à€·à€Ÿ à€®à¥‡à€‚ :"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "à€žà¥à€¥à€¿à€€à€¿:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "à€•à¥à€² à€—à€€à€¿"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "à€•à¥à€²"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "à€®à¥‡à€šà¥à€¯à¥‚ "
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "à€²à€¿à€‚à€•à¥à€ž à€œà¥‹à€¡à€Œà¥‡à€‚"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "à€¡à€Ÿà€‰à€šà€²à¥‹à€¡ à€œà€Ÿà€°à¥€ à€°à€–à¥‡à€‚ "
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "à€žà€°à¥à€µà€° à€¬à€‚à€Š à€•à€°à¥‡à€‚ "
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "à€•à€®à€Ÿà€‚à€¡ à€žà¥‚à€šà¥€ "
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "à€ªà¥‹à€°à¥à€Ÿ: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "à€‰à€ªà€¯à¥‹à€—à€•à€°à¥à€€à€Ÿ à€šà€Ÿà€®: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "à€ªà€Ÿà€žà€µà€°à¥à€¡: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "à€ªà¥ˆà€•à¥‡à€œ à€œà¥‹à€¡à€Œà¥‡à€‚:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "à€šà€ à€ªà¥ˆà€•à¥‡à€œ à€•à¥‹ à€šà€Ÿà€® à€Šà¥‡à€‚ "
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "à€ªà¥ˆà€•à¥‡à€œ: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "à€ªà¥‚à€°à€Ÿ à€¹à¥‹à€šà¥‡ à€ªà€° %s à€Ÿà€Ÿà€‡à€ª à€•à€°à¥‡à€‚ "
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "à€œà¥‹à¥œà¥‡ à€—à€ à€²à€¿à€‚à€•"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "à€®à¥à€–à¥à€¯à€Ÿ à€®à¥‡à€šà¥à€¯à¥‚ à€ªà€° à€µà€Ÿà€ªà€ž à€œà€Ÿà€à€‚ "
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "à€®à€¿à€Ÿà€Ÿà€¯à¥‡à€‚ "
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "à€ªà¥à€šà€ƒà€†à€°à€‚à€­ à€•à€°à¥‡à€‚ "
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr "-à€ªà€¿à€›à€²à€Ÿ "
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "-à€…à€—à€²à€Ÿ "
diff --git a/locale/hi/LC_MESSAGES/setup.po b/locale/hi/LC_MESSAGES/setup.po
index 3ecfc5a1b..24da4ee92 100644
--- a/locale/hi/LC_MESSAGES/setup.po
+++ b/locale/hi/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "à€ªà€Ÿà€žà€µà€°à¥à€¡: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/hr/LC_MESSAGES/django.po b/locale/hr/LC_MESSAGES/django.po
index fbaa25c79..29fbc3b16 100644
--- a/locale/hr/LC_MESSAGES/django.po
+++ b/locale/hr/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/hr/LC_MESSAGES/pyLoad.po b/locale/hr/LC_MESSAGES/pyLoad.po
index cb81932ca..e0fedc263 100644
--- a/locale/hr/LC_MESSAGES/pyLoad.po
+++ b/locale/hr/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/hr/LC_MESSAGES/pyLoadCli.po b/locale/hr/LC_MESSAGES/pyLoadCli.po
index ba9048e0c..cf1966357 100644
--- a/locale/hr/LC_MESSAGES/pyLoadCli.po
+++ b/locale/hr/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/hr/LC_MESSAGES/setup.po b/locale/hr/LC_MESSAGES/setup.po
index b4ef5c976..cad508e12 100644
--- a/locale/hr/LC_MESSAGES/setup.po
+++ b/locale/hr/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/hu/LC_MESSAGES/django.po b/locale/hu/LC_MESSAGES/django.po
index f2c1135d8..3d97e2270 100644
--- a/locale/hu/LC_MESSAGES/django.po
+++ b/locale/hu/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Új Captcha kérés"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Olvasd el a captcha-n levő szöveget."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad újraindítva"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "ki"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Sikeres"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "be"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Biztos bezárod a pyLoad-ot?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Link újraindítás"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Link törlése"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Add meg a csomag nevét."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Kattints a megfelelő captcha helyre."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Hiba történt."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Üres könyvtár"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Sikertelen"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Nincs Captcha."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "A jelszavak nem egyeznek."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Beállítások elmentve."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Új könyvtár"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Biztos újraindítod a pyLoad-ot?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "várakozás %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktív letöltések"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Főoldal"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Letöltések"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Napló"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Beállítások"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Név"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Állapot"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Információ"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Méret"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Folyamat"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Bejelentkezés"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Felhasználónév"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Jelszó"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "A felhasználói név és a jelszó nem egyezik. Próbáld újra."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "A bejelentkezési adatok törléséhez vagy új felhasználó felvételéhez futtasd:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Sikeresek törlése"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Sikertelenek újrapróbálása"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Könyvtár:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Jelszó:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Csomag szerkesztése"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Csomag részletei."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Csomag neve."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "mappa"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Alkönyvtár a letöltéseknek."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Jelszavak a kitömörítéshez."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "KÌldés"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Alaphelyzet"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Sikeresen kijelentkeztél."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Elérési útvonal"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "abszolút"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relatív"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "név"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "méret"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "típus"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "utolsó módosítás"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "szÃŒlő könyvtár"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "nincs tartalom"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Általános"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "BeépÃŒlők"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Hozzáférések"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Válaszd ki a megfelelő szekciót a menÃŒből"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "BeépÃŒlő"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "Prémium"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Lejár"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Hátralévő adatforgalom"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Idő"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max. egyszerre futó"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Törlés?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "érvényes"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "érvénytelen"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "igen"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nem"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Hozzáad"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Fiók hozzáadása"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Add meg a prémium hozzáféréshez szÌkséges adatokat."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Felhasználói neved."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Jelszó ehhez a hozzáféréshez."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Típus"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Válaszd ki a hozzáférésedhez tartozó ellátót."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Indít"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "előző"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "következő"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Vége"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Hírek"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Segítségnyújtás"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Rendszer"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad verzió:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Telepítés helye:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Beállítások helye:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Letöltések helye:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Szabad terÃŒlet:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Nyelv:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Web felÃŒlet port:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Távoli elérés port:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Beállítás"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Állomány kezelő"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Csomag hozzáadása"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Illesztd be a linkeket, vagy tölts fel egy gyűjtőt."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Az új csomag neve."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Linkek"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Illesztd be a linkeket, vagy bármilyen szöveget és nyomj a linkek szűrésére."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Linkek kiszűrése"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Jelszó a RAR állományhoz"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Állomány"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Gyűjtő feltöltése."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Cél"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha olvasás"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "A captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Szöveg"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Add meg a captcha-n található szöveget."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Bezárás"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Webes felÃŒlet"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad frissítés elérhető!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "BeépÃŒlők frissítve, indítsd újra!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha várakozik"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Kijelentkezés"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Adminisztrálás"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Infó"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Kérlek jelentkezz be!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Megállít"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Mégse"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Letöltés:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Újracsatlakozás:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Sebesség:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktív:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Oldal frissítése"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "betöltés"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Vissza a tetejére"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "pyLoad bezárása"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "pyLoad újraindítása"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Új felhasználó hozzáadásához vagy jelszó változtatáshoz:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Fontos: Az Admin felhasználó mindig teljes jogkörrel rendelkezik!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Jelszó változtatás"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Engedélyek"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "változtat"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "A jelenlegi és a kívánt jelszó."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Felhasználó"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Jelenlegi jelszó"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Új jelszó"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Az új jelszó."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Új jelszó (ismét)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Ismételd meg az új jelszót."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Nincs jogosultságod a lap megtekintéséhez."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Letöltési könyvtár nem található."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "végtelen"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "nem elérhető"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "A beállításhoz futtasd: pyload.py -s."
diff --git a/locale/hu/LC_MESSAGES/pyLoad.po b/locale/hu/LC_MESSAGES/pyLoad.po
index 84f94d435..9f522930c 100644
--- a/locale/hu/LC_MESSAGES/pyLoad.po
+++ b/locale/hu/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Leállítási jel érkezett"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "a pyLoad már fut az alábbi pid számmal: %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Sikertelen csoport váltás: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Sikertelen felhasználó váltás: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "könyvtár a naplóknak"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Indítás"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Főkönyvtár használata: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto a konténer fájlok dekódolásához"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "könyvtár az átmeneti fájloknak"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "könyvtár a letöltéseknek"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL a biztonságos kapcsolathoz"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Ellenőrizd a belépési adataid a következő paranccsal: ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Minden link törölve"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Letöltési idő: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Szabad hely: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Hozzáférések aktiválása..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Bővítmények aktiválása..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad fut"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "pyLoad újraindítása"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad kilép"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Telepítés %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "leállítás..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "hiba leállítás közben"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad kilőve konzolról"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "befejezett"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "várólistán"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "átugorva"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "várakozás"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "átmenetileg offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "indítás"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "sikertelen"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "megszakított"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "dekódolás"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "egyéni"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "letöltés"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "feldolgozás alatt"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "ismeretlen"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Kész csomag: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "SSL ThriftBackend használata"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Távoli hiba: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Indítás: %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Backend betöltése sikertelen: %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "várakozás %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL tanúsítvány nem található."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Ez a szerver nem támogatja az SSL-t, kérlek használj helyette másikat"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Nincs jogosultságod a lap megtekintéséhez."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Letöltési könyvtár nem található."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "végtelen"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "nem elérhető"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "A beállításhoz futtasd: pyload.py -s."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Darabokban letöltés sikertelen, visszatérés egyszeri kapcsolatra | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Letöltés elindítva: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Letöltés befejezve: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "A %s bővítményből hiányzik egy funkció."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Letöltés megszakítva: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Letöltés újraindítva: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "A letöltés offline: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "A letöltés átmenetileg offline: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "A letöltés sikertelen: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Nem sikerÌlt csatlakozni a címhez, újrapróbálás 1 perc múlva."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Letöltés átugorva: %(name)s - %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Dekódolás elkezdve: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Dekódolás sikertelen: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Újra próbálkozás %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "%(name)s információinak lekérése sikertelen | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Sikertelen aktiválás: %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Újracsatlakozás sikertelen: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Újracsatlakozó script nem található!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Újracsatlakozás indítása"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Az újracsatlakozó scriptet nem sikerÌlt futtatni!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Újracsatlakozva, új IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Nincs elég hely az eszközön"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Nem sikerÃŒlt bejelentkezni: %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Hibás jelszó"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "%s hozzáférésen nincs elég adatforgalom, újra próbálás: 30 perc"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "%s hozzáférés lejárt, újra próbálás: 1 óra"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "A letöltési korlát elérve"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Hiba a(z) %(name)s betöltése közben: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Nincs szolgáltató betöltve"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Közvetlen letöltés aktiválása a Bitshare hozzáférésen"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Azonosítás szÌkséges (felhasználónév:jelszó)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Add meg a(z) %s hozzáférés adatait, vagy deaktiváld ezt a beépÃŒlőt"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "HTML kód van a letöltött fájlban (%s). Lehet, hogy átirányítási hiba, a letöltés újra lesz indítva."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Állomány átmenetileg nem elérhető"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: letöltések közti várakozás %d mp."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: captcha-ra várakozás %d mp."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "A letöltött fájl Ìres"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Érvénytelen API kulcs"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Nincs elég adatforgalom hátra"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Adatforgalom túllépve"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Adatforgalom megosztás (közvetlen letöltés)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Már van folyamatban letöltés erről az IP-ről, várakozás: 60mp"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Hibás Auth kód, a letöltés újraindítása"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Nincs ingyenes hely"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Ehhez a fájlhoz prémium hozzáférés szÌkséges"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Hibás fájlnév"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Többszálas letöltés hiba, várakozás: 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Nem vagy bejelentkezve."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Sikertelen dekódolás"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Nincs fájl kulcs az URL-ben"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Hibakód:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Bővítmények frissítve, indítsd újra a pyLoad-ot ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Bővítmények frissítve és betöltve"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Nincs bővítmény frissítés"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Nincs új pyLoad verzió"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Új pyLoad verzió elérhető: %s ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Letöltés: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Nem sikerÌlt a szerverhez csatlakozni a frissítésekért"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Új verzió: %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Hiba frissítés közben %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "verzió Ìtközés"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Letöltés befejezve: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Új captcha kérés: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Válaszolj ezzel: 'c %s szöveg a captcha-n'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Először adj meg rehost.to hozzáférést majd indítsd újra a pyLoad-ot"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "%s HotFolder-ből hozzáadva"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "Nincs %s telepítve"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Nem sikerÌlt aktiválni: %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Aktivált"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Nincs kicsomagoló bővítmény aktiválva"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "%s csomag a várólistán későbbi kitömörítésre"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Csomag ellenőrzése: %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Kicsomagolás: %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Nincs kitömöríthető fájl"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "kicsomagolás"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Jelszóval védett"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Hibás jelszó"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "%s fájl törlése"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Kicsomagolás kész"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Tömörített állomány hiba"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC hiba"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Ismeretlen hiba"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Felhasználó és csoport beállítás sikertelen"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: A 9666 port használatban van"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s kredit maradt"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Nem sikerÌlt választ kÌldeni."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "A CaptchaTrader hozzáférésen nincs elég credit"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Crypter lista nem található"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Crypter lista ÃŒres"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Letöltés befejezve: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Új CaptchaID a feltöltésből: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "A Captcha 9kw.eu hozzáférésen nincs elég credit"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Scriptek telepítve - %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script nem futtatható:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Hiba: %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Az ExpertDecoders hozzáférésen nincs elég credit"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Először adj meg rehost.to hozzáférést majd indítsd újra a pyLoad-ot."
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Először adj meg premiumize.me hozzáférést majd indítsd újra a pyLoad-ot."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d kredit maradt"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Captcha megfejtéshez nincs kliens csatlakozva és nincs telepítve Pil vagy tesseract"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Felhasználó és csoport beállítás sikertelen: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/hu/LC_MESSAGES/pyLoadCli.po b/locale/hu/LC_MESSAGES/pyLoadCli.po
index bdb9441d6..288299d23 100644
--- a/locale/hu/LC_MESSAGES/pyLoadCli.po
+++ b/locale/hu/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Parancssoros felÃŒlet"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s letöltés:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Sebesség: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Méret: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Befejezve: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "várakozás: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Állapot:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "felfÃŒggesztve"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "fut"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "össz. sebesség"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Várólistás fájlok"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Összesen"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "MenÌ:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Link hozzáadás"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Várólista kezelése"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Gyűjtő kezelése"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Szerver szÌneteltetése/folytatása"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Szerver kilövése (Kill)"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Bezárás"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Használd a következő formát: add <Csomag neve> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "%d link ellenőrzése:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "A fájl nem létezik."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad leállítva"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Szerver állapota"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Várólistás fájlok"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Gyűjtőben levő letöltések"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Csomag várólistához adása"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Csomag gyűjtőhöz adása"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Fájl törlése várólista/gyűjtő"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Csomag törlése várólista/gyűjtő"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Csomag áthelyezése a várólista és a gyűjtő között"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Fájlok újraindítása"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Csomagok újraindítása"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Online státusz ellenőrzése, csak helyi konténer esetében"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "A konténer fájl online státuszának ellenőrzése"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Szerver szÌneteltetése"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "letöltések folytatása"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "SzÌneteltetés/folytatás"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "szerver kilövése (Kill)"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Parancsok listája:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Nem sikerÌlt írni a felhasználói beállítások fájlját"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Ehhez a pyLoad maghoz való csatlakozáshoz szÌkséged van py-openssl-re."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Cím: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Felhasználó: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Jelszó: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Hibás belépési adatok."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Nem sikerÌlt kapcsolódni ide: %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Ehhez a pyLoad maghoz való csatlakozáshoz szÌkséged van py-openssl-re."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Az interaktív mód néhány parancs után figyelmen kívÌl hagyva."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Csomag hozzáadása:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Add meg az új csomag nevét"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Csomag: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Hozzáadandó linkek."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Írd %s miután végeztél."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Link felvéve: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " vissza a főmenÃŒbe"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Csomagok kezelése:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Linkek kezelése:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Mit szeretnél áthelyezni?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Mit szeretnél törölni?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Mit szeretnél újraindítani?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Válaszd ki mit szeretnél csinálni, vagy adj meg egy csomag számot."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "törlés"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "áthelyezés"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "újraindítás"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - előző"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - következő"
diff --git a/locale/hu/LC_MESSAGES/setup.po b/locale/hu/LC_MESSAGES/setup.po
index 6e9116909..bd43fefc0 100644
--- a/locale/hu/LC_MESSAGES/setup.po
+++ b/locale/hu/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "i"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Üdvözöllek a pyLoad beállítási segédben."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "EllenőrizzÃŒk a rendszert és létrehozunk egy alap beállítást a pyLoad számára."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "A [] közötti érték minden esetben az alapértelmezett érték,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "ha nem akarod megváltoztatni, vagy nem vagy biztos benne mit válassz, csak nyomj entert."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Ne feledd: a segédhez visszatérhetsz ha a pyload.py-t a --setup vagy -s paraméterekkel indítod."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Ha bármi probléma lépne fel a segéd futása közben nyomj STRG-C kombinációt"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "a megszakításhoz, és hogy ne induljon el újra automatikusan."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Ha készen állsz a rendszer ellenőrzésre, nyomj Entert."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "A pyLoad futtatásához szÌkséged van a pycurl, sqlite és python 2.5, 2.6 vagy 2.7 verzióra."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Ezek javítása után futtasd újra a pyLoad-ot."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "A telepítő bezárul."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Rendszer ellenőrzés kész, nyomj Entert az eredmény megjelenítéséhez."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Státusz ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "konténer dekódolás"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "ssl kapcsolat"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "automatikus captcha dekódolás"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Webes felÃŒlet"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "kiterjesztett Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Elérhető szolgáltatások:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Hiányzó szolgáltatások: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto nem elérhető"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Erre szÌkséged van a konténer fájlok dekódolásához."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL nem elérhető"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Erre szÌkséged van, ha biztonságos kapcsolatot szeretnél a mag vagy webes felÌlet eléréséhez."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Ha csak helyben akarod elérni a pyLoad-ot, az ssl nem szÌkséges."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "nincs elérhető Captcha felismerő"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Csak néhány szolgáltatóhoz kell és ingyenes felhasználóként."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI nem elérhető"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Grafikus felÃŒlet."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "nincs JavaScript motor"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Néhány Click'N'Load linknek szÌksége van erre. Telepítsd a Spidermonkey, ossp-js, pyv8 vagy rhino csomagokat."
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Most megszakíthatod a telepítést, és kijavíthatod az esetleges hibákat"
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Folytatod a beállítást?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Megváltoztatod a konfigurációs fájlok helyét? A jelenlegi: %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Megváltoztatod a konfigurációs fájlok helyét?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Be akarod állítani a bejelentkezési adatokat és az általános beállításokat?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Ajánlott az első futtatásnál."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Létre akarod hozni az általános beállításokat?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Be akarod állítani az ssl-t?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Beállítod az ssl-t?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Beállítod a webes kezelőfelÃŒletet?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Beállítod a webes kezelőfelÃŒletet?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "A beállítások sikeresen elvégezve."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Nyomj entert a kilépéshez majd indítsd újra a pyLoad-ot"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Rendszer ellenőrz ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "A python verziód túl új. Használd a 2.6/2.7-es verziót."
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "A python verziód túl régi. Használj legalább 2.5-ös verziót."
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python Verzió: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "A telepített jinja2 verzió %s túl régi."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Biztonságosan tovább haladhatsz, de ha a webes felÌlet nem működik,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "frissítsd vagy töröld, a pyLoad tartalmaz egy alkalmas jinja2 könyvtárat."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS motor"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Általános beállítások ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Ezek a belépési adatok a következőkhöz alkalmasak: CLI, GUI, web felÃŒlet."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Felhasználónév"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "KÃŒlső kliensek (GUI, CLI, ...) számára szÃŒkséges távoli elérés a hálózaton keresztÃŒli működéshez."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Ha csak a webes felÌletet használod, akkor kikapcsolhatod, hogy memóriát takaríts meg."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Távoli hozzáférés engedélyezése"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Nyelv"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Letöltési könyvtár"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Max. egyidejű letöltés"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Újracsatlakozás használata?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Újracsatlakozó script helye"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Webes felÌlet Beállítása ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Webes felÌlet engedélyezése?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Figyelt cím, ha csak helyben akarod elérni akkor használd az 127.0.0.1 vagy localhost nevet."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Cím"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "A pyLoad számos backend szerver lehetőséget nyújt, ezekről következik egy rövid ismertető."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Használható több web-szerverrel (apache, lighttpd) egyéni beállítást igényel, ami nem egyszerű."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Letölthető innen: https://github.com/jonashaag/bjoern, le kell fordítani"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Figyelem: Néhány kivételes esetben a beépített szerver nem működik megfelelően. Ha hibát észlel a webes felÃŒleten"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "térjen vissza ide, és válasszon másik szervert."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Szerver"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## SSL beállítás ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Futtasd ezeket a parancsokat a konfigurációs könyvtárban, az ssl tanúsítványok elkészítéséhez:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Ha kész vagy, és minden rendben, akkor aktiválhatod az ssl-t."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "SSL engedélyezése?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Válassz műveletet"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Felhasználó szerkesztés/felvétel"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Felhasználók listázása"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Felhasználó törlése"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Kilépés"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Felhasználók"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "A konfigurációs fájlok új helye, a jelenlegi konfiguráció nem kerÌl áthelyezésre."
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Konfiguráció helye"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "A konfigurációs fájlok helye megváltozott,"
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Nyomj Entert a kilépéshez."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "A beállítások eléri útja hibás: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: hiányzik"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Jelszó: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Rövid jelszó. Legalább 4 karaktert használj."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Jelszó (ismét): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "A jelszavak nem egyeznek."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "igen"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "igaz"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "i"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nem"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "hamis"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "h"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Hibás érték"
diff --git a/locale/id/LC_MESSAGES/django.po b/locale/id/LC_MESSAGES/django.po
index 0c654c4d7..97f0628e5 100644
--- a/locale/id/LC_MESSAGES/django.po
+++ b/locale/id/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/id/LC_MESSAGES/pyLoad.po b/locale/id/LC_MESSAGES/pyLoad.po
index 80b62ab74..970c516c2 100644
--- a/locale/id/LC_MESSAGES/pyLoad.po
+++ b/locale/id/LC_MESSAGES/pyLoad.po
@@ -12,853 +12,848 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.pying failed: %(name)s | %(msg)s"
-msgstr ""
-
-#: module/threads/PluginThread.py:388
-#, python-format
-msgidmodule/threads/ServerThread.pymodule/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, p \ No newline at end of file
diff --git a/locale/id/LC_MESSAGES/pyLoadCli.po b/locale/id/LC_MESSAGES/pyLoadCli.po
index 589938d86..feb756424 100644
--- a/locale/id/LC_MESSAGES/pyLoadCli.po
+++ b/locale/id/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/id/LC_MESSAGES/setup.po b/locale/id/LC_MESSAGES/setup.po
index 7a2890016..ca6ad636f 100644
--- a/locale/id/LC_MESSAGES/setup.po
+++ b/locale/id/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/it/LC_MESSAGES/django.po b/locale/it/LC_MESSAGES/django.po
index 3fc6b7ee7..58bcfe478 100644
--- a/locale/it/LC_MESSAGES/django.po
+++ b/locale/it/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Richiesto nuovo captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Leggi il testo nel captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyload riavviato"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "off"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Successo"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "on"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Sei sicuro di voler chiudere pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Riavvia il collegamento"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Cancella collegamento"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Immetti un nome per il pacchetto."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Clicca sulla posizione giusta del captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Si Ú verificato un errore."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "La cartella Ú vuota"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Falliti"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Nessun Captcha da leggere."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Le passwords non corrispondono."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Settaggi salvati."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nuova cartella"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Sei sicuro di voler riavviare pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "attendo %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Download attivi"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Home"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "Coda"
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "Collettore"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Download"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Log"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configurazione"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nome"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Stato"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Info"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Dimensione"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Avanzamento"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Login"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Nome utente"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Password"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Il tuo nome utente e la tua password non corrispondono. Riprova."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Per resettare i tuoi dati di accesso o aggiungere un utente esegui:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Elimina i completi"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Riavvia i falliti"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Cartella:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Password:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Modifica pacchetto"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Modifica i dettagli del pacchetto qui di seguito."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Il nome del pacchetto."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Cartella"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nome della sottocartella per questi download."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lista delle password usate per decomprimere."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Invia"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "reset"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Ti sei disconnesso con successo."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Percorso"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "assoluto"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativo"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nome"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "dimensioni"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tipo"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "ultima modifica"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "cartella superiore"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "nessun contenuto"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Generale"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Account"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Scegli una sezione dal menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "Premium"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Valido fino al:"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Traffico rimanente:"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tempo"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max paralleli"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Elimina? "
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "valido"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "non valido"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "si"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "no"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Aggiungi"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Aggiungi Account"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Inserisci i dati di un account premium per usufruire delle sue funzionalità."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Il tuo nome utente."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "La password di questo account."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Tipo"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Scegli l'hoster per il tuo account."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Avvio"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "precedente"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "prossimo"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fine"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Novità"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Supporto"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistema"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr "Python:"
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "OS:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "Versione pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Cartella installazione:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Cartella configurazione:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Cartella download:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Spazio libero:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Lingua:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Porta Interfaccia Web:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Porta Interfaccia Remota:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Configurazione"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "File Manager"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Aggiungi pacchetto"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Incolla i tuoi link o carica un contenitore."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Il nome del nuovo pacchetto."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Collegamenti"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Incolla qui i tuoi link oppure qualsiasi testo e premi il pulsante filtra."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtra URL"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Password per l'archivio RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "File"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Carica un contenitore."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Destinazione"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha in lettura"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "Captcha"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Il captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Testo"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Inserisci il testo per il captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Chiudi"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interfaccia web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Nessun aggiornamento disponibile!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugin aggiornati, per favore riavviare pyLoad."
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha in attesa"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Esci"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Amministra"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Info"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Effettua il login!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Arresto"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Annulla"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Download:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Riconnetti:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Velocità:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Attivo:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Ricarica pagina"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "carico"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Torna in cima"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Chiudi pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Riavvia pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Per aggiungere utenti o cambiare le password usa:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Importante: l'utente Admin ha sempre tutti i permessi!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Cambia Password"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Amministratore"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Permessi"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "cambia"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Inserisci la tua attuale e la nuova Password."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Utente"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Password attuale"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nuova password"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Inserisci la nuova password."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nuova password (ripetila)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Ripeti la nuova password."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Non hai i permessi per accedere a questa pagina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Cartella Download non trovata."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "illimitato"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non disponibile"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Esegui pyload.py -s per accedere al setup."
diff --git a/locale/it/LC_MESSAGES/pyLoad.po b/locale/it/LC_MESSAGES/pyLoad.po
index 5258f50f7..683ffed12 100644
--- a/locale/it/LC_MESSAGES/pyLoad.po
+++ b/locale/it/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Ricevuto segnale di uscita"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad già in esecuzione con pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Impossibile cambiare il gruppo: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Impossibile cambiare utente: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "cartella dei log"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Avvio"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Uso la cartella home: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto per decodificare la libreria di file"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "cartella per i file temporanei"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "cartella dei download"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL per la connessione sicura"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Sposto la vecchia configurazione utente al DB"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Per favore controlla i tuoi dati di accesso eseguendo ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Tutti i link rimossi"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Tempo di download: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Spazio libero: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Attivazione Account..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Attivo i Plugins..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad Ú attivo e funzionante"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "riavvio pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "esco da pyLoad"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installazione %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "%(desc)s: %(name)s non trovato"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "non posso creare %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "spegnimento..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "errore durante lo spegnimento"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad chiuso da Terminale"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Filedatabase Ú stato cancellato a causa dell'incompatibilità di versione."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Il file del database non poteva essere convertito."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Il database Ú stato convertito dalla v2 alla v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Il database Ú stato convertito dalla v3 alla v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Conversione del vecchio DB Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "finito"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "offiline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "online"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "in coda"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "saltato"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "in attesa"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temp. offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "avviando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "fallito"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "annullato"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "decifrando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personalizzato"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "scaricando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "elaborando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "sconosciuto"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Pacchetto completato: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "ThriftBackend SSL in uso"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Errore backend remoto: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Avvio %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Impossibile avviare backend %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "attendo %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certificati SSL non trovati."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Siamo spiacenti, abbiamo abbandonato il supporto per avviare %s direttamente all'interno di pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Puoi utilizzare il server threaded che offre buone prestazioni e l'SSL,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "naturalmente puoi continuare ad usare il tuo attuale %s con il server fastcgi di pyLoads"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "si possono trovare configurazioni di esempio nella directory module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "si possono trovare configurazioni di esempio nella directory pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Non Ú possibile usare %(server)s, python-flup inon Ú installato!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Errore di importazione del server lightweight: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "E' necessario scaricare e compilare bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Copia il file boern.so nella cartella module/lib oppure usa setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Copia il file boern.so nella cartella pyload/lib oppure usa setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Naturalmente Ú necessario avere familiarità con linux e saper compilare da codice sorgente"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Il server Ú stato impostato su threaded, a causa di problemi di prestazioni noti sotto Windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Questo server non supporta SSL, si consiglia l'uso della versione threaded"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Avvio webserver integrato: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Avvio webserver SSL threaded: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Avvio Webserver threaded: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Avvio server fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Avvio il webserver lightweight (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Non hai i permessi per accedere a questa pagina."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Cartella Download non trovata."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "illimitato"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "non disponibile"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Esegui pyload.py -s per accedere al setup."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Download accellerato fallito, ripiego su singola connessione | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Avvio Download: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Download terminato: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Il plugin %s ha fallito una funzione."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Download annullato: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Download riavviato: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Il download Ú offline: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Il download Ú temporaneamente offline: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Download fallito: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Impossibile collegarsi all'host o connessione resettata, aspetto 1 minuto e riprovo."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Download saltato: %(name)s a causa di %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Decodifica avviata: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Decodifica fallita: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Riprovo %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Recupero informazioni per %(name)s fallito | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Errore durante l'esecuzione hooks: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Attivazione di %(name)s fallita"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Plugins attivati: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Plugins disattivati: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Riconnessione fallita: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Script per la riconnessione non trovato!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Nuovo tentativo di connessione"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Fallita l'esecuzione dello script di riconnessione!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Riconnesso, nuovo IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Spazio su disco insufficiente"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Impossibile effettuare il login con l'account %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Password errata"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Il tuo orario %s ha un formato sbagliato, usa: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "L'account %s non ha abbastanza traffico, controllo di nuovo tra 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "L'account %s Ú scaduto; prossimo controllo fra 1 ora"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Limite di download raggiunto"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s ha uno schema non valido."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Errore importando %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Nessun Hoster caricato"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Attiva il download diretto sul tuo account Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList non può essere cancellato."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Impostazioni account cancellato a causa del nuovo formato della configurazione."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Richiesta autorizzazione (nomeutente:password)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Per favore Inserisci il tuo account %s o disattiva questo plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "C'era del codice HTML nel file scaricato (%s)... errore di redirect? Il download verrà riavviato."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "File temporaneamente non disponibile"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: attendo %d s tra i download."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: attendo %d s per il captcha."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Il file scaricato era vuoto"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Chiave API invalida"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Traffico rimanente non sufficiente"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Traffico superato"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Traffic Share (download diretto)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Stai già scaricando da questo indirizzo IP, aspetta 60 secondi"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Auth Code non valido, il download sarà riavviato"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Nessuno slot gratuito libero"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Hai bisogno di un account Premium per questo file"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Nome di file riportato non valido"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Errore durante il download parallelo, attendo 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Non connesso."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Decifratura non riuscita"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Nessuna chiave fornita nell'URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Codice di errore:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Il file non esiste."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** I plugin sono stati aggiornati, riavvia pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins aggiornati e riavviati"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Nessun aggiornamento per i plugin disponibile"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Nessun aggiornamento per pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Nuova versione di pyLoad %s disponibile ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Scaricala da qui: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Impossibile collegarsi al server per gli aggiornamenti"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nuova versione di %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Errore durante l'aggiornamento di %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Versione non corrispondente"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Download finito: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nuova richiesta Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Rispondi usando 'c %s text on the captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Inserire prima il tuo account premium.to e riavviare pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Aggiunto %s da HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s non installato"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Impossibile attivare %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Attivato"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Nessun plugin per l'estrazione attivato"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Il pacchetto %s Ú stato messo in coda per l'estrazione successiva"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Verifico pacchetto %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Estraggo in %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Nessun file trovato da estrarre"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "estrazione"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Protetto da password"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Password errata"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Cancello %s file"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Estrazione completata"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Archivio danneggiato"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC non corrispondente"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Errore Sconosciuto"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Configurazione Utente e Gruppo fallita"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Porta 9666 già in uso"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s crediti rimasti"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Non posso inviare la risposta."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Il tuo account CaptchaTrader non ha crediti sufficienti"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Elenco Crypter non trovato"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Elenco Crypter vuoto"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Download finito: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nuovo CaptchaID dall'upload: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Il tuo account Captcha 9kw.eu non ha abbastanza crediti"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Script installati per %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script non eseguibile:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Errore in %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Il tuo account ExpertDecoders ha non abbastanza crediti"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Inserisci prima il tuo account rehost.to e poi riavvia pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Inserire un account premiumize.me valido e riavviare pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d crediti rimasti"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil e tesseract non sono installati e nessun Client Ú connesso per decifrare i captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Nessun risultato del captcha Ú stato trovato da alcun plugin nel tempo concesso."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Impostazione di Utente e Gruppo non riuscita: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Nessun client connesso per decifrare i captcha."
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Aggiunto pacchetto %(name)s contenente %(count)d collegamenti"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Aggiunti %(count)d link al pacchetto #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Nessun motore js rilevato, installare Spidermonkey, ossp-js, pyv8 o rhino"
diff --git a/locale/it/LC_MESSAGES/pyLoadCli.po b/locale/it/LC_MESSAGES/pyLoadCli.po
index 937056b8a..b9e963bc3 100644
--- a/locale/it/LC_MESSAGES/pyLoadCli.po
+++ b/locale/it/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Interfaccia a riga di comando"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s File Scaricati:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Velocità: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Dimensione: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Terminato in: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "in attesa: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Stato:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "in pausa"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "in esecuzione"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Velocità totale"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "File in coda"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Totale"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Menu:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Aggiungi Link"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "Gestisci Coda"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "Gestisci Libreria"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Pausa/Riattiva Server"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Termina Server"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Esci"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Si prega di utilizzare questa sintassi: add <Nome pacchetto> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Controllo %d link:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Il file non esiste."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad Ú stato chiuso"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Mostra lo stato del server"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Mostra i download in coda"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Mostra i download nella libreria"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Aggiunge pacchetti alla coda"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Aggiungi pacchetto alla libreria"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Elimina file dalla Coda/Collezione"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Elimina pacchetti dalla Coda/Libreria"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Sposta Pacchetti dalla Coda alla Libreria o vice versa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Riavvia file"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Riavvia pacchetti"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Controlla stato online, funziona con contenitori locali"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Controlla stato online di un file contenitore"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Mette in pausa il server"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continua i download"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Commutatore pausa/riprendi"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr " termina server"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista dei comandi:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Impossibile scrivere il file di configurazione utente"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Hai bisogno di py-openssl per connetterti a questo pyLoad Core."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Indirizzo:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Porta: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Nome utente: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Password:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "I dati di login sono errati."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Impossibile stabilire una connessione a %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Hai bisogno di py-openssl per connetterti a questo pyLoad core."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Modalità interattiva ignorata dato che hai passato alcuni comandi."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Aggiungi Pacchetto:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Inserisci un nome per il nuovo pacchetto"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Pacchetto: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analizza i link che desideri aggiungere."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Digita %s quanto hai fatto."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Link aggiunti: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " torna al menu principale"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Gestisci Pacchetti:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Gestisci Link:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Che cosa vuoi spostare?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Che cosa vuoi cancellare?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Che cosa vuoi riavviare?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Scegli cosa vuoi fare oppure digita il numero del pacchetto."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "cancella"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "sposta"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "riavvia"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - precendente"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - sucessivo"
diff --git a/locale/it/LC_MESSAGES/setup.po b/locale/it/LC_MESSAGES/setup.po
index bf61f047c..9a7e5004d 100644
--- a/locale/it/LC_MESSAGES/setup.po
+++ b/locale/it/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "s"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "n"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Benvenuto nell'Assistente di Configurazione di pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Il setup controllerà il tuo sistema e genererà una configurazione di base per avviare pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Il valore tra le parentesi quadre [] Ú sempre il valore di default,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "nel caso in cui non vuoi cambiare impostazione o non sei sicuro su cosa scegliere, premi semplicemente Invio."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Ricorda: Puoi sempre rieseguire questo assistente con i parametri --setup o -s, quando avvii pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Se hai qualche problema con questo assistente premi CRTL+C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "per annullare e non farlo partire più automaticamente con pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Quando sei pronto per la verifica del sistema premi Invio."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Hai bisogno di pycurl, sqlite e python 2.5, 2.6 o 2.7 per avviare pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Per favore corregilo e riavvia pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Il setup si chiuderà."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Verifica del sistema finita, premi Invio per vedere il report di stato."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Stato ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "decrittografia contenitore"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "connessione ssl"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "decrittografia automatica captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "GUI"
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interfaccia web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "Click'N'Load esteso"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Funzioni disponibili:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Funzioni mancanti: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto non disponibile"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Hai bisofno di questo se vuoi decifrare i contenitori di file."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL non disponibile"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Questo Ú necessario se vuoi stabilire una connessione sicura con il core o l'interfaccia web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Se vuoi accedere a pyLoad soltanto in locale, SSL non Ú necessario."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "Riconoscimento captcha non disponibile"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Necessario solo per alcuni hoster e come freeuser."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Gui non disponibile"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "L'interfaccia utente grafica (GUI)."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "nessun motore JavaScript trovato"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Avrai bisogno di questo per alcuni link Click'N'Load. Installa Spidermonkey, ossp-js, pyv8 o rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Se vuoi puoi annullare il setup ora e correggere alcune dipendenze."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Continuare con il setup?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Vuoi cambiare il percorso per la configurazione? Quello attuale Ú %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Se si utilizza pyLoad su un server o la partizione principale si trova su una memoria flash interna potrebbe essere una buona idea cambiarla."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Cambiare il percorso della configurazione?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Si desidera configurare i dati di accesso e le impostazioni di base?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "E' consigliato per il primo avvio."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Creare configurazione di base?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Vuoi configurare l'ssl?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Configurare ssl?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Vuoi configurare l'interfaccia web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Configurare l'interfaccia web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Configurazione terminata con successo."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Premi Invio per uscire e riavviare pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Verifica del Sistema ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "La versione di python Ú troppo recente, usare Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "La versione di python Ú troppo vecchia, usare almeno Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Versione di Python: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "La versione installata %s di jinja2 sembra essere troppo vecchia."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Si può tranquillamente continuare, ma se l'interfaccia web non funziona,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "si prega di aggiornarla o disinstallarla, pyLoad include una libreria jinja2 sufficiente."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "motore JS"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Configurazione Base ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "I seguenti dati di accesso sono validi per CLI, GUI e interfaccia web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Nome utente"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "I client esterni (GUI, CLI o altri) richiedono accesso remoto al sistema per funzionare nella rete."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Comunque, se hai in mente di utilizzare solo l'interfaccia web puoi disattivarlo per ridurre il consumo di memoria ram."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Attiva l'accesso remoto"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Lingua"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Cartella di download"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Numero massimo di download paralleli"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Usare la riconnessione?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Posizione dello script di riconnessione"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Configurazione dell'interfaccia web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Attivare l'interfaccia web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Indirizzo di ascolto, se usi 127.0.0.1 o localhost, l'interfaccia web sarà accessibile soltanto localmente."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Indirizzo"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Porta"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad offre diversi tipi di supporto a server, segue una breve spiegazione."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Server di default, la scelta migliore se non sai quale scegliere."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Questo server supporta SSL ed Ú una valida alternativa a quello integrato."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Può essere utilizzato con apache o lighttpd, ma ne richiede la configurazione, che non Ú una procedura semplice."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Alternativa molto veloce, scritta in C, richiede libev e conoscenza di linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Scaricalo da qui: https://github.com/jonashaag/bjoern, compilalo"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "e copia bjoern.so in module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "e copia bjoern.so in pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Attenzione: In alcuni rari casi il server integrato non funziona, se noti problemi con l'interfaccia web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "torna qui e sostituisci il server integrato con quello threaded."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Server"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Configurazione SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Esegui questi comandi dalla cartella di configurazione di pyLoad per creare i certificati SSL:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Se hai finito e tutto Ú andato bene, puoi attivare SSL ora."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Attivare SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Seleziona azione"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Crea/Modifica utente"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Lista utenti"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Rimuovi utente"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Esci"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Utenti"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Imposta nuovo percorso per la configurazione. La configurazione attuale NON sarà trasferita!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Percorso di configurazione"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Percorso di configurazione modificato. il setup ora si chiuderà; riavvialo per andare avanti."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Premi Invio per uscire."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Impostazione del percorso di configurazione non riuscita: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr "%s: OK"
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: mancante"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Password:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Password troppo corta. Usa almeno 4 caratteri."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Password (di nuovo): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Le passwords non corrispondono."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "si"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "vero"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "v"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "no"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "falso"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "f"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Inserimento non valido"
diff --git a/locale/ja/LC_MESSAGES/django.po b/locale/ja/LC_MESSAGES/django.po
index 26d05ee3a..d65e93853 100644
--- a/locale/ja/LC_MESSAGES/django.po
+++ b/locale/ja/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "新しい Captcha をリク゚スト"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Captcha のテキストを読んでください。"
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad が再起動したした"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "オフ"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "成功したした"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "オン"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "pyLoad を本圓に終了したすか?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "リンクを再起動"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "リンクを削陀"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "パッケヌゞ名を入力しおください。"
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "右の captcha の䜍眮をクリックしおください。"
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "゚ラヌが発生したした。"
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "フォルダが空です"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "読み取る Captcha がありたせん。"
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "パスワヌドが䞀臎したせん。"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "蚭定が保存されたした。"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "新芏フォルダ"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "pyLoad を本圓に再起動したすか?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "%s を埅機䞭"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "アクティブなダりンロヌド"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "ホヌム"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr "キュヌ"
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr "コレクタヌ"
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "ダりンロヌド"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "ログ"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "蚭定"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "名前"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "ステヌタス"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "情報"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "サむズ:"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "進捗"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "ログむン"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "ナヌザヌ名"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "パスワヌド"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "ナヌザ名かパスワヌドが䞀臎したせん。再詊行しおください。"
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "ログむン デヌタをリセットしたりナヌザを远加するには以䞋を実行しおください:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "削陀が完了したした"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "再起動に倱敗したした"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "フォルダ:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "パスワヌド:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "パッケヌゞを線集"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "䞋のパッケヌゞの詳现を線集したす。"
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "パッケヌゞの名前。"
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "フォルダヌ"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "これらのダりンロヌドのためのサブフォルダの名前です。"
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "unrar に䜿われたパスワヌドの䞀芧です。"
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "送信"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "リセット"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "正垞にログアりトしたした。"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "パス"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "絶察的"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "盞察的"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "名前"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "暙本数"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "皮類"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "最終曎新"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "芪ディレクトリ"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "内容なし"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "暙準"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "プラグむン"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "アカりント"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "メニュヌからセクションを遞択"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "プラグむン"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "プレミアム"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "有効期限"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "残りトラフィック"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "時間"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "最倧の䞊列数"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "削陀したすか?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "有効です"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "無効"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "はい"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "いいえ"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "远加"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "プレミアム機胜を䜿うにはアカりント デヌタを入力しおください。"
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "あなたのナヌザ名です。"
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "このアカりントのパスワヌドです。"
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "あなたのアカりントのホスティング䌚瀟を遞択しおください。"
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "開始"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "前ぞ"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "次ぞ"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "終了"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "ニュヌス"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "サポヌト"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad のバヌゞョン:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "むンストヌル フォルダ:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "蚭定フォルダ:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "ダりンロヌド フォルダ:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "空き領域:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "蚀語:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "りェブむンタフェヌスのポヌト:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "リモヌト むンタフェヌスのポヌト:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "ファむルマネヌゞャ"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "パッケヌゞを远加"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "リンクを貌り付けるかコンテナをアップロヌドしおください。"
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "新しいパッケヌゞの名前。"
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "リンク"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "ここにリンクや任意のテキストを貌り付けるかフィルタ ボタンを抌しおください。"
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "フィルタ URL"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "RAR アヌカむブのパスワヌド"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "ファむル"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "コンテナをアップロヌドしおください。"
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "保存先"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha を読み蟌み䞭"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha です。"
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "テキスト"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Captcha のテキストを入力しおください。"
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "閉じる"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "りェブむンタフェヌス"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad の曎新を利甚できたす!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "プラグむンが曎新されたした、再起動しおください!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha を埅機䞭"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "ログアりト"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "管理"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "情報"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "ログむンしおください!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "停止"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "キャンセル"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "ダりンロヌド:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "再接続:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "速床:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "アクティブ:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "ペヌゞを再読蟌"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "読み蟌み䞭"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "トップに戻る"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "pyLoad を終了"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "pyLoad を再起動"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "ナヌザを远加たたはパスワヌドを倉曎するには:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "重芁: 管理者ナヌザには垞にすべおの暩限がありたす!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "パスワヌドを倉曎"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "暩限"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "倉曎"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "珟圚のパスワヌドず新しいパスワヌドを入力しおください。"
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "ナヌザ"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "珟圚のパスワヌド"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "新しいパスワヌド"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "新しいパスワヌドです。"
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "新しいパスワヌド (再入力)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "新しいパスワヌドを繰り返しおください。"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "無制限"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "利甚䞍可"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/ja/LC_MESSAGES/pyLoad.po b/locale/ja/LC_MESSAGES/pyLoad.po
index 45cecdb97..e742cdd43 100644
--- a/locale/ja/LC_MESSAGES/pyLoad.po
+++ b/locale/ja/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "終了のシグナルを受信"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad はプロセス ID %s で既に実行䞭"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "グルヌプの倉曎に倱敗したした: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "ナヌザヌの倉曎に倱敗したした: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "ログのフォルダ"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "é–‹å§‹äž­"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "ホヌムディレクトリずしお %s を䜿甚䞭"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "䞀時ファむルのフォルダ"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "ダりンロヌド先のフォルダ"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "セキュアな接続のための OpenSSL"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "./pyload.py -u であなたのログむンデヌタをチェックしおください"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "すべおのリンクが削陀されたした"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "ダりンロヌド時間: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "空き領域: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "アカりントをアクティベヌト䞭..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "プラグむンをアクティベヌト䞭..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad が実行䞭"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "pyLoad を再起動䞭"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad が終了したす"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "%s をむンストヌル"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "シャットダりン䞭..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "シャットダりン䞭に゚ラヌ"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "完了"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "オフラむン"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "オンラむン"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "キュヌに入っおいたす。"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "スキップ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "埅機䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "䞀時的にオフラむン"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "é–‹å§‹äž­"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "倱敗したした"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "䞭止したした"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "埩号化"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "カスタム"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "ダりンロヌド䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "凊理䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "䞍明"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "パッケヌゞが完了したした: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "リモヌト バック゚ンド ゚ラヌ: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "開始 %(name)s%(addr)s%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr " バック゚ンド %(name)sの読み蟌みに倱敗した |%(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "%s を埅機䞭"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL 蚌明曞が芋぀かりたせん。"
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "このサヌバヌで SSL はありたせん、代わりにスレッドを䜿甚しおください"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "無制限"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "利甚䞍可"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "ダりンロヌド チャンクぞの移行に倱敗したした 1 ぀の接続 |。%s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "ダりンロヌド開始: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "ダりンロヌド完了: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "プラグむン %s には関数がありたせん。"
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "ダりンロヌドを䞭止: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "ダりンロヌドを再開: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "ダりンロヌドがオフラむン: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "ダりンロヌドが䞀時的にオフラむン: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "ダりンロヌドに倱敗したした: %(name)s|%(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "ホストたたは接続のリセットに接続できなかったため、1 分埌接続に再詊行しおください。"
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "ダりンロヌドをスキップしたした:%(plugin)sにより %(name)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "%(name)sの倱敗の情報取埗する |%(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "%(name)sをアクティブ に倱敗したした"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "再接続に倱敗したした: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "再接続スクリプトが芋぀かりたせん!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "再接続を開始䞭"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "倱敗した実行スクリプト再接続 "
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "再接続、新しい IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "デバむスに空き領域䞍足"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "アカりント%(user)s ではログむンできたせんでした |%(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "間違ったパスワヌド"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "アカりント %s が十分なトラフィックがない、30 分でもう䞀床チェック"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "アカりント %s は有効期限が切れお、1 h でもう䞀床チェック"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "ダりンロヌド制限に達したした"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "%(name)s%(msg)sのむンポヌト ゚ラヌ"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "ホスティング サヌビスが読み蟌たれおいたせん"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Bitshare アカりントで盎接のダりンロヌドを有効にしたす。"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr " (username:password)承認が必芁"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "%S アカりントを入力するか、このプラグむンを無効にしおください。"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "ファむルが䞀時的に利甚できたせん。"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: ダりンロヌド %d 秒間埅機しおいたす。"
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: キャプチャ %d 秒を埅っおいたす。"
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "ダりンロヌドしたファむルが空だった"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API キヌが無効です。"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s十分なトラフィックがない"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "トラフィックを超えおいたす"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "急流: トラフィックを共有 (ダりンロヌドによる盎販)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "既にこの ip アドレスからダりンロヌドする、60 秒を埅っおいたす。"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "無効な認蚌コヌド、ダりンロヌドが再起動"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom 空きスロット"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "このファむルのプレミアム アカりントを必芁がありたす。"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "無効なファむル名を報告"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "䞊列ダりンロヌド ゚ラヌ、60秒を埅っおいたす。"
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "ログむンしおいたせん。"
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "埩号化に倱敗したした"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "URL で提䟛されるファむル キヌがありたせん。"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "゚ラヌ コヌド:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "* * * プラグむンが曎新されお、pyLoad を再起動しおください * * *"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "プラグむンの曎新し、再読み蟌み"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "プラグむンの曎新はありたせん。"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "PyLoad の曎新"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "* * * 新しい pyLoad バヌゞョン %s が利甚 * * *"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "* * * それを埗るここで: http://pyload.org/download * * *"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "曎新サヌバヌに接続するこずはできたせん。"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "新しいバヌゞョンの%(type)s|%(name)s%(version) .2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "%sを曎新するずきの゚ラヌ"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "バヌゞョンの䞍䞀臎"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "ダりンロヌド完了: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "新しいキャプチャ芁求: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "'C %s テキストのキャプチャを' ず答え"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "HotFolder から%s远加 "
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s がむンストヌルされたした"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "%S をアクティブにできたせんでした。"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "アクティブ化"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "アクティブ化のプラグむンがない"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "パッケヌゞ %s は、抜出埌のキュヌ"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "パッケヌゞ %s をチェック"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "%S を抜出したす。"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "ファむルを抜出するが芋぀かりたせん"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "展開䞭"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "パスワヌドで保護されおいたす"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "正しくないパスワヌド"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "%s 個のファむルを削陀䞭"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "展開が完了したした"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "アヌカむブ ゚ラヌ"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC が䞍䞀臎"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "䞍明な゚ラヌ"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "ナヌザヌ蚭定およびグルヌプに倱敗したした"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: 䜿甚䞭のポヌト 9666"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s のクレゞットを巊"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "応答を送信できたせんでした。"
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "あなたの CaptchaTrader アカりントが十分なクレゞット"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Crypter リストが芋぀かりたせん"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Crypter リストは空です。"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "ダりンロヌド完了: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "アップロヌドから新しい CaptchaID: %s: %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "あなたのキャプチャ 9kw.eu アカりントが十分なクレゞット"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "%s のむンストヌル スクリプト"
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "スクリプトがない実行可胜ファむル:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "%(script)s の゚ラヌ%(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "あなたの ExpertDecoders アカりントが十分なクレゞット"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "たず、rehost.to アカりントを远加し、pyLoad を再起動しおください。"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d のクレゞットを残った"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil ずテッセラクト むンストヌルされおいないクラむアント接続 captcha 解読"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "ナヌザヌずグルヌプの蚭定に倱敗したした: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/ja/LC_MESSAGES/pyLoadCli.po b/locale/ja/LC_MESSAGES/pyLoadCli.po
index 40b14f12c..cbbc8ec27 100644
--- a/locale/ja/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ja/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " コマンド ラむン むンタフェヌス"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s ダりンロヌド:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " 速床: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " サむズ: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " 完了: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "埅機䞭: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "ステヌタス:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "䞀時停止"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "実行しおいたす。"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "合蚈速床"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "キュヌ内のファむル"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "合蚈"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "メニュヌ:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " リンクを远加"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " キュヌを管理"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " コレクタヌを管理"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " サヌバヌを䞀時停止/再開"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " サヌバヌを終了させる"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " 終了"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "この構文を䜿甚しおください: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "%d 個のリンクをチェック䞭:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "ファむルが存圚したせん。"
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad が終了したした"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "印刷サヌバヌの状態"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "キュヌ内のダりンロヌドを印刷"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "コレクタヌ内のダりンロヌドを印刷"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "パッケヌゞをキュヌに远加"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "パッケヌゞをコレクタヌに远加"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "キュヌ/コレクタヌからファむルを削陀"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "キュヌ/コレクタヌからパッケヌゞを削陀"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "キュヌからコレクタヌ (たたはその逆) にパッケヌゞを移動"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "ファむルを再起動"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "パッケヌゞを再起動"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "オンラむンの状態やロヌカル コンテナの仕事をチェック"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "コンテナ ファむルのオンラむン状態をチェック"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "サヌバヌを䞀時停止"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "ダりンロヌドを継続"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "䞀時停止/再開を切替え"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "サヌバヌを終了させる"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "コマンドの䞀芧:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "ナヌザヌ蚭定ファむルに曞き蟌むこずができたせんでした"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "この pyLoad コアに接続するには py-openssl が必芁です。"
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "アドレス: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "ポヌト: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "ナヌザヌ名: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "パスワヌド: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "ログむン デヌタが間違っおいたす。"
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "%(addr)s:%(port)s ぞの接続を確立できたせんでした。"
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "この pyLoad コアに接続するには py-openssl が必芁です。"
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "察話モヌドはあなたが入力したいく぀かのコマンドを無芖したした。"
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "パッケヌゞを远加:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "新しいパッケヌゞの名前を入力"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "パッケヌゞ: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "远加したいリンクを解析したす"
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "終わったら %s を入力しおください。"
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "リンクが远加されたした: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " メむン メニュヌに戻る"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "パッケヌゞを管理:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "リンクを管理:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "䜕を移動したすか?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "䜕を削陀したすか?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "䜕を再起動したすか?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "䜕をするかを遞択するかパッケヌゞ番号を入力しおください。"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "削陀"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "移動"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "再起動"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - 前"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - 次"
diff --git a/locale/ja/LC_MESSAGES/setup.po b/locale/ja/LC_MESSAGES/setup.po
index b350f1063..9370418e4 100644
--- a/locale/ja/LC_MESSAGES/setup.po
+++ b/locale/ja/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "pyLoad 蚭定アシスタントにようこそ。"
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "それはあなたのシステムをチェックし、基本的なセットアップ pyLoad を実行するために。"
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "角かっこ内の倀は垞に、既定倀は"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "それを倉曎したくない、䜕を遞択する確認が堎合ヒットだけを入力したす。"
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "忘れおはいけない pyload.py を起動するず垞にセットアップたたは-s パラメヌタヌでこのアシスタントを再実行するこずができたす。"
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "䞭止しないでください圌はもはや自動的に pyload.py を開始させおください。"
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "システム チェックの準備が敎ったら、ヒットを入力したす。"
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "pyLoad を実行するには pycurl ず sqlite、python 2.5 たたは 2.6、2.7 が必芁です。"
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "これを修正しお pyLoad を再実行しおください。"
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## 状態 ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "SSL 接続"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "自動 captcha 解読"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "りェブむンタフェヌス"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL を利甚できたせん"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI を利甚できたせん"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "グラフィカル ナヌザ むンタヌフェむスです。"
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "JavaScript ゚ンゞンが芋぀かりたせん"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "セットアップを続けたすか。"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "蚭定パスを倉曎したすか。珟圚は %s です。"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "蚭定パスの倉曎ですか"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "ログむン デヌタず基本蚭定を構成したすか。"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "最初の実行をお勧めしたすです。"
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "基本的なセットアップを行うか"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Ssl を構成したすか。"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Ssl を構成したすか。"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "りェブむンタ フェヌスを構成したすか。"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "りェブむンタ フェヌスを構成したすか。"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "セットアップは正垞に完了したした。"
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "PyLoad を再起動を終了を入力ヒット"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## システム チェック ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python のバヌゞョン: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS ゚ンゞン"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## 基本的なセットアップ ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "次の logindata は CLI ず GUI のりェブむンタ フェヌスに有効です。"
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "ナヌザヌ名"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "蚀語"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "ダりンロヌドフォルダ"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "最倧䞊列ダりンロヌド"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "再接続を䜿甚したす。"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "スクリプトの堎所を接続し盎したす"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## りェブむンタフェヌスのセットアップ ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "りェブむンタフェヌスをアクティベヌトしたすか?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "リスン アドレス、127.0.0.1 たたは localhost、りェブむンタ フェヌスを䜿甚する堎合は、ロヌカルでのみアクセス可胜。"
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "アドレス"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "ポヌト"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad 今、簡単な説明、次のいく぀かのサヌバヌ バック゚ンドを提䟛しおいたす。"
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Apache、lighttpd を䜿甚するこずができたす、あたりにも簡単な仕事ではない、それらを構成する必芁がありたす。"
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "ここからそれを埗る: https://github.com/jonashaag/bjoern、それをコンパむル"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "泚意: いく぀かのたれなケヌスで、組み蟌みのサヌバヌが動䜜しない、りェブむンタ フェヌスで問題が発生した堎合"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "ここに戻っおくるし、ここでスレッドに組み蟌みサヌバヌを倉曎したす。"
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "サヌバヌ"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## SSL セットアップ ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Ssl 蚌明曞を pyLoad config フォルダヌからこれらのコマンドを実行したす。"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "完了したら、すべおがうたく行った堎合 ssl を今すぐアクティブ化するこずができたす。"
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "SSL を有効にするか"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "動䜜を遞択"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - ナヌザを䜜成/線集"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - ナヌザ䞀芧を衚瀺"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - ナヌザを削陀"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - 終了"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "ナヌザヌ"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "蚭定パス"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "終了するには Enter を抌しおください。"
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "蚭定パスの蚭定に倱敗したした: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: ありたせん"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "パスワヌド: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "パスワヌドが短すぎたす。4 文字以䞊にしおください。"
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "パスワヌド (再入力): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "パスワヌドが䞀臎したせん。"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "はい"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "いいえ"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "無効な入力"
diff --git a/locale/ko/LC_MESSAGES/django.po b/locale/ko/LC_MESSAGES/django.po
index 93877fc34..8a8ec2874 100644
--- a/locale/ko/LC_MESSAGES/django.po
+++ b/locale/ko/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/ko/LC_MESSAGES/pyLoad.po b/locale/ko/LC_MESSAGES/pyLoad.po
index 048520190..33c6cc922 100644
--- a/locale/ko/LC_MESSAGES/pyLoad.po
+++ b/locale/ko/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/ko/LC_MESSAGES/pyLoadCli.po b/locale/ko/LC_MESSAGES/pyLoadCli.po
index e85c7fb29..ed8539ae8 100644
--- a/locale/ko/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ko/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/ko/LC_MESSAGES/setup.po b/locale/ko/LC_MESSAGES/setup.po
index 38f52ea3d..e806aa68e 100644
--- a/locale/ko/LC_MESSAGES/setup.po
+++ b/locale/ko/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/ms/LC_MESSAGES/django.po b/locale/ms/LC_MESSAGES/django.po
index 258e0cdf8..7ee9b2c75 100644
--- a/locale/ms/LC_MESSAGES/django.po
+++ b/locale/ms/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Gagal"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Jenis"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistem"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Persediaan"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/ms/LC_MESSAGES/pyLoad.po b/locale/ms/LC_MESSAGES/pyLoad.po
index 4d92823a5..e234643df 100644
--- a/locale/ms/LC_MESSAGES/pyLoad.po
+++ b/locale/ms/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/ms/LC_MESSAGES/pyLoadCli.po b/locale/ms/LC_MESSAGES/pyLoadCli.po
index d4119d884..4d9aef64d 100644
--- a/locale/ms/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ms/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Tambah pakej:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Masukkan nama untuk pakej baru"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Pakej: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Pautan ditambah: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " kembali ke menu utama"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Menguruskan pakej:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Menguruskan pautan:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Apakah yang anda ingin mengalih?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Apakah yang anda ingin hapuskan?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Apakah yang anda ingin memulakan semula?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "hapuskan"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "mengalih"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/ms/LC_MESSAGES/setup.po b/locale/ms/LC_MESSAGES/setup.po
index 837f7ed34..c84724694 100644
--- a/locale/ms/LC_MESSAGES/setup.po
+++ b/locale/ms/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/nl/LC_MESSAGES/django.po b/locale/nl/LC_MESSAGES/django.po
index 912576e9e..fac53942b 100644
--- a/locale/nl/LC_MESSAGES/django.po
+++ b/locale/nl/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Nieuw Captcha verzoek"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Lees de tekst van de captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "PyLoad is herstart"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "uit"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Succes"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "aan"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Ben je zeker dat je pyLoad wilt afsluiten?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Herstart Link"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Verwijder Link"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Geef een naam voor het pakket op."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Gelieve op de correcte captcha positie te klikken."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Fout opgetreden."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Map is leeg"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Mislukt"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Geen captchas beschikbaar."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Wachtwoorden kwamen niet overeen."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Instellingen bewaard."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nieuwe map"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Ben je zeker dat je pyLoad wilt herstarten?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "wachtend %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Actieve downloads"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuratie"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Naam"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Status"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informatie"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Grootte"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Vooruitgang"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Inloggen"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Gebruikersnaam"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Wachtwoord"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Gebruikersnaam en wachtwoord komen niet overeen, probeer nogmaals."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Om logindata te resetten of gebruiker toe te voegen start:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Verwijder voltooide"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Herstart gefaalde"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Map:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Wachtwoord:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Pakket bewerken"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Bewerk de pakketdetails hieronder."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "De naam van het pakket."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Map"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Naam van de submap voor deze downloads."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lijst van wachtwoorden die voor het uitpakken gebruikt worden."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Verzenden"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Wissen"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Je bent succesvol uitgelogd."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Pad"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absoluut"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relatief"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "naam"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "grootte"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "laatst gewijzigd"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "bovenliggende map"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "geen inhoud"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Algemeen"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Accounts"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Kies een categorie uit het menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Geldig tot"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Resterend volume"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tijd"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Verwijderen?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "geldig"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "ongeldig"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "ja"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nee"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Toevoegen"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Voeg Account toe"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Vul accountgegevens in om premium functies te gebruiken."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Gebruikersnaam."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Het wachtwoord voor deze account."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Kies de hoster voor je account."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "vorige"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "volgende"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Einde"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Nieuws"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Ondersteuning"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Systeem"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad versie:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Installatie Map:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Configuratie Map:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Download Map:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Beschikbare Ruimte:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Taal:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Webinterface Poort:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Remote Interface Poort:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Installatie"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Bestandsbeheer"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Pakket Toevoegen"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Plak je links of upload een dlc bestand."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "De naam van het nieuwe pakket."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Plak je links of tekst hier en druk op de filterknop."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Wachtwoorden voor RAR-archieven"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Bestand"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Upload een container."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Bestemming"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha's lezen"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "De captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Tekst"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Typ de tekst van de captcha in."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Sluiten"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad Update beschikbaar!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins updated, herstart pyLoad!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha's beschikbaar"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Afmelden"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administratie"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Informatie"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Gelieve aan te melden!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Annuleren"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Snelheid:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Actief:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Herlaad pagina"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "laden"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Naar top"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Sluit pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Herstart pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Toevoegen van gebruiker of wijzigen wachtwoord gebruik:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Belangrijk: Administrator heeft altijd alle toegangsrechten!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Wachtwoord Wijzigen"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Toegangsrechten"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "wijzigen"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Vul je huidig en gewenste wachtwoord in."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Gebruiker"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Huidig wachtwoord"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nieuw wachtwoord"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Nieuw wachtwoord."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nieuw wachtwoord (herhalen)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Herhaal het nieuwe wachtwoord."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Je hebt geen rechten deze pagina te bezoeken."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Downloadmap niet gevonden."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "onbeperkt"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "niet beschikbaar"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Start pyload.py -s om setup te starten."
diff --git a/locale/nl/LC_MESSAGES/pyLoad.po b/locale/nl/LC_MESSAGES/pyLoad.po
index 4f1fa4663..acd922208 100644
--- a/locale/nl/LC_MESSAGES/pyLoad.po
+++ b/locale/nl/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Quit signaal ontvangen"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad is al actief met pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Veranderen van groep mislukt: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Veranderen van gebruiker mislukt: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "map voor logs"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Startend"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Gebruik hoofdmap: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "Container bestanden decoderen met pycrypto"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "map voor tijdelijke bestanden"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "map voor downloads"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL voor beveiligde verbinding"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Oude configuratie naar DB verplaatsen"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Controleer je logingegevens met ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Alle links verwijderd"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Downloadtijd: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Beschikbare ruimte: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Accounts worden geactiveerd..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Plugins aan het activeren..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad is lopende"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "pyLoad wordt herstart"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad wordt afgesloten"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installeren %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "Niet te vinden %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "Niet aan te maken %(desc)s : %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "afsluiten..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "fout tijdens afsluiten"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad is afgesloten via Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Bestandsdatabase is verwijderd vanwege niet verenigbare versie."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Bestandsdatabase kan NIET geconverteerd worden."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Database is geconverteerd van v2 naar v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Database is geconverteerd van v3 naar v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Oude Django DB omzetten"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "compleet"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "in wachtrij"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "overgeslagen"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "wachtend"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "tijdelijk offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "startend"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "mislukt"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "afgebroken"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "decrypten"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "gepersonaliseerd"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "wordt gedownload"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "verwerken"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "onbekend"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Pakket compleet: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "SSL ThriftBackend gebruiken"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Remotebackendfout: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Opstarten %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Laden van backend %(name)s | %(error)s mislukt"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "wachtend %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL certificaten niet gevonden."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Sorry, we hebben ondersteuning voor starten van %s vanuit pyLoad verwijderd"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Je kan de threaded server gebruiken welke goede prestaties en ssl biedt,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "ook kan je de pyLoads fastcgi server gebruiken met je bestaande %s"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "voorbeeldconfiguratie is te vinden in module/webui/servers map"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "voorbeeldconfiguratie is te vinden in pyload/webui/servers map"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Kan %(server)s niet gebruiken, python-flup is niet geinstalleerd!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Fout bij importeren lichtgewicht server: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Je moet bjoern downloaden en compileren, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Kopieer de boern.so naar module/lib map en gebruik setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Kopieer de boern.so naar pyload/lib map en gebruik setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Hiervoor is kennis van linux en compileren van software een vereiste"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Server op threated gezet, vanwege bekende prestatie problemen op windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Deze server heeft geen SSL, overweeg de threaded server te gebruiken"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Opstarten van builltin webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Opstarten van threaded SSL webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Opstarten van threaded webserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Opstarten van fastcgi server: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Opstarten van lichtgewicht webserver (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Je hebt geen rechten deze pagina te bezoeken."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Downloadmap niet gevonden."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "onbeperkt"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "niet beschikbaar"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Start pyload.py -s om setup te starten."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Downloaden in chunks is mislukt, val terug op één connectie | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Download gestart: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Download compleet: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Plugin %s mist een functie."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Download afgebroken: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Download herstart: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "%s offline"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Download is tijdelijk offline: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Download mislukt: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Kan geen verbinding maken met host, wacht 1 minuut en probeer opnieuw."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Download overgeslagen: %(name)s vanwege %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Decrypten gestart: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Decrypten mislukt: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Opnieuw proberen %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Informatie verzamelen voor %(name)s mislukt | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Uitvoeren van hooks mislukt: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Activeren mislukt van %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Geactiveerde plugins: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Niet geactiveerde plugins: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Opnieuw verbinden mislukt: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Opnieuw verbinden script niet gevonden!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Opnieuw aan het verbinden"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Uitvoeren van opnieuw verbinden script mislukt!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Opnieuw verbonden, nieuwe IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Onvoldoende schijfruimte vrij"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Kan niet inloggen onder gebruikersnaam %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Verkeerd wachtwoord opgegeven"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Tijd %s heeft verkeerde , gebruik: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Account %s heeft niet genoeg credits, wij proberen het opnieuw in 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Account %s is verlopen, opnieuw te controleren in 1h"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Downloadlimiet bereikt"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s heeft een ongeldig patroon."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Fout bij importeren %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Geen Hoster geladen"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Activeer Direct Downloaden in je Bitshare Account"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList kon niet gewist worden."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Accountgegevens verwijderd, vanwege nieuw configutatie formaat."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorisatie vereist (gebruikersnaam:wachtwoord)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Voer hier uw %s gegevens in of deactiveer deze plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Tijdens het proberen van het ophalen van het volgende bestand (%s) is er een html/pagina reactie teruggekomen, dit kan een doorsturing zijn naar een andere pagina. pyLoad zal nu opnieuw het bestand proberen binnen te halen."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Bestand tijdelijk niet beschikbaar"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: wachten tussen downloads %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: Wachten tot captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Downloadlink heeft geen bestand gekoppeld"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API sleutel ongeldig"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Overdracht limiet bijna bereikt , niet voldoende credits"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Dataverkeer overschreden"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Bandbreedte Delen (Direct Downloaden)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Er wordt al een bestand gedownload vanaf dit ip adres, na 60 seconden volgende poging"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Ongeldige Auth Code, download wordt automatisch herstart"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Geen beschikbaarde downloadslots"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "U heeft een premium account nodig voor deze bestand"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Bestandsnaam geeft ongeldigheidsmelding"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Gelijktijdige download mislukt, wacht 60 seconden voor volgende poging."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Niet ingelogd."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Ontcijferen van codering mislukt"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Geen bestandssleutel meegeleverd door URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Foutmeldingscode:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Bestand bestaat niet."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Plugins zijn bijgewerkt, pyLoad opnieuw starten aub***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins bijgewerkt en opnieuw geladen"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Geen plugin updates beschikbaar"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Geen Updates voor pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Nieuwe pyLoad Versie %s beschikbaar ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Download hier: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Niet in staat te verbinden met server voor updates"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nieuwe versie van %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Fout tijdens updaten van %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Versie mismatch"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Download compleet: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nieuw Captcha verzoek: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Beantwoord met 'c%s text on the captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Toegevoegde %s van HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "Niet %s geinstalleerd"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Kan %s niet activeren"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Geactiveerd"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Geen uitpak plug-ins geactiveerd"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Pakket %s in wachtrij voor later uitpakken"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Controleer pakket %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Uitpakken naar %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Geen bestanden gevonden om uit te pakken"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "uitpakken"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Beveiligd met een wachtwoord"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Verkeerd wachtwoord"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "%s bestanden verwijderen"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Uitpakken voltooid"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Archief fout"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC foutief"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Onbekende fout"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Instellen van gebruikers en de groep is mislukt"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Poort 9666 al in gebruik"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s credits over"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Kan het antwoord niet verzenden."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Uw CaptchaTrader Account heeft niet genoeg credits"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Crypter lijst niet gevonden"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Crypter lijst is leeg"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Download compleet: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nieuwe CaptchaID van upload: %s: %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Uw Captcha 9kw.eu Account heeft niet genoeg credits"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Geïnstalleerde scripts voor %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Script niet uitvoerbaar:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Fout in %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Uw ExpertDecoders Account heeft niet genoeg credits"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Gelieve eerst uw premium account toe te voegen en daarna pyLoad te herstarten"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "uw resterende aantal credits : %d"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Captcha ontcijfering niet mogelijk : A. Client is niet verbonden & B. Pil en Tesseract module niet gevonden"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Geen captcha resultaat ontvangen in aangegeven tijd bij een van de plugins."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Instellingen van gebruiker en groep kunnen niet geladen worden : %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Geen verbinding met client om captcha te decrypten"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Pakket %(name)s toevoegen met %(count)d links"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "%(count)d links toevoegen aan pakket #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Geen js engine gedetecteerd, installeer Spidermonkey, ossp-js, pyv8 of rhino"
diff --git a/locale/nl/LC_MESSAGES/pyLoadCli.po b/locale/nl/LC_MESSAGES/pyLoadCli.po
index 35e9d3aac..4925904ae 100644
--- a/locale/nl/LC_MESSAGES/pyLoadCli.po
+++ b/locale/nl/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Opdrachtprompt"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Snelheid: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Grootte: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Compleet in: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "wachtend: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "gepauzeerd"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "lopend"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "totale Snelheid"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Bestanden in wachtrij"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Totaal"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Links toevoegen"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "Wachtrij beheren"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "Verzamelaar beheren"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " (De)Pauzeren Server"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Server afsluiten"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Afsluiten"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Gebruik deze opbouw: add <Package name> <link> <link2> enz"
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Controleren van %d links:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Bestand bestaat niet."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad was afgesloten"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Server status weergeven"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Downloads in wachtrij weergeven"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Downloads in verzamelaar weergeven"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Pakketten toevoegen aan wachtrij"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Pakket toevoegen aan verzamelaar"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Bestanden verwijderen uit Wachtrij/Verzamelaar"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Pakketten verwijderen uit Wachtrij/Verzamelaar"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Verplaats pakketten van Wachtrij naar Verzamelaar of omgekeerd"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Bestanden herstarten"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Pakketten herstarten"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Controleer online status, werkt met lokale container"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Controleert de online status van een container bestand"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Server pauzeren"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "downloads hervatten"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Pauzeren/Starten"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "server afsluiten"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lijst met commands:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Kan configuratiebestand voor gebruiker niet aanmaken"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Om verbinding te maken met deze pyLoad Core is py-openssl nodig."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adres: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Poort: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Gebruikersnaam: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Wachtwoord: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Login gegevens verkeerd."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Kan geen verbinding maken met %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Om verbinding te maken met pyLoad is py-openssl noodzakelijk."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Interactieve modus wordt genegeerd, omdat je commando's hebt ingevult."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Pakket toevoegen:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Naam invullen voor nieuw pakket"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Pakket: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Parse de links die je wilt toevoegen."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Type %s als het klaar is."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Toegevoegde links: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " terug naar hoofdmenu"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Pakketten beheren:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Links beheren:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Wat wil je verplaatsen?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Wat wil je verwijderen?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Wat wil je herstarten?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Kies wat je wilt doen of vul pakketnummer in."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "verwijderen"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "verplaatsen"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "herstarten"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - vorige"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - volgende"
diff --git a/locale/nl/LC_MESSAGES/setup.po b/locale/nl/LC_MESSAGES/setup.po
index ed88ba315..23a10b62a 100644
--- a/locale/nl/LC_MESSAGES/setup.po
+++ b/locale/nl/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "j"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Welkom bij de pyLoad configuratie assistent."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Deze zal uw systeem controleren en de basissetup uitvoeren."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "De waarden tussen de haakjes [] zijn de standaardwaarden,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "mocht het zo zijn dat u deze niet wil veranderen of indien u niet zeker bent, druk op enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Let op: u kunt altijd deze setup herstarten met de --setup of -s parameter als u pyload.py start."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Mocht u problemen hebben met deze assistent druk op STRG-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "om af te sluiten en de assistent niet meer automatisch te starten."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Als u klaar bent voor de systeemcontrole, druk op enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "U heeft pycurl, sqlite en python 2.5, 2.6 of 2.7 nodig om pyLoad te starten."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Corrigeer dit en herstart pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "De setup zal nu afbreken."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Systeemcontrole is uitgevoerd, druk op enter om het statusbericht te zien."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "ssl verbinding"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "automatische captcha ontcijfering"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "uitgebreide Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Functies beschikbaar:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Missende functies: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "geen py-crypto beschikbaar"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "U heeft dat nodig om container bestanden te openen."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "geen SSL beschikbaar"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Dit is nodig om een beveiligde verbinding in te stellen naar de core of de webinterface."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Als u pyLoad enkel lokaal gebruikt is SSL overbodig."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "geen captcha herkenning beschikbaar"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Wordt alleen gebruikt bij enkele hosters als freeuser."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI niet beschikbaar"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "De grafische gebruikersomgeving."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "geen JavaScript engine gevonden"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "U heeft dit nodig voor bepaalde Click'N'Load links. Instaleer Spidermoney, ossp-js, pyv8 of rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "U kunt nu setup afbreken en enkele afhankelijkheden installeren als u dat wilt."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Doorgaan met setup?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Wilt u de configuratiemap aanpassen? Huidige is %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Als u pyLoad op een server gebruikt of de home partitie bevindt zich op intern flash-geheugen, is het een goed idee om het te veranderen."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Verander configmap?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Wilt u login gegevens en basisinstellingen configureren?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Dit is aan te raden bij een eerste start."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Basissetup creëren?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Wilt u SSL configureren?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "SSL configureren?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Wilt u de webinterface configureren?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Webinterface configureren?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Setup is succesvol voltooid."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Druk op enter om af te sluiten en start pyLoad opnieuw"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Syteemcontrole ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Uw python versie is te nieuw, gebruik python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Uw python versie is te oud, gebruik minstens python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python versie: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Uw gestalleerde versie %s van jinja2 is te oud."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "U kan veilig verder, alleen de webinterface zal niet werken."
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "Upgrade of verwijder het, pyLoad komt zelf met een goede jinja2 versie."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Basisinstellingen ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "De volgende logingegevens zijn geldig voor CLI, GUI en webinterface."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Gebruikersnaam"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Externe cliënten (GUI, CLI of andere) hebben externe toegang nodig om te werken over het netwerk."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Als je enkel de webinterface wil gebruiken mag je het uitschakelen om RAM te besparen."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Externe toegang inschakelen"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Taal"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Downloadmap"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Maximale parallele downloads"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Gebruik reconnect?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Reconnect script pad"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Webinterface setup ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Activeer webinterface?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Listen adres, als u 127.0.0.1 of localhost gebruikt is de webinterface alleen lokaal beschikbaar."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adres"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Poort"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad beschikt over een aantal server backends, nu volgt een korte uitleg."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Standaard server, de beste keuze als je niet weet welke je moet kiezen."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Deze server beschikt over SSL en is een goed alternatief voor de interne server."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Kan gebruikt worden door apache, lighttpd, vereist configuratie wat niet makkelijk te doen is."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Super snel alternatief geschreven in C, vereist verstand van libev en linux."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Download het hier: https://github.com/jonashaag/bjoern, compile het"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr "en kopieer bjoern.so naar modele/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Opgelet: In sommige gevallen werkt de builtin server niet, als je problemen hebt met de webinterface."
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "kom terug en verander de builtin server naar de threaded server."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Server"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## SSL setup ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Voer de volgende commando's uit vanuit pyLoad configuratiemap om ssl certificaten te maken:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Als de commando's succesvol uitgevoerd zijn kunt u SSL nu activeren."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "SSL activeren?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Aktie selecteren"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Aanmaken/wijzigen gebruiker"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Lijst met gebruikers"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Gebruiker verwijderen"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Afsluiten"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Gebruikers"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Nieuwe configuratiemap wordt ingesteld, uw huidige configuratie wordt niet overgenomen!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Configuratiepad"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Configuratiepad is veranderd en setup zal nu afsluiten, herstart setup om verder te gaan."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Druk op enter om af te sluiten."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Instellen van configuratiepad mislukt: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: mist"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Wachtwoord: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Wachtwoord te kort. Gebruik ten minste 4 symbolen."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Wachtwoord (nogmaals): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Wachtwoorden kwamen niet overeen."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "ja"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "waar"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "w"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nee"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "niet waar"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "nw"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Ongeldige invoer"
diff --git a/locale/no/LC_MESSAGES/django.po b/locale/no/LC_MESSAGES/django.po
index 069e9851e..37c9905c9 100644
--- a/locale/no/LC_MESSAGES/django.po
+++ b/locale/no/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/no/LC_MESSAGES/pyLoad.po b/locale/no/LC_MESSAGES/pyLoad.po
index 4301f0e07..917ddf78c 100644
--- a/locale/no/LC_MESSAGES/pyLoad.po
+++ b/locale/no/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/no/LC_MESSAGES/pyLoadCli.po b/locale/no/LC_MESSAGES/pyLoadCli.po
index 6853d47a2..9289aa524 100644
--- a/locale/no/LC_MESSAGES/pyLoadCli.po
+++ b/locale/no/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/no/LC_MESSAGES/setup.po b/locale/no/LC_MESSAGES/setup.po
index 1d3d4bd71..634f65415 100644
--- a/locale/no/LC_MESSAGES/setup.po
+++ b/locale/no/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/pa/LC_MESSAGES/django.po b/locale/pa/LC_MESSAGES/django.po
index 8b2152180..4544bcc10 100644
--- a/locale/pa/LC_MESSAGES/django.po
+++ b/locale/pa/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/pa/LC_MESSAGES/pyLoad.po b/locale/pa/LC_MESSAGES/pyLoad.po
index 34a0719a1..89d3570f1 100644
--- a/locale/pa/LC_MESSAGES/pyLoad.po
+++ b/locale/pa/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/pa/LC_MESSAGES/pyLoadCli.po b/locale/pa/LC_MESSAGES/pyLoadCli.po
index 2c76600d5..6e1cd038f 100644
--- a/locale/pa/LC_MESSAGES/pyLoadCli.po
+++ b/locale/pa/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/pa/LC_MESSAGES/setup.po b/locale/pa/LC_MESSAGES/setup.po
index bc7f27197..5998f2af7 100644
--- a/locale/pa/LC_MESSAGES/setup.po
+++ b/locale/pa/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/pl/LC_MESSAGES/django.po b/locale/pl/LC_MESSAGES/django.po
index cbcf51c8d..e44012bae 100644
--- a/locale/pl/LC_MESSAGES/django.po
+++ b/locale/pl/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Nowy obrazek (captcha)"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Proszę przeczytać tekst z obrazka."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad zrestartowano"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "Wył"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Powodzenie"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "Wł"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Na pewno chcesz zamknąć"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Zrestartuj link"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Usuń link"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Podaj nazwę paczki"
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Proszę kliknij na prawej stronie obrazka"
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "błąd"
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Folder jest pusty"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Niepowodzenie"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Brak obrazków (captcha) do odczytania."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Hasło nie pasuje"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Ustawienia zapisano"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nowy folder"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Czy chcesz zrestartować pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "czekaj %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Obecnie pobierane"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "Pobrane"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Logi"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Konfiguracja"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nazwa"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Status"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informacja"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Rozmiar"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Postęp"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Logowanie"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Nazwa uÅŒytkownika"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Hasło"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Nieprawidłowa nazwa uÅŒytkownika lub hasło. Proszę spróbować ponownie."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Aby zresetować dane logowania lub dodać uÅŒytkownika uruchom komendę:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Usuń zakończone"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Nieudany restart"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Katalog:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Hasło:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Edytuj paczkę"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Tutaj edytuj szczegóły paczki."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Nazwa paczki."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Folder"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nazwa podfolderu dla wskazanych pobrań."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lista haseł uÅŒywanych do rozpakowywania."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Wyślij"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Resetuj"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Wylogowano pomyślnie."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "ŚcieÅŒka"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "bezpośrednia"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "względna"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nazwa"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "rozmiar"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "rodzaj"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "ostatnio zmodyfikowany"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "katalog główny"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "brak treści"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Ogólne"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Wtyczki"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Konta"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Wybierz sekcję z menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "WaÅŒne do"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Pozostały transfer"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Czas"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Maksymalnie jednoczesnych pobrań"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Skasować?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "WaÅŒny"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "nie waÅŒny"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "tak"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nie"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Dodaj"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Dodaj konto"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Podaj swoje dane konta do korzystania z funkcji premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Nazwa uÅŒytkownika."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Hasło dla tego konta."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Typ"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Wybierz hosting dla Twojego konta."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Uruchom"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "poprzedni"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "następny"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Koniec"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Wiadomości"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Wsparcie"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "System operacyjny:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "Wersja pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Folder instalacji:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Folder konfiguracji:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Folder pobierania:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Wolne Miejsce:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Język:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Port interfejsu web:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Port interfejsu zdalnego:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Ustawienia"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "MenedŌer plików"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Dodaj paczkę"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Wklej linki lub wczytaj kontener."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Nazwa nowej paczki."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Linki"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Tutaj wklej linki lub dowolny tekst i wciśnij przycisk filtra."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtruj adresy url"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Hasło do archiwum RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Plik"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Wczytaj kontener."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Miejsce docelowe"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Odczyt captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "Captcha (obrazek)"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Tekst"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Wprowadź tekst z obrazka (captcha)."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Zamknij"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Interfejs Web"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Dostępna aktualizacja dla pyLoad'a!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Wtyczki zaktualizowane, zrestartuj program!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Oczekiwanie na captcha"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Wyloguj"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Zarządzaj"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Informacje"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Zaloguj się!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Zatrzymaj"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Anuluj"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Pobrane:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Połącz ponownie:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Prędkość:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktywny:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "OdświeÅŒ stronę"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "wczytywanie"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Powrót na początek strony"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Zamknij pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Zrestartuj pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Aby dodać uÅŒytkownika lub zmienić hasło uÅŒyj:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Uwaga: Administrator ma zawsze wszystkie prawa!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Zmiana Hasła"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Administrator"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Uprawnienia"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "zmień"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Wprowadź swoje hasło"
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "UÅŒytkownik"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Aktualne hasło"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nowe hasło"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Nowe hasło."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nowe hasło (powtórz)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Proszę powtórzyć nowe hasło."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Nie posiadasz uprawnień dostępu do tej strony."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Nie znaleziono katalogu pobierania."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "Bez limitu"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "niedostępny"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "UÅŒyj polecenia pyload.py-s aby uzyskać dostęp do ustawień"
diff --git a/locale/pl/LC_MESSAGES/pyLoad.po b/locale/pl/LC_MESSAGES/pyLoad.po
index f7ca6734d..6247f50c8 100644
--- a/locale/pl/LC_MESSAGES/pyLoad.po
+++ b/locale/pl/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Otrzymano sygnał zakończenia"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad jest juŌ uruchomiony - proces %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Niepowodzenie przy zmianie grupy: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Niepowodzenie przy zmianie uÅŒytkownika: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "katalog na logi"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Rozpoczynam"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "UÅŒywam katalogu domowego: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto deszyfruje pliki kontenera"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "katalog dla plików tymczasowych"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "katalog na pobrane pliki"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL dla połączenia szyfrowanego"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Przenoszę starą konfigurację uÅŒytkownika do Bazy Danych"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Sprawdź dane logowania komendą ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Wszystkie linki zostały usunięte"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "Czas pobierania: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Wolne miejsce: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Aktywacja kont ..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Włączanie wtyczek ..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad jest uruchomiony i działa"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "restartuję pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad kończy działanie"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Zainstaluj %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "nie moÅŒna znaleźć %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "nie moÅŒna utworzyć %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "wyłączanie..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "błąd przy wyłączaniu"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "proces pyLoad wyłączono z poziomu terminala"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Baza plików została usunięta z powodu braku niekompatybilnej wersji."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Nie moÅŒna przekonwertować Bazy plików."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Przekonwertowano Bazę Danych z wersji v2 do v3. "
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Przekonwertowano Bazę Danych z wersji v3 do v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Konwertuję bazę Django do nowszej wersji"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "zakończono"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "zakolejkowane"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "pominięte"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "oczekuję"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "tymczasowo offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "rozpoczynam"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "niepowodzenie"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "anulowno"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "rozkodowuję"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "własny"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "pobieranie"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "przetwarzanie"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "nieznany"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paczka ukończona: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "UÅŒyj SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Błąd zdalnego zaplecza: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Uruchamiam %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Bład ładowania backendu %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "czekaj %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Nie znaleziono certyfikatów SSL."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Nie zalecamy uruchamiania %s bezpośrednio z pyLoad - zaprzestano wsparcia"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "MoÅŒesz wykorzystać wielowątkowy serwer oferujący dobrą wydajność i szyfrowanie ssl,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "oczywiście nadal moÅŒesz uÅŒywać %s z serwerem pyLoad fastcgi "
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "przykładowe konfiguracje znajdziesz w podkatalogu module/webui/servers "
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "przykładowe konfiguracje znajdziesz w podkatalogu pyload/webui/servers "
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Nie moÅŒna uÅŒyć %(server)s - niezainstalowany python-flup "
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Błąd importu lightweight server: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "NaleÅŒy pobrać i skompilować bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Skopiuj plik boern.so do folderu module/lib lub uÅŒyj polecenia setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Skopiuj plik boern.so do folderu pyload/lib lub uÅŒyj polecenia setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Oczywiście trzeba znać Linuksa i wiedzieć, jak się kompiluje programy"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Ze względu na znane problemy z wydajnością w systemie Windows ustaw serwer na threaded"
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Ten serwer nie wspiera SSL, naleÅŒy rozwaÅŒyć uÅŒycie serwera threaded"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Uruchamiam wbudowany webserwer: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Uruchamiam wielowątkowy webserwer z szyfrowaniem SSL: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Uruchamiam wielowątkowy serwer: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Uruchamiam serwer fastcgi: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Uruchamianie serwera lightweight (bjoern):% (host) s:% (port) d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Nie posiadasz uprawnień dostępu do tej strony."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Nie znaleziono katalogu pobierania."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "Bez limitu"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "niedostępny"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "UÅŒyj polecenia pyload.py-s aby uzyskać dostęp do ustawień"
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Pobranie fragmentów nie powiodło się, powrót do pojedynczego połączenia | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Pobieranie rozpocznie się: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Pobieranie zakończono: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Wtyczka %s nie zawiera funkcji."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Pobieranie przerwane: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Pobieram ponownie: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Pobieranie jest wyłączone: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Pobieranie jest tymczasowo niedostępne:% s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Pobieranie nie powiodło się: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Brak połączenia z hostem lub połączenie zostało zresetowane, zaczekaj 1 minutę i spróbuj ponownie."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Pominięto pobieranie: %(name)s z powodu %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Rozpoczęto rozszyfrowywanie: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "Rozszyfrowywanie nie powiodło się: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Ponawianie %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Pobieranie informacji o %(name)s nie powiodło się | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Błąd przy uruchomieniu: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Nie powiodła się aktywacja %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Aktywne wtyczki:% s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Nieaktywne wtyczki:% s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Nieudane ponowne łączenie: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Nie znaleziono skryptu ponownego łączenia!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Uruchamiam ponowne łączenie"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Niepowodzenie przy uruchamianiu skryptu ponownego łączenia!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Ponownie połączony, nowe IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Zbyt mało miejsca na dysku"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Nie moÅŒna zalogować się na koncie %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Hasło nieprawidłowe"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Format czasu %s jest nieprawidłowy, uÅŒyj: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Konto % s generuje zbyt mały ruch, sprawdź ponownie za 30min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Konto %s wygasło, sprawdź ponownie za 1godz"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Osiągnięto limit transferu"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s zawiera błędny wzorzec."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Błąd przy imporcie %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Nie załadowano Hostera"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Uaktywnij pobieranie bezpośrednie w ustawieniach swojego konta Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "Nie moÅŒna wyczyścić zawartości LinkList."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "Ustawienia konta usunięto po wprowadzeniu nowego formatu konfiguracji."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Wymagana autoryzacja (uÅŒytkownik:hasło)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Proszę wejść na konto %s lub wyłączyć wtyczkę"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "W pobranym pliku (%s) był kod HTML... przekierowanie błędu? Pobieranie zostanie uruchomione ponownie."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Plik czasowo niedostępny"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: Oczekiwanie pomiędzy pobraniami %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: czekam na captcha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Pobrany plik był pusty"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "niepoprawny klucz API"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Pozostało zbyt mało transferu"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Przekroczono transfer"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Współdzielenie ruchu (bezpośrednie pobieranie)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Trwa pobieranie spod tego adresu IP. Odczekaj 60 sekund"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Błędny kod autoryzacji. Pobieranie zostanie wznowione"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidshareCom: Brak wolnych slotów"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Ten plik wymaga konta premium"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Zgłoszono nieprawidłową nazwę pliku"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Błąd równoległego pobierania, odczekaj 60s."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Nie zalogowany."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Odszyfrowywanie nie powiodło się"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Nie umieszczono plik klucza w adresie URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Kod błędu:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Plik nie istnieje."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Wtyczki zostały zaktualizowane, proszę zrestartować pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Wtyczki zaktualizowane i przeładowane"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Brak dostępnych aktualizacji wtyczek"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Brak aktualizacji dla pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Dostępna nowa wersja %s ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Pobierz stąd: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Brak połączenia z serwerem aktualizacji"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nowa wersja %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Podczas aktualizacji wystąpił bląd %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Niezgodność wersji"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Pobieranie zakończono: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nowe Ōądanie captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "W odpowiedzi uÅŒyj 'c %s tekst z captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "Najpierw dodaj swoje konto premium.to i zrestartuj pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Dodano %s z HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "Nie zainstalowano %s"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Nie moÅŒna aktywować %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Aktywowany"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Brak aktywnych wtyczek do rozpakowywania plików"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Pakiet %s zakolejkowany do rozpakowania"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Sprawdzanie paczki %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Wypakowano %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Nie znaleziono plików do rozpakowania"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "wypakowuję"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Zabezpieczone hałsem"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Nieprawidłowe hasło"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Usuwanie %s plików"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Wypakowanie zakończone"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Błąd archiwum"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "Nieprawidłowa suma kontrolna CRC"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Wystąpił nieznany błąd"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Ustawienie uÅŒytkowników i grup nie powiodło się: %s"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Wtyczka Click'N'Load: Port 9666 jest zajęty"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "Pozostało %s punktów"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Nie moÅŒe wysłać odpowiedzi."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Posiadasz zbyt małą ilość punktów na koncie CaptchaTrader"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Nie odnaleziono listy Crypter"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Lista Crypter jest pusta"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Pobieranie zakończono: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Nowe CaptchaID z uploadu: %s: %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Twoje konto captcha 9kw.eu nie ma wystarczająco kredytów"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "Zainstalowane skrypty dla %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Niewykonywalny skrypt:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Błąd w %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Twoje konto ExpertDecoders nie ma wystarczająco kredytów"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Najpierw dodaj swoje konto rehost.to i zrestartuj pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "Dodaj najpierw waÅŒne konto premiumize.me i zrestartuj pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "Pozostało %s punktów"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Nie zainstalowano modułów pil i tesseract oraz brak połączenia z serwisem dekodującym captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Żaden z serwisów nie odkodowal captcha w dopuszczalnym czasie. "
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Ustawienia uÅŒytkowników i grup nie powiodło się: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Odkodowanie Captcha nieaktywne"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Dodano paczkę %(name)s zawierającą %(count)d linków"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Dodano %(count)d linków do paczki #%(package)d"
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Nie znaleziono silnika JavaScript, zainstaluj SpiderMonkey, ossp-js, pyv8 lub rhino"
diff --git a/locale/pl/LC_MESSAGES/pyLoadCli.po b/locale/pl/LC_MESSAGES/pyLoadCli.po
index eebdeeba7..44144e7dd 100644
--- a/locale/pl/LC_MESSAGES/pyLoadCli.po
+++ b/locale/pl/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "Interfejs Linii Komend"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Pobrań:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "Prędkość:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "Rozmiar:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "Zakończono w:"
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "Oczekiwanie:"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "Wstrzymane"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "Aktywne"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Prędkość pobierania"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Pliki w kolejce"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Ogółem"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "Dodaj linki"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Zarządzaj kolejką"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Zarządzanie poczekalnią linków"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "Zatrzymaj/Wznów serwer"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "Wyłącz serwer"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "Wyjście"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "UÅŒywamy składni: add <Package name> <link> <link2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Sprawdzanie linków %d:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Plik nie istnieje."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad został wyłączony"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Wyświetla status serwera"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Wyświetla pobierane pliki z kolejki"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Wyświetla pobierane pliki z poczekalni"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Dodaje pakiet do kolejki"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Dodaje paczkę do poczekalni"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Usuń pliki z Kolejki/Poczekalni"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Usuń Paczki z Kolejki/Poczekalni"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Przenoszenie paczek z kolejki do poczekalni i odwrotnie"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Zrestartuj pliki"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Zrestartuj paczki"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Sprawdź status online, współpracuje z lokalnym kontenerem"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Sprawdź stan online pliku kontenera"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Wstrzymaj serwer"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "kontynuuj pobieranie"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Wstrzymaj/Wznów"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "wyłącz serwer"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista poleceń:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Nie moÅŒna zapisać pliku konfiguracyjnego"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Do połączenia z pyLoad Core wymagana jest instalacja py-openssl."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adres:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "UÅŒytkownik:"
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Hasło:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Błędne dane logowania."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Nie moÅŒna połączyć z %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Do połączenia z pyLoad Core wymagana jest instalacja py-openssl."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Tryb interaktywny wyłączono po wprowadzonych komendach."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Dodaj pakiet:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Wprowadź nazwę dla nowego pakietu"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Pakiet: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analizuj linki które chcesz dodać."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Napisz %s gdy ukończone."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Dodanych linków:"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "powrót do głównego menu"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Zarządzanie pakietami:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Zarządzaj linkami:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Czy chcesz przenieść?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Czy na pewno chcesz usunąć?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Czy chcesz zrestartować?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Wybierz, co chcesz wykonać lub wprowadź numer paczki."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "skasuj"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "przenieś"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "Restart"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr "- poprzedni"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - następny"
diff --git a/locale/pl/LC_MESSAGES/setup.po b/locale/pl/LC_MESSAGES/setup.po
index 9bebff39f..a05658825 100644
--- a/locale/pl/LC_MESSAGES/setup.po
+++ b/locale/pl/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "t"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Witamy w asystencie konfiguracji pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Dokona sprawdzenia systemu i ustawi podstawowe parametry potrzebne do uruchomienia pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Wartość w nawiasach kwadratowych [] jest zawsze domyślną,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "jeśli nie chcesz zmieniać wartości lub nie masz pewności co wybrać, naciśnij enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Nie zapomnij: kiedy uruchamiasz pyload.py zawsze moÅŒesz ponownie wybrać asystenta dodając parametr --setup lub -s."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Jeśli masz jakiekolwiek problemy z asystentem wciśnij Ctlr-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "aby go zatrzymać i nie pozwolić mu automatycznie uruchomić się z pyload.py . "
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Naciśnij enter jak będziesz gotowy na sprawdzenie systemu."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Potrzebujesz pycurl, sqlite i pythona 2.5, 2.6 lub 2.7 aby uruchomić pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Proszę popraw to i ponownie uruchom pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Instalator teraz zakończy działanie."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Zakończono sprawdzanie systemu, naciśnij enter w celu obejrzenia raportu."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Stan ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "rozszyfrowywanie kontenerów"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "połączenie SSL"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "automatyczne rozpoznawanie captcha"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Interfejs Web"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "rozszerzone Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Dostępne funkcje:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Niedostępne funkcje:"
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto jest niedostępny"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Potrzebujesz go jeśli chcesz rozszyfrowywać pliki kontenerowe."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL niedostępny"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Jest to potrzebne jeśli chcesz nawiązywać szyfrowane połączenia z Core lub interfejsem Web."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Jeśli chcesz mieć dostęp tylko lokalny - SSL nie jest uÅŒyteczne."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "brak rozpoznawania captcha"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Potrzebne tylko do niektórych serwisów dla kont darmowych."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Interfejs graficzny niedostępny"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Graficzny Interfejs UÅŒytkownika."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "nie znaleziono silnika JavaScript"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Do dodania kilku linków jednocześnie będziesz potrzebował Click'N'Load. Zainstaluj SpiderMonkey, ossp-js, pyv8 lub rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "MoÅŒesz przerwać instalator i naprawić niektóre zaleÅŒności."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Kontynuować instalację?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Czy chcesz zmienić ścieÅŒkę do plików konfiguracji? Obecnie to %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Jeśli uÅŒywasz pyLoad'a na serwerze lub partycji home która znajduje się na pamięci flash - dobrym pomysłem moÅŒe być zmiana tego parametru."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Zmienić ścieÅŒkę dla plików konfiguracji?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Czy chcesz dokonać konfiguracji logowania i ustawień podstawowych?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Jest to wymagane przy pierwszym uruchomieniu."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Stworzyć podstawowe ustawienia?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Czy chcesz ustawić SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Ustawić SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Czy chcesz ustawić interfejs Web?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Ustawić interfejs Web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Instalacja zakończona pomyślnie."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Naciśnij enter aby wyjść i ponownie uruchom pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Sprawdzenie systemu ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Zainstalowana wersja Python'a jest zbyt nowa, Proszę uÅŒyć wersji 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Zainstalowana wersja Python'a jest zbyt stara, Proszę uÅŒyć przynajmniej wersji 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Wersja Python'a: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Zainstalowana jinja2 w wersji %s jest przestarzała."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "MoÅŒesz kontynuować pracę, ale interfejs Web nie będzie czynny,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "uaktualnij lub odinstaluj, pyLoad zawiera odpowiednią wersję biblioteki jinja2."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "silnik Java Skrypt"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Podstawowe Ustawienia ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Następujące parametry logowania są odpowiednie dla CLI, GUI i interfejsu Web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Nazwa uÅŒytkownika"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Klienty zewnętrzne (GUI, CLI lub inne) potrzebują zdalnego połączenia do działania przez sieć."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "JeÅŒeli chcesz uÅŒywać tylko interfejsu web moÅŒesz dezaktywować to aby zaoszczędzić pamięć."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Włącz zdalny dostęp"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Język"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Folder pobierania"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Maksymalna liczba jednoczesnych pobrań"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "UÅŒywać ponownego łączenia?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Lokalizacja skryptu do ponownego łączenia"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Ustawienia interfejsu Web ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Aktywować interfejs Web?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adres do nasłuchu, jeśli uÅŒyjesz 127.0.0.1 lub localhost, interfejs Web będzie dostępny jedynie lokalnie."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adres"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad oferuje kilka typów serwerów backends, a teraz po krótce wyjaśniam."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Serwer domyślny, najlepszy wybór, jeśli nie wiesz który wybrać."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Ten serwer wspiera SSL i jest dobrą alternatywą dla builtin."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "MoÅŒe być uÅŒywany przez apache, lighttpd, wymaga od Ciebie ich konfiguracji, która nie jest zbyt łatwym zadaniem."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Bardzo szybka alternatywa, napisany w C, wymaga libev i znajomości Linuxa"
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Pobierz go stąd: https://github.com/jonashaag/bjoern, i skompiluj go"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "i skopiuj plik bjoern.so do katalogu module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "i skopiuj plik bjoern.so do katalogu pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Uwaga: W pewnych, rzadkich przypadkach serwer builtin nie działa, jeśli występują problemy z interfejsem WWW"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "wróć tu i zmień serwer builtin na threaded"
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Serwer"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## Ustawienia SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "W celu wygenerowania certyfikatów ssl uruchom następujące komendy z katalogu pyload:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Jeśli wszystko pomyślnie się zakończyło, moÅŒesz aktywować SSL."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Aktywować SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Wybierz działanie"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1- Utwórz/Edutuj uŌytkownika"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2- PokaŌ uŌytkowników"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Usuń uÅŒytkownika"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4- Wyjście"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "UÅŒytkownicy"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Ustawiam nową ścieÅŒkę do plików konfiguracji, obecna konfiguracja nie zostanie tam przeniesiona!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "ŚcieÅŒka do plików konfiguracji"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "ŚcieÅŒka do plików konfiguracji została zmieniona, Instalator zostanie teraz zamknięty, uruchom go ponownie, aby przejść dalej."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Naciśnij Enter aby zakończyć."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Ustawienie ścieÅŒki do plików konfiguracji nie powiodło się: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: brakuje"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Hasło:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Hasło za krótkie. UÅŒyj przynajmniej 4 znaków."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Hasło (ponownie):"
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Hasło nie pasuje"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "tak"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "prawda"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nie"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "fałsz"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Błędne dane"
diff --git a/locale/pt/LC_MESSAGES/django.po b/locale/pt/LC_MESSAGES/django.po
index 6b0a4f5bc..07d1ea2f8 100644
--- a/locale/pt/LC_MESSAGES/django.po
+++ b/locale/pt/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Pedir novo Captcha"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Por favor leia o texto do captcha."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad reiniciou"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "desligado"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Sucesso"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "ligado"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Tem a certeza que quer sair do pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Reiniciar Link"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Apagar Link"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Introduza o nome do pacote."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Por favor clique na posição correta do captcha."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Ocorreu um erro."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Pasta vazia"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Falhou"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Sem Captchas para ler."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "As senhas não correspondem."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Configurações guardadas."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Nova pasta"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Tem a certeza que deseja reiniciar o pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Downloads Activos"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Inicio"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Registo de ocorrências"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Configuração"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Nome"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Status"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Informação"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Tamanho"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Progresso"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Login"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Nome do usuário"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Senha"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "O utilizador e a senha não correspondem. Tente novamente."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Para restabelecer a sua informação de login ou adicionar um utilizador execute:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Apagar os terminados"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Reinício falhou"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Pasta:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Senha:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Editar Pacote"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Edite os detalhes do pacote abaixo."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "O nome do pacote."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Pasta"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Nome da sub-pasta para estes downloads."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lista das passwords usadas para extrair."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Enviar"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Restabelecer"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Terminou a sessão com sucesso."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Caminho"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absoluto"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativo"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "nome"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "tamanho"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tipo"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "última modificação"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "diretoria superior"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "sem conteúdo"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Geral"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Contas"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "Escolha uma das secções do menu"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Válida até"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Tráfego remanescente"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tempo"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Máximos Paralelos"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Apagar?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "válido"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "não válido"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "sim"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "não"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Adicionar"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Adicionar conta"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Introduza os dados da sua conta para utilizar as características premium."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "O seu nome de utilizador."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "A senha para esta conta."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "Tipo"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Escolha o host da sua conta."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Iniciar"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "anterior"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "próximo"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Fim"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Novidades"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Ajuda"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistema"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "SO:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "Versão do pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Pasta de instalação:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Pasta das configurações:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Pasta de Downloads:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Espaço Livre:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Idioma:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Porta do Webinterface:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Porta do interface remoto:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Configurações"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Adicionar pacote"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Introduza os seus links ou carregue um container."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Nome do novo pacote."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Introduza aqui os seus links ou texto e carregue no botão filtrar."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrar urls"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Senha para o arquivo RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Ficheiro"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Carregar um container."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Destino"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "A ler captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "O captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Texto"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Introduza o texto do captcha."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Fechar"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "Atualização do pyLoad disponível!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins atualizados, por favor reinicie!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha a aguardar"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Sair"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrar"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Informações"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Inicie a Sessão!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Parar"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Cancelar"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Restabelecer ligação:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Velocidade:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Activo:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Atualizar página"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "a carregar"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Voltar para o topo"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Sair do pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Reiniciar pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Para adicionar um utilizador ou alterar senhas utilize:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Importante: o Administrador tem sempre todas as permissões!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Alterar a senha"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "Administrador"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Permissões"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "alterar"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Introduza a sua senha actual e a desejada."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Utilizador"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Senha atual"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nova senha"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "A nova senha."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "A nova senha (repetir)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Por favor repita a nova senha."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "ilimitado"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/pt/LC_MESSAGES/pyLoad.po b/locale/pt/LC_MESSAGES/pyLoad.po
index 00f04a239..3dbe39ee1 100644
--- a/locale/pt/LC_MESSAGES/pyLoad.po
+++ b/locale/pt/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "sinal de Sair recebido"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad já está rodando com pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Falha ao trocar grupo: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Falha ao trocar de usuario: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Iniciando"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Usando diretório: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Todos os links foram removidos"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Espaço livre: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Ativando contas..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad está rodando"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "reiniciando pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad fechou"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "desligando..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "erro durante desligamento"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "Terminado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "Offline"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "Online"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "em fila"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "ignorada"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "esperando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "Temp. off-line"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "iniciando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "falhou"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "abortada"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "descriptografando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "personalizado"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "Transferindo"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "processando"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "desconhecido"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Pacote finalizado: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Erro de back-end remoto: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Iniciando %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Falha ao carregar back-end %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "Certificado SSL não encontrado."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Este servidor não oferece SSL, por favor, considere usar HTTP{?} em vez disso"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "ilimitado"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "pedaços do Download falharam, retornar para conexão simples |%s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Inicio do Download: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Termino do Download: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Plugin %s está sem uma função."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Download abortado: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "Download reiniciado: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Download está offline: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Download esta temporariamente offline: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "Download falhou: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Impossível conectar com o host ou a conexão receptou, tentar novamente em 1 minuto."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Download pulado: %(name)s pois %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Busca de informações para %(name)s falhou|%(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Falha de ativação %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Reconectar Falhou: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Script de reconexão não encontrado!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Iniciando reconexão"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Falha ao executar script de reconexão!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Reconectado, novo IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Espaço insuficiente no dispositivo"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Não pode ligar com a conta %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Senha incorreta"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "A conta %s não tem tráfego suficiente, checando novamente em 30 min"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "A conta %s expirou, checando novamente em 1h"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "Limite de Download alcançado"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Erro ao importar %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Nenhum Hoster carregado"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Ativar Download direto em sua conta Bitshare"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Autorização necessaria (nome de usuario: senha)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "Por favor entre sua %s conta ou desative este plugin"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "Havia código HTML no arquivo baixado (%s)...erro de redirecionamento? O Download vai ser reiniciado."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Arquivo temporariamente indisponível"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: esperar entre os Downloads %d s."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: esperando por capacha %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Arquivo baixado estava vazio"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "Chave de API inválida"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: Tráfego restante insuficiente"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Tráfego excedido"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Compartilhamento de tráfego (Download direto)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Ja está baixando deste endereço de ip, espere 60 segundos"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Código de autenticação invalido, Download vai ser reiniciado"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Sem slots vazios"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Você precisa de uma conta premium para este arquivo"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Nome do arquivo relatado como invalido"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Erro de Download paralelo, esperar 60 segundos."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "Não está logado."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "Descriptografia falhou"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Nenhum arquivo chave fornecido na URL"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Codigo do erro:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Plugins foram atualizados, por favor reinicie o pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Plugins atualizados e recarregados"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Nenhuma atualização de plugin disponível"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Nenhuma atualização para o pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "* * * Nova versão %s do pyLoad disponível * * *"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "* * * faça o Download em : http://pyload.org/download * * *"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Impossível conectar com o servidor de atualizações"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Nova versão de %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Erro ao atualizar %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "Incompatibilidade de versão"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Download concluído: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Nova solicitação de Captcha: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Responder com 'c %s o texto no captcha'"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "Adicionado %s de HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "Sem %s instalado"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Não foi possível activar o %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Ativado"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Não ha plugins de extração ativos"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Pacote %s enfileirados para extração posterior"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "Verificar pacote %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Extrair para %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Arquivos não encontrados para extrair"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "extraindo"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Protegido por senha"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Senha incorreta"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "Excluindo %s arquivos"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Extração terminada"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Erro de arquivo"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "Incompatibilidade de CRC"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Erro desconhecido"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Configuração de usuário e grupo falhou"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'n'Load: porta 9666 já está em uso"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s créditos sobrando"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Não pode enviar resposta."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Sua conta CaptchaTrader não tem créditos suficientes"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Lista do Crypter não encontrada"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Lista do Crypter vazia"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Download terminado: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Novo CaptchaID do upload: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Sua conta 9kw.eu não tem créditos suficientes"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "scripts instalados para %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Scrip não executável:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Erro em %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "Sua conta ExpertDecoders não tem créditos suficientes"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "Por favo adicione sua conta rehost.to antes de reiniciar o pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d créditos sobrando"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil e tesseract não estão instalados e nenhum cliente está conectado para reconhecimento de captcha"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Configuração de usuário e grupo falhou: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/pt/LC_MESSAGES/pyLoadCli.po b/locale/pt/LC_MESSAGES/pyLoadCli.po
index 49a9ff501..847c98c40 100644
--- a/locale/pt/LC_MESSAGES/pyLoadCli.po
+++ b/locale/pt/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Interface de Linha de Comandos"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Velocidade: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Tamanho: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Terminado em: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "em espera: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Estado:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "pausados"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "em execução"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Velocidade total"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Arquivos na fila"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Adicionar Links"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Gerir Fila"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Gerir Coletor"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " Parar/Retomar servidor"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Terminar Servidor"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Sair"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "Por favor, use esta sintaxe: Adicionar <Nome do Pacote> <link> <link2>..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Checar %d links:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "O arquivo não existe."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad foi finalizado"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Estado do servidor de impressões"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Cópias de downloads na fila"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Cópias de downloads no coletor"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Adicionar pacotes para a fila"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Adicionar pacotes para o coletor"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Deletar arquivos da fila/coletor"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Deletar pacotes da fila/coletor"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Mover pacotes da fila para o coletor ou vice-versa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Reiniciar arquivos"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Reiniciar pacotes"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Verificar o estado online, trabalhar com recipiente local"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Verifica o estado online de um arquivo de contêiner"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Colocar servidor em Pausa"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "continuar downloads"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Alternar pausa/retomar"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "terminar servidor"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista de comandos:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Não foi possível escrever o arquivo de configuração do usuário"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Endereço: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Porta: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Nome do usuário: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Senha: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Dados de login estão errados."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Não conseguiu estabelecer conexão com %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "você precisa do py-openssl para se conectar com o pyLoad core."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "O modo interativo foi ignorado pois alguns comandos foram pulados por você."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Adicionar Pacote:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Insira um nome para o novo pacote"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Pacote: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Analise os links que você deseja adicionar."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Digite %s quando terminar."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Links adicionados: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " voltar ao menu principal"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Gerenciar pacotes:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Gerenciar Links:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "O que você deseja mover?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "O que você deseja excluir?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "O que você deseja reiniciar?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "deletar"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "mover"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "reiniciar"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - anterior"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - próximo"
diff --git a/locale/pt/LC_MESSAGES/setup.po b/locale/pt/LC_MESSAGES/setup.po
index 66923aa8d..989c21fab 100644
--- a/locale/pt/LC_MESSAGES/setup.po
+++ b/locale/pt/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "s"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Bem-vindo ao assistente de configuração do pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Ele irá verificar o seu sistema e fazer uma configuração básica para executar o pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "O valor entre colchetes [] é sempre o valor padrão,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "no caso de você não quer mudá-lo ou você não tiver certeza qual escolher, apenas tecle enter."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Não se esqueça: você sempre pode executar novamente o assistente com os parâmetros --setup ou -s, quando você iniciar o pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "para cancelar e não deixá-lo iniciar automaticamente com pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Quando estiver pronto para verificação do sistema, aperte enter."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Continuar com a configuração?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Você quer alterar o caminho de configuração? O atual é %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Alterar o caminho de configuração?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Você quer configurar dados de login e configurações básicas?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Isto é recomendável para a primeira execução."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Fazer a configuração básica?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Você quer configurar o ssl?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Configurar o ssl?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Você quer configurar a interface WEB?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Configurar a interface Web?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Configuração concluída com êxito."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Aperte enter para sair e reiniciar o pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "# # Instalação basica # #"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Os dados de login à seguir é válido para o CLI, GUI e interface Web."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Nome do usuário"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Língua"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "nº Downloads paralelos"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Usar Reconectar?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Local do script de reconexão"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "# # Instalação da interface WEB# #"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Ativar webinterface?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Endereço de escuta, se você usar 127.0.0.1 ou localhost, a interface Web será acessível apenas localmente."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Endereço"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Porta"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "O pyLoad oferece vários backends de servidor, a seguir uma breve explicação."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Pode ser usado pelo apache, lighttpd, requer que você os configure, o que não é tarefa muito fácil."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Pegue-a daqui: https://github.com/jonashaag/bjoern, é só compilar"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Atenção: Em alguns casos raros o servidor builtin não está funcionando, se você notar problemas com a interface Web"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "Volte aqui e mude o servidor builtin para o threaded ."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Servidor"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "# # Configuração SSL # #"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Execute esses comandos na pasta de configuração do pyLoad para fazer certificados ssl:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Se você está pronto e tudo correu bem, você pode ativar o ssl agora."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Ativar SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Selecione a ação"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Criar/editar usuário"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Lista de usuários"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Remover usuário"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Sair"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Usuários"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Pressione Enter para sair."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "A troca do caminho de configuração falhou: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Senha: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Senha muito curta. Use pelo menos 4 caracteres."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Senha (novamente): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "As senhas não correspondem."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "sim"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "verdadeiro"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "v"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "não"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "falso"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Entrada inválida"
diff --git a/locale/ro/LC_MESSAGES/django.po b/locale/ro/LC_MESSAGES/django.po
index 6a4afa0d0..5dfc685da 100644
--- a/locale/ro/LC_MESSAGES/django.po
+++ b/locale/ro/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/ro/LC_MESSAGES/pyLoad.po b/locale/ro/LC_MESSAGES/pyLoad.po
index e798cc988..c50b5c540 100644
--- a/locale/ro/LC_MESSAGES/pyLoad.po
+++ b/locale/ro/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/ro/LC_MESSAGES/pyLoadCli.po b/locale/ro/LC_MESSAGES/pyLoadCli.po
index 26a3f1f88..17acda928 100644
--- a/locale/ro/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ro/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/ro/LC_MESSAGES/setup.po b/locale/ro/LC_MESSAGES/setup.po
index aed4d803e..8520f88e1 100644
--- a/locale/ro/LC_MESSAGES/setup.po
+++ b/locale/ro/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/ru/LC_MESSAGES/django.po b/locale/ru/LC_MESSAGES/django.po
index 908d4684d..d6c3d748d 100644
--- a/locale/ru/LC_MESSAGES/django.po
+++ b/locale/ru/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "ЗапрПс МПвПй картОМкО."
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "ПрПчОтайте текст Ма рОсуМке."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "ПрПграЌЌа pyLoad заМПвП загружеМа."
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "выкл."
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "УспешМП"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "вкл."
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Вы увереМы, чтП хПтОте закПМчОть pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "ПерезапустОть ссылку"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "УЎалОть ссылку."
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "ВвеЎОте ОЌя кПМтейМера."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "ППжалуйста клОкМОте Ма правОльМую пПзОцОю картОМкО."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "СвершОлась ПшОбка."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Папка пуста"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "СбПй"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Нет рОсуМка Ўля прПчтеМОя."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "ПарПлО Ме сПвпаЎают."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "CПхраМеМОя устаМПвПк завершОлась."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "НПвая папка"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Вы увереМы, чтП хПтОте перезагрузОть pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "ПжОЎаМОе %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "АктОвМые загрузкО"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "ДПЌПй"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "ЗакачкО"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Отчёты"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "НастрПйкО"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "НазваМОе"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Статус"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "ИМфПрЌацОя"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "РазЌер"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "ПрПгресс"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "ЛПгОМ"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "ППльзПватель"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "ПарПль"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "НеправОльМые ОЌя пПльзПвателя ОлО парПль! ППпрПбуйте еще раз."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Для сбрПса свПОх ЎаММых ОлО ЎПбавлеМОя МПвПгП пПльзПвателя запустОте: "
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "УЎалОть завершёММые"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "ПерезапустОть МеуЎавшОеся"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Папка:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "ПарПль:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "РеЎактОрПвать кПМтейМер"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "РеЎактОрПваМОе Ўеталей кПМтейМера."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "ИЌя кПМтейМера."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Папка"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "ИЌя пПЎпапкО Ўля этОх загрузПк."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "СпОсПк парПлей, ОспПльзуеЌых Ўля распакПвкО."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "ОтправОть"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "СбрПс"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Вы успешМП вышлО."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Путь"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "абсПлютМый"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "ПтМПсОтельМый"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "ОЌя"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "разЌер"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "тОп"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "пПслеЎМее ОзЌеМеМОе"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "рПЎОтельская папка"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "Птсутствует сПЎержОЌПе"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "ОсМПвМые"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "ПлагОМы"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "АккауМты"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "ВыберОте секцОю ЌеМю"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "ПрОлПжеМОе"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "ПреЌОуЌ аккауМт"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "ГПЎеМ ЎП"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "ОсталПсь трафОка"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "ВреЌя"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Макс. пПтПкПв"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "УЎалОть?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "ЎействОтелеМ"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "Ме гПЎеМ"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "Ўа"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "Мет"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "ДПбавОть"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "ДПбавлеМОе учетМПй запОсО"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "УкажОте преЌОуЌ аккауМт Ўля ОспПльзПваМОя всех егП вПзЌПжМПстей."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "ИЌя пПльзПвателя."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "ПарПль Ўля этПй учетМПй запОсО."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "ТОп"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "ВыберОте хПстОМг."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "НачалП"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "преЎ."
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "слеЎ."
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "КПМец"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "НПвПстО"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "ППЎЎержка"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "СОстеЌа"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "ОС:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "ВерсОя pyLoad:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Папка устаМПвкО:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Папка МастрПек:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "Папка скачаММПгП:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "СвПбПЎМП:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Язык:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "ППрт WEB ОМтерфейса:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "ППрт уЎалеММПгП управлеМОя:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "УстаМПвка"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Ѐайл ЌеМеЎжер"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "ДПбавОть кПМтейМер"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Вставьте ссылкО ОлО загрузОте кПМтейМер."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "ИЌя МПвПгП кПМтейМера."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "СсылкО"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Вставьте зЎесь ссылкО О МажЌОте \"ЀОльтр\""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "ЀОльтр"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "ПарПль Ўля архОва RAR"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Ѐайл"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "ЗагрузОть кПМтейМер."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "НазМачеМОе"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "ЧтеМОе картОМкО"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "КартОМка"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "КартОМка."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Текст"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "ВвеЎОте текст с картОМкО."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Закрыть"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Web-ОМтерфейс"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "ДПступМы ПбМПвлеМОя pyLoad!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "ПлагОМы ПбМПвлеМы, перезапустОте pyLoad!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "ОжОЎаеЌ рОсуМПк"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "ВыйтО"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "АЎЌОМОстрОрПваМОе"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "ИМфПрЌацОя"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "ППжалуйста, вПйЎОте сП свПОЌО учётМыЌО ЎаММыЌО!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "СтПп"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "ОтЌеМОть"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "Загрузка:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "ПерепПЎключеМОе:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "СкПрПсть:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "АктОвМые:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "ОбМПвОть страМОцу"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "загрузка"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Вверх"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "ЗавершОть pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "ПерезапустОть pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Для ЎПбавлеМОя пПльзПвателя ОлО ОзЌеМеМОя парПля:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "ВМОЌаМОе: аЎЌОМОстратПр уже ПблаЎает всеЌО праваЌО!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "ИзЌеМОть парПль"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "АЎЌОМ"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Права"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "ОзЌеМОть"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "ВвеЎОте текущОй О желаеЌый парПль."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "ППльзПватель"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "ТекущОй парПль"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "НПвый парПль"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "НПвый парПль."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "НПвый парПль (пПвтПр)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "ППжалуйста пПвтПрОте МПвый парПль."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "У вас Мет прав Ма прПсЌПтр страМОцы."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Папка Ўля закачек Ме МайЎеМа."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПграМОчеММый"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "Ме ЎПступМП"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Для ЎПступа к МастрПйкаЌ запустОте pyload.py -s."
diff --git a/locale/ru/LC_MESSAGES/pyLoad.po b/locale/ru/LC_MESSAGES/pyLoad.po
index 92dd4b2dc..b4fc6a768 100644
--- a/locale/ru/LC_MESSAGES/pyLoad.po
+++ b/locale/ru/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "ППлучеМ сОгМал Ўля завершеМОя рабПты"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad уже запущеМ, pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Не уЎалПсь ОзЌеМОть группу: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Не уЎалПсь ОзЌеМОть пПльзПвателя: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "папка ПтчетПв"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Запускается"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "ОсМПвМая папка: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto Ўля ЎекПЎОрПваМОя файлПв кПМтейМерПв"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "папка вреЌеММых файлПв"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "папка Ўля закачек"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL Ўля безПпасМПгП сПеЎОМеМОя"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "ПереЌестОть прежМюю пПльзПвательскую кПМфОгурацОю в БД"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "ППжалуйста, прПверьте свПО учётМые ЎаММые запустОв ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Все ссылкО уЎалеМы"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "ВреЌя закачкО: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "СвПбПЎМПе ЌестП: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "АктОвацОя аккауМта..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "АктОвацОя плагОМа..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad загружеМ О рабПтает"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "перезапуск pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "завершеМОе рабПты pyLoad"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "УстаМПвка %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "Ме ЌПгу МайтО %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "Ме ЌПгу сПзЎать %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "завершеМОе рабПты..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "ПшОбка прО завершеМОО рабПты"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "pyLoad ПстаМПвлеМ с терЌОМала"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Базы ЎаММых была уЎалеМа пП прОчОМе МесПвЌестОЌПй версОО."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "База ЎаММых НЕ ЌПжет быть преПбразПваМа."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "База ЎаММых преПбразПваМа Оз v2 в v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "База ЎаММых преПбразПваМа Оз v2 в v3."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "ПреПбразПваМОе прежМей БД Django"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "закПМчеМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "Пф-лайМ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "ПМ-лайМ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "в ПчереЎО"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "прПпущеМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "ПжОЎаМОе"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "вреЌеММП МеЎПступМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "запускается"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "завершеМП с ПшОбкПй"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "прерваМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "раскПЎОрПваМОе"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "пПльзПвательскОй"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "загружается"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "Пбрабатывается"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "МеОзвестМП"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Пакет завершеМ: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "ИспПльзуется SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "ОшОбка уЎалеММПгП сервОса: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Запуск %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "ОшОбка прО загрузке %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "ПжОЎаМОе %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL сертОфОкаты Ме МайЎеМы."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "К сПжалеМОю, пПЎЎержка в pyLoad прекращеМа МачОМая с версОО %s"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Вы ЌПжете ОспПльзПвать threaded сервер Ўля пПвышеМОя прПОзвПЎОтельМПстО О ОспПльзПваМОя SSL,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "МП ЌПжМП О ОспПльзПвать прежМОй сервер %s с pyLoads fastcgi"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "ПрОЌеры кПМфОгурацОО web-серверПв ЌПжМП пПсЌПтреть в папке module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "ПрОЌеры кПМфОгурацОО web-серверПв ЌПжМП пПсЌПтреть в папке pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "ИспПльзПвать %(server)s МевПзЌПжМП, так как Ме устаМПвлеМ python-flup!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "ЭтПт сервер Ме преЎПставляет вПзЌПжМПсть ОспПльзПвать SSL, пПжалуйста рассЌПтрОте вПзЌПжМПсть ОспПльзПвать сервер threaded взаЌеМ выбраММПгП"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Запуск встрПеММПгП веб-сервера django: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Запуск веб-сервера lighttpd: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Запуск threaded веб-сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Запуск fastcgi-сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "У вас Мет прав Ма прПсЌПтр страМОцы."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "Папка Ўля закачек Ме МайЎеМа."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПграМОчеММый"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "Ме ЎПступМП"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Для ЎПступа к МастрПйкаЌ запустОте pyload.py -s."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Загрузка параллельМых пПтПкПв ЎаММых завершеМа с ПшОбкаЌО, вПзврат к ПЎМПпПтПчМПй загрузке | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "Загрузка Мачата: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "Загрузка завершеМа: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "В плагОМе %s Мет фуМкцОО."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "Загрузка прерваМа: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "ОшОбка загрузкО: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "Загрузка МеЎПступМа: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "Загрузка вреЌеММП МеЎПступМа: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "ОшОбка загрузкО: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "НевПзЌПжМП сПеЎОМОться с прПвайЎерПЌ ОлО срыв сПеЎОМеМОя, слеЎующая пПпытка через ПЎМу ЌОМуту."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "Загрузка прПпущеМа: %(name)s @ %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "ДекПЎОрПваМОе МачатП: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "ОшОбка ЎекПЎОрПваМОя: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "ППвтПрМая пПпытка %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "ППлучеМОе ОМфПрЌацОО пП %(name)s завершОлПсь ПшОбкПй | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "ОщОбка выпПлМеМОя захватПв: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "ОшОбка актОвацОО %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "ПерепПЎключеМОе Ме уЎалПсь: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "СкрОпт перепПЎключеМОя Ме МайЎеМ!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "НачОМаеЌ перепПЎключеМОе"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "ОшОбка прО выпПлМеМОО скрОпта перепПЎключеМОя"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "ПерепПЎключеМП, МПвый IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Не хватает Ќеста Ма устрПйстве."
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Не ЌПгу вПйтО с учетМПй запОсью %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "НеправОльМый парПль"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "ВреЌя %s ОЌеет МеправОльМый фПрЌат, ОспПльзуйте фПрЌат 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "НеЎПстатПчМП траффОка в аккауМте %s, слеЎующая прПверка через 30 ЌОМут"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Истек срПк ЎействОя аккауМта %s, слеЎующая прПверка через 1 час"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "ДПстОгМут лОЌОт загрузПк"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s ОЌеет Ме правОльМый шаблПМ."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "ОшОбка ОЌпПрта %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Не загружеМ МО ПЎОМ Оз файлПбЌеММОкПв"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "В свПей учётМПй запОсО включОте ПпцОю 'direct Download'"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "СпОсПк ссылПк Ме ЌПжет быть ПчОщеМ."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "УстаМПвкО учетМПй запОсО уЎалеМы в связО с МПвыЌ фПрЌатПЌ."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "НеПбхПЎОЌа автПрОзацОя (ОЌя пПльзПвателя:парПль)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "ППжалуйста, ввеЎОте ваш аккауМт Ўля %s ОлО ПтключОть этПт плагОМ"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "НайЎеМ HTML-кПЎ в файле загрузкО (%s)... ПшОбка переМаправлеМОя? Загрузка буЎет перезапущеМа."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Ѐайл вреЌеММП МеЎПступеМ"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: ПжОЎаМОе ЌежЎу загрузкаЌО %d сек."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: ПжОЎаМОе картОМкО %d сек."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "ЗагружеММый файл пуст"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "НеверМый ключ API"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: ОсталПсь МеЎПстатПчМП трафОка"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "ТрафОк закПМчОлся"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Traffic Share (пряЌая загрузка)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Уже ОЎет загрузка с этПгП IP, жЎеЌ 60 секуМЎ"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "НеправОльМый кПЎ ОЎеМтОфОкацОО, загрузка буЎет перезапущеМа"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: Нет свПбПЎМПгП слПта"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Для этПгП файла МужеМ преЌОуЌ аккауМт"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "ИЌя файла указаМП МеверМП"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "ОшОбка параллельМПй загрузкО, жЎеЌ 60 секуМЎ."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "ВхПЎ Ме прПОзвеЎеМ."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "СбПй расшОфрПвкО"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "Нет ключа файла в URL-аЎресе"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "КПЎ ПшОбкО:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Ѐайл Ме существует."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** ДПпПлМеМОя ПбМПвлеМы, перезапустОте pyLoad ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "ДПпПлМеМОя ПбМПвлеМы О перезагружеМы"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Нет ПбМПвлеМОй Ўля ЎПпПлМеМОй"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "Нет ПбМПвлеМОй pyLoad"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** ДПступМа МПвая версОя pyLoad %s ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Скачайте зЎесь: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Не вПзЌПжМП сПеЎОМОться с серверПЌ ПбМПвлеМОй"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "НПвая версОя %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "ОшОбка прО ПбМПвлеМОО %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "КПМфлОкт версОО"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "Загрузка завершеМа: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "НПвый запрПс картОМкО: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "Ответ с текстПЌ Ма картОМке %s"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "ППжалуйста, сМачала ЎПбавьте учетМую запОсь premium.to О перезапустОте pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "ДПбавлеМ %s Оз HotFolder"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "%s Ме устаМПвлеМ"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Не вПзЌПжМП актОвОрПвать %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "АктОвОрПваМ(a/П)"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Не актОвОрПваМП ЎПпПлМеМОй Ўля ОзвлечеМОя/распакПвкО"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Пакет %s пПставлеМ в ПчереЎь Ўля пПслеЎующегП ОзвлечеМОя/распакПвкО"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "ПрПверка пакета %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "ИзвлечеМОе/распакПвка в %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Не МайЎеМП файлПв Ўля ОзвлечеМОя"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "Озвлекается/распакПвывается"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "ЗащОщеМП парПлеЌ"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "НеправОльМый парПль"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "УЎалеМОе файлПв %s"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "ИзвлечеМОe/распакПвка завершеМП(a)"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "ОшОбка архОва"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "ОшОбка кПМтрПльМПй суЌЌы"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "НеОзвестМая ПшОбка"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "ОшОбка устаМПвкО пПльзПвателя О группы: %s"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: ППрт 9666 уже заМят"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "ОсталПсь %s креЎОтПв"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Не уЎалПсь ПтправОть Птвет."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "НеЎПстатПчМП среЎств Ма вашеЌ аккауМте CaptchaTrader"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "СпОсПк шОфрПваМОя Ме МайЎеМ"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "СпОсПк шОфрПваМОя пуст"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "Загрузка завершеМа: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "НПвая(ые) CaptchaID Оз загрузкО: %s: %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Ваша учетМая запОсь 9kw.eu ОЌеет Ме ЎПстатПчМП креЎОтПв"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "УстаМПвлеММые скрОпты Ўля %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Не вПзЌПжМП запустОть скрОпт:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "ОшОбка в %(script): %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "УчетМая запОсь ExpertDecoders Ме ОЌеет ЎПстатПчМП креЎОтПв"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "ППжалуйста сМачала ЎПбавьте ваш rehost.to аккауМт О перезапустОте pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "ППжалуйста сМачала ЎПбавьте ЎействОтельМую учетМую запОсь Ўля premiumize.me О перезапустОть pyLoad."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "ОсталПсь %s креЎОтПв"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil О tesseract Ме устаМПвлеМы. Не пПЎключеМ клОеМт Ўля расшОфрПвкО картОМПк"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Не пПлучеМ результат расшОфрПвкО картОМкО в течеМОе ПтвеЎёММПгП вреЌеМО МО ПЎМОЌ Оз ЎПпПлМеМОй"
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "ОшОбка устаМПвкО пПльзПвателя О группы: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Не пПЎключеМ клОеМт Ўля расшОфрПвкО картОМПк"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "ДПбавлеМ кПМтейМер %(name)s с %(count)d сылкаЌО"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "ДПбавлеМП %(count)d ссылПк в кПМтейМер #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Не ПбМаружеМа js платфПрЌа, пПжалуйста устаМПвОте лОбП Spidermonkey, ossp-js, pyv8 ОлО rhino"
diff --git a/locale/ru/LC_MESSAGES/pyLoadCli.po b/locale/ru/LC_MESSAGES/pyLoadCli.po
index 61d91a9fb..20b49882a 100644
--- a/locale/ru/LC_MESSAGES/pyLoadCli.po
+++ b/locale/ru/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "ИМтерфейс кПЌаМЎМПй стрПкО"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s загрузПк:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "СкПрПсть: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "РазЌер: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "ЗакПМчеМП в: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "ПжОЎаМОе: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "СПстПяМОе:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "прОПстаМПвлеМП"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "в прПцессе"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "Пбщая скПрПсть"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "ЀайлПв в ПчереЎО"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "ВсегП"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "МеМю:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "ДПбавОть ссылкО"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "УправлеМОе ПчереЎью"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "УправлеМОе кПллектПрПЌ ссылПк"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "ЗапустОть/ПрОПстаМПвОть сервер"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "ОстаМПвОть сервер"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "ВыхПЎ"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "ИспПльзуйте шаблПМ: add <ИЌя кПМтейМера> <ссылка1> <ссылка2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "ПрПверка %d ссылкО:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Ѐайл Ме МайЎеМ."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "РабПта pyLoad была прОМуЎОтельМП завершеМа"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "ППказать сПстПяМОе сервера"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "ППказать закачкО в ПчереЎО"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "ППказать закачкО в спОске кПллектПра"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "ДПбавОть кПМтейМер в ПчереЎь"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "ДПбавляет кПМтейМер в кПллектПр ссылПк"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "УЎалОть файлы Оз ПчереЎО/кПллектПра"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "УЎалОть кПМтейМер Оз ПчереЎО/кПллектПра"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "ПереЌестОть пакет(ы) Оз ПчереЎО в кПллектПр О МаПбПрПт"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "ПерезапустОть файлы"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "ПерезапустОть пакеты"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "ПрПверка статуса связО, Ўействует с ЌестМыЌО кПМтейМераЌО"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "ПрПверяет сПстПяМОе файла-кПМтейМера"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "ПрОПстаМПвОть сервер"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "прПЎПлжОть закачкО"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "ПереключОть пауза/прПЎПлжОть"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "ПстаМПвОть сервер"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "СпОсПк кПЌаМЎ: "
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "ЗапОсать файл кПМфОгурацОО пПльзПвателя Ме уЎалПсь"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Для сПеЎОМеМОя с яЎрПЌ pyLoad МеПбхПЎОЌ пакет py-openssl."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "АЎрес: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "ППрт: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "ИЌя пПльзПвателя: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "ПарПль: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "НеправОльМые учётМые ЎаММые."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "НевПзЌПжМП пПЎключОться к %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Для сПеЎОМеМОя с яЎрПЌ pyLoad МеПбхПЎОЌ пакет py-openssl."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "В связО с теЌ, чтП былО ввеЎеМы ряЎ кПЌаМЎ, ОМтерактОвМый режОЌ был прерваМ."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "ДПбавОть пакет:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "ВвеЎОте МазваМОе пакета"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "КПМтейМер: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "АМалОз ссылПк Ўля ЎПбавлеМОя."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "ВвеЎОте %s кПгЎа буЎете гПтПвы."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "ДПбавлеМы ссылкО: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "МазаЎ в главМПе ЌеМю"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "УправлеМОе пакетаЌО:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "УправлеМОе ссылкаЌО"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "ЧтП Вы хПтОте переЌестОть?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "ЧтП Вы хПтОте уЎалОть?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "ЧтП Вы хПтОте перезапустОть?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "ВыбОрайте, чтП Вы хПтОте сЎелать ОлО вМесОте МПЌер пакета."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "уЎалОть"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "переЌестОть"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "перезапустОть"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr "- преЎыЎущОй"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "- слеЎующОй"
diff --git a/locale/ru/LC_MESSAGES/setup.po b/locale/ru/LC_MESSAGES/setup.po
index e55aa5fe7..b1d0093d4 100644
--- a/locale/ru/LC_MESSAGES/setup.po
+++ b/locale/ru/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "Ўа"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "Мет"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "Вас прОветствует пПЌПщМОк пП МастрПйке pyLoad"
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "БуЎет прПвереМа сОстеЌа О вМесеМы первПМачальМые МастрПйкО Ўля запуска pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "В кваЎратМых скПбках [] указываются зМачеМОя пП уЌПлчаМОю,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "еслО Вы Ме хПтОте ЌеМять этО зМачеМОя ОлО Ме увереМы в свПёЌ выбПре, прПстП МажЌОте ENTER."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Не забуЎьте: Вы всегЎа ЌПжете сМПва запустОть пПЌПщМОка пП МастрПйкаЌ, Мабрав pyload.py с ключПЌ --setup ОлО -s."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "ПрО вПзМОкМПвеМОО прПблеЌ с этОЌ ассОстеМтПЌ МажЌОте STRG-C"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "Ўля прекращеМОя устаМПвкО. pyload.py бПльше Ме буЎет запускаться автПЌатОческО."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Для старта прПверкО сОстеЌы, МажЌОте ENTER."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Для рабПты pyLoad МеПбхПЎОЌы pycurl, sqlite О python 2.5, 2.6, 2.7."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "УстаМПвОте МеЎПстающОе пакеты О перезапустОте pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "ПрПграЌЌа устаМПвкО завершает рабПту."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "ПрПверка сОстеЌы завершеМа. ЧтПбы прПсЌПтреть Птчет, МажЌОте клавОшу ENTER."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Отчет ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "расшОфрПвка"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "SSL пПЎключеМОе"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "автПЌатОческая расшОфрПвка CAPTCHA"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "GUI "
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Web-ОМтерфейс"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "пПЎЎержка Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "ДПступМые фуМкцОО:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "НеЎПступМые фуМкцОО:"
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "МеЎПступеМ py-crypto"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "ОМ МужеМ Ўля раскПЎОрПваМОя файлПв."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "Мет SSL"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "ОМ МужеМ Ўля защОты сПеЎОМеМОя с яЎрПЌ ОлО web-ОМтерфейсПЌ."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "ПрО лПкальМых сПеЎОМеМОях SSL Ме МужеМ."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "РасшОфрПвка Captcha МеЎПступМа"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "НужМа Ма МекПтПрых файл-хПстОМгах."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Нет GUI"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "Нет пПЎЎержкО JavaScript"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "ЕтП пПМаЎПбОться Ўля МекПтПрых ссылПк Click'N'Load. ИМсталОрПвайте Spidermonkey, ossp-js, pyv8 ОлО rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "ПрО желаМОО сейчас ЌПжМП прервать устаМПвку О пПставОть МеПбхПЎОЌые завОсОЌые пакеты."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "ПрПЎПлжОть МастрПйку?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "НужМП лО ЌеМять путь к папке МастрПек? ТекущОй путь %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "ЕслО вы ОспПльзуете pyLoad Ма какПЌ-МОбуЎь сервере ОлО путь к кПМфОгурацОО указывает Ма flash-ЎОск, лучше пПЌеМяйте егП."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "ИзЌеМОть путь?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "ХПтОте ОзЌеМОть учётМые ЎаММые О ЎругОе базПвые МастрПйкО?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "НастПятельМП рекПЌеМЎуется прО первПЌ запуске."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "ИзЌеМОть ПсМПвМые МастрПйкО?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "ХПтОте МастрПОть SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "НастрПОть SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "ХПтОте МастрПОть WEB-ОМтерфейс?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "НастрПОть WEB-ОМтерфейс?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "УстаМПвка успешМП завершеМа."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "НажЌОте ENTER О запустОте pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## ПрПверка сОстеЌы ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "ВерсОя python слОшкПЌ МПвая, ОспПльзуйте Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "ВерсОя python слОшкПЌ старая, ОспПльзуйте Python версОО 2.5 О выше"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "ВерсОя Python: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "СлОшкПЌ старая версОя jinja2 %s."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "МПжМП спПкПйМП прПЎПлжОть МастрПйку, МП еслО web-ОМтерфейс Ме буЎет рабПтать,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "тП ПбМПвОте ОлО уЎалОте бОблОПтеку jinja2. ОМа уже есть в сПставе pyLoad."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## ОсМПвМые МастрПйкО ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "ЭтО учётМые ЎаММые пПЎхПЎят к CLI, GUI О WEB-ОМтерфейсу."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "ППльзПватель"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "ВМешМОЌ клОеМтаЌ (GUI, CLI О ЎругОе) пПМаЎПбОться ЎОстаМцОПММый ЎПступ Ўля рабПты через сеть."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "ЕслО Вы хПтОте пПльзПваться тПлькП сПеЎОМеМОеЌ через веб ОМтерфейс, ПтключОте егП, чтПбы уЌеМьшОть пПтреблеМОе ПператОвМПй паЌятО."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "ВключОть ЎОстаМцОПММый ЎПступ"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Язык"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "Папка закачек"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Макс.чОслП ПЎМПвреЌеММых закачек"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "ИспПльзПвать перепПЎключеМОе ОМтерМета?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Путь к скрОпту перепПЎключеМОя"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## УстаМПвкО WEB-ОМтерфейса ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "ВключОть WEB-ОМтерфейс?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "ip-аЎрес WEB-ОМтерфейса. ЕслО указать 127.0.0.1 ОлО localhost, тП WEB-ОМтерфейс буЎет ЎПступеМ тПлькП лПкальМП."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "АЎрес"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "ППрт"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "В pyLoad МескПлькП влПжеММых серверПв, МОже слеЎуют ПпОсаМОя в кПрПткПЌ вОЎе."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "СтаМЎартМая МастрПйка, МаОлучшОй выбПр еслО ваЌ Ме ясМП какПй сЎелать выбПр."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "ЕтПт сервер пПЎЎержОвает SSL О хПрПшая, гПЎМая альтерМатОва к builtin."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "МПжет ОспПльзПваться вЌесте с apache, lighttpd, требует МастрПйкО, чтП является Ме такОЌ прПстыЌ заЎаМОеЌ."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "ППлучОть егП зЎесь: https://github.com/jonashaag/bjoern О скПЌпОлОрПвать егП"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "ВМОЌаМОе: В МекПтПрых реЎкОх случаях встрПеММый сервер Ме рабПтает, еслО вы заЌетОлО прПблеЌы с веб-ОМтерфейсПЌ"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "верМуться сюЎа О ОзЌеМОть сервер builtin Ма сервер threaded."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Сервер"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## НастрПйкО SSL ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Для геМерацОО SSL сертОфОкатПв выпПлМОте слеЎующОе кПЌаМЎы, МахПЎясь в папке кПМфОгурацОО pyLoad:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "ЕслО всё прПшлП успешМП, сейчас ЌПжМП буЎет включОть пПЎЎержку SSL."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "ВключОть SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "ВыберОте ЎействОе"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - ДПбавОть/ИзЌеМОть пПльзПвателя"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - ППказать спОсПк пПльзПвателей"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - УЎалОть пПльзПвателя"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - ВыхПЎ"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "ППльзПвателО"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "УстаМПвлеМ МПвый путь к папке МастрПек. ТекущОе МастрПйкО Ме буЎут сПхраМеМы!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Путь к МастрПйкаЌ"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Путь к МастрПйкаЌ был ОзЌеМёМ. ПерезапустОте ассОстеМт Ўля прПЎПлжеМОя МастрПйкО."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "НажЌОте клавОшу Enter Ўля выхПЎа."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Не уЎалПсь устаМПвОть путь к МастрПйкаЌ: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: Птсутствует"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "ПарПль: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "СлОшкПЌ прПстПй парПль, МужМП ЌОМОЌуЌ 4 сОЌвПла."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "ПарПль (ППвтПрОть)"
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "ПарПлО Ме сПвпаЎают."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "Ўа"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "Да"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "Мет"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "ЛПжь"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "НекПрректМый ввПЎ"
diff --git a/locale/setup.pot b/locale/setup.pot
index 11d64d094..ceba6a5d2 100644
--- a/locale/setup.pot
+++ b/locale/setup.pot
@@ -17,463 +17,463 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: module/setup.py:33
+#: pyload/setup.py:33
msgid "y"
msgstr ""
-#: module/setup.py:35
+#: pyload/setup.py:35
msgid "n"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "Welcome to the pyLoad Configuration Assistant."
msgstr ""
-#: module/setup.py:54
+#: pyload/setup.py:54
msgid ""
"It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:56
+#: pyload/setup.py:56
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:57
+#: pyload/setup.py:57
msgid ""
"in case you don't want to change it or you are unsure what to choose, just "
"hit enter."
msgstr ""
-#: module/setup.py:59
+#: pyload/setup.py:59
msgid ""
"Don't forget: You can always rerun this assistant with --setup or -s "
"parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:60
+#: pyload/setup.py:60
msgid "If you have any problems with this assistant hit STRG-C,"
msgstr ""
-#: module/setup.py:61
+#: pyload/setup.py:61
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:63
+#: pyload/setup.py:63
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:70
+#: pyload/setup.py:70
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:71
+#: pyload/setup.py:71
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "## Status ##"
msgstr ""
-#: module/setup.py:83
+#: pyload/setup.py:83
msgid "container decrypting"
msgstr ""
-#: module/setup.py:85
+#: pyload/setup.py:85
msgid "ssl connection"
msgstr ""
-#: module/setup.py:87
+#: pyload/setup.py:87
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "Webinterface"
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:98
+#: pyload/setup.py:98
msgid "Features available:"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:107
+#: pyload/setup.py:107
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:111
+#: pyload/setup.py:111
msgid "no SSL available"
msgstr ""
-#: module/setup.py:112
+#: pyload/setup.py:112
msgid ""
"This is needed if you want to establish a secure connection to core or "
"webinterface."
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:118
+#: pyload/setup.py:118
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:123
+#: pyload/setup.py:123
msgid ""
"You will need this for some Click'N'Load links. Install Spidermonkey, ossp-"
"js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:125
+#: pyload/setup.py:125
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:135
+#: pyload/setup.py:135
msgid ""
"If you use pyLoad on a server or the home partition lives on an iternal "
"flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:136
+#: pyload/setup.py:136
msgid "Change config path?"
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:144
+#: pyload/setup.py:144
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:151
+#: pyload/setup.py:151
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:152
+#: pyload/setup.py:152
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:158
+#: pyload/setup.py:158
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:159
+#: pyload/setup.py:159
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:165
+#: pyload/setup.py:165
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:175
+#: pyload/setup.py:175
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:181
+#: pyload/setup.py:181
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:224
+#: pyload/setup.py:224
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:225
+#: pyload/setup.py:225
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:226
+#: pyload/setup.py:226
msgid ""
"please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:243
+#: pyload/setup.py:243
msgid "JS engine"
msgstr ""
-#: module/setup.py:250
+#: pyload/setup.py:250
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:253
+#: pyload/setup.py:253
msgid "The following logindata is valid for CLI and webinterface."
msgstr ""
-#: module/setup.py:259 module/setup.py:357 module/setup.py:373
+#: pyload/setup.py:259 pyload/setup.py:357 pyload/setup.py:373
msgid "Username"
msgstr ""
-#: module/setup.py:265
+#: pyload/setup.py:265
msgid ""
"External clients (GUI, CLI or other) need remote access to work over the "
"network."
msgstr ""
-#: module/setup.py:266
+#: pyload/setup.py:266
msgid ""
"However, if you only want to use the webinterface you may disable it to save "
"ram."
msgstr ""
-#: module/setup.py:267
+#: pyload/setup.py:267
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:271
+#: pyload/setup.py:271
msgid "Language"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:274
+#: pyload/setup.py:274
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:278
+#: pyload/setup.py:278
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:281
+#: pyload/setup.py:281
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:289
+#: pyload/setup.py:289
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid ""
"Listen address, if you use 127.0.0.1 or localhost, the webinterface will "
"only accessible locally."
msgstr ""
-#: module/setup.py:292
+#: pyload/setup.py:292
msgid "Address"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Port"
msgstr ""
-#: module/setup.py:295
+#: pyload/setup.py:295
msgid ""
"pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:296
+#: pyload/setup.py:296
msgid "Default server; best choice if you plan to use pyLoad just for you."
msgstr ""
-#: module/setup.py:297
+#: pyload/setup.py:297
msgid ""
"Support SSL connection and can serve simultaneously more client flawlessly."
msgstr ""
-#: module/setup.py:299
+#: pyload/setup.py:299
msgid ""
"Can be used by apache, lighttpd, etc.; needs to be properly configured "
"before."
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Very fast alternative to builtin; requires libev and bjoern packages."
msgstr ""
-#: module/setup.py:305
+#: pyload/setup.py:305
msgid ""
"Attention: In some rare cases the builtin server is not working, if you "
"notice problems with the webinterface"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "Server"
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:322
+#: pyload/setup.py:322
msgid ""
"Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:328
+#: pyload/setup.py:328
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:330
+#: pyload/setup.py:330
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:347
+#: pyload/setup.py:347
msgid "Select action"
msgstr ""
-#: module/setup.py:348
+#: pyload/setup.py:348
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:349
+#: pyload/setup.py:349
msgid "2 - List users"
msgstr ""
-#: module/setup.py:350
+#: pyload/setup.py:350
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:351
+#: pyload/setup.py:351
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "Users"
msgstr ""
-#: module/setup.py:391
+#: pyload/setup.py:391
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:392
+#: pyload/setup.py:392
msgid "Configpath"
msgstr ""
-#: module/setup.py:400
+#: pyload/setup.py:400
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:401
+#: pyload/setup.py:401
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:405
+#: pyload/setup.py:405
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:411
+#: pyload/setup.py:411
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:456
+#: pyload/setup.py:456
msgid ""
"Warning: Consider a password of 10 or more symbols if you expect to access "
"from outside your local network (ex. internet)."
msgstr ""
-#: module/setup.py:457
+#: pyload/setup.py:457
msgid "Password: "
msgstr ""
-#: module/setup.py:461
+#: pyload/setup.py:461
#, python-format
msgid "Password too short! Use at least %s symbols."
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password must be alphanumeric."
msgstr ""
-#: module/setup.py:467
+#: pyload/setup.py:467
msgid "Password (again): "
msgstr ""
-#: module/setup.py:473
+#: pyload/setup.py:473
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:489
+#: pyload/setup.py:489
msgid "yes"
msgstr ""
-#: module/setup.py:489
+#: pyload/setup.py:489
msgid "true"
msgstr ""
-#: module/setup.py:489
+#: pyload/setup.py:489
msgid "t"
msgstr ""
-#: module/setup.py:492
+#: pyload/setup.py:492
msgid "no"
msgstr ""
-#: module/setup.py:492
+#: pyload/setup.py:492
msgid "false"
msgstr ""
-#: module/setup.py:492
+#: pyload/setup.py:492
msgid "f"
msgstr ""
-#: module/setup.py:495 module/setup.py:505
+#: pyload/setup.py:495 pyload/setup.py:505
msgid "Invalid Input"
msgstr ""
diff --git a/locale/si/LC_MESSAGES/django.po b/locale/si/LC_MESSAGES/django.po
index bc193cfa5..2fa2b0e15 100644
--- a/locale/si/LC_MESSAGES/django.po
+++ b/locale/si/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "නඞ"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "ඎ්‍රධාන"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "ගඞනාන්තය"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "අවගංගු කරන්න"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/si/LC_MESSAGES/pyLoad.po b/locale/si/LC_MESSAGES/pyLoad.po
index 053e865c6..0aaf63cd8 100644
--- a/locale/si/LC_MESSAGES/pyLoad.po
+++ b/locale/si/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/si/LC_MESSAGES/pyLoadCli.po b/locale/si/LC_MESSAGES/pyLoadCli.po
index f859072ff..574f50aa9 100644
--- a/locale/si/LC_MESSAGES/pyLoadCli.po
+++ b/locale/si/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/si/LC_MESSAGES/setup.po b/locale/si/LC_MESSAGES/setup.po
index c9bbb5513..3cbfa52f1 100644
--- a/locale/si/LC_MESSAGES/setup.po
+++ b/locale/si/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/sq/LC_MESSAGES/django.po b/locale/sq/LC_MESSAGES/django.po
index cd2449a47..f8bfd5446 100644
--- a/locale/sq/LC_MESSAGES/django.po
+++ b/locale/sq/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/sq/LC_MESSAGES/pyLoad.po b/locale/sq/LC_MESSAGES/pyLoad.po
index 1f6ed52b9..d9df0e4bf 100644
--- a/locale/sq/LC_MESSAGES/pyLoad.po
+++ b/locale/sq/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/sq/LC_MESSAGES/pyLoadCli.po b/locale/sq/LC_MESSAGES/pyLoadCli.po
index 73f7e3230..80567cb30 100644
--- a/locale/sq/LC_MESSAGES/pyLoadCli.po
+++ b/locale/sq/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/sq/LC_MESSAGES/setup.po b/locale/sq/LC_MESSAGES/setup.po
index 0e0e1d124..f1fb975f8 100644
--- a/locale/sq/LC_MESSAGES/setup.po
+++ b/locale/sq/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/sr/LC_MESSAGES/django.po b/locale/sr/LC_MESSAGES/django.po
index f298d0667..0083d9a21 100644
--- a/locale/sr/LC_MESSAGES/django.po
+++ b/locale/sr/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "НПвО захтев за прПверу"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "МПлОЌП Ўа прПчОтате текст са прПвере."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad рестартПваМ"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "ОскључеМП"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "УспешМП ПбављеМП"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "укључеМП"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Да лО сте сОгурМО Ўа желОте Ўа ОскључОте pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "РестартПватО везу"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "ОбрОсатО везу"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "УМесОте ОЌе пакета."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "КлОкМОте Ма ЎесМу страМу прПвере."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "ДесОла се грешка."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "ЀасцОкла је празМа"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "НеуспелП"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "НеЌа захтева за прПверу"
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "ЛПзОМке се Ме пПклапају"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "ППЎешавања сачуваМа."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "НПва фасцОкла"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Да лО сте сОгурМО Ўа желОте Ўа рестатујете pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "чекаЌ %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "АктОвМа преузОЌања"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Кућа"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "ПреузОЌања"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "ИзвештајО"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "ППЎешавање"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "ИЌе"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Статус"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "ИМфПрЌацОја"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "ВелОчОМа"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "НапреЎак"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "ПрОјава"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "КПрОсМОчкП ОЌе"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "ЛПзОМка"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "ИЌе О лПзОМка Ме ПЎгПварају. ППМПвОтО."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Да бО ресетПвалО пПЎатке прОјаве ОлО за ЎПЎавање кПрОсМОка:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "ОбрОшО завршеМП"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "РестартПвање МеуспешМП"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "ЀасцОкла:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "ЛПзОМка:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "УреЎО пакет"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "УреЎО Ўетаље пљкета."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "ИЌе пакета."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "ЀасцОкла"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "ИЌе пПЎфасцОкле за Пва преузОЌања."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "СпОсак лПзОМке за РАР."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Сачувај"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Ресет"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "УспешМП сте се ПЎјавОлО."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Путања"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "абсПлутМП"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "релатОвМП"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "ОЌе"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "велОчОМа"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "тОп"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "заЎња прПЌеМа"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "рПЎОтељска фасцОкла"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "МеЌа саЎржаја"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Опште"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "ДПЎатцО"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "НалПзО"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "ОЎабратО секцОју Оз ЌеМОја"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "ПрОкључак"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "ПреЌОјуЌ"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "ВажО ЎП"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "ПреПсталО прПтПк"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "ВреЌе"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Макс ОстПвреЌеМП"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "ОбрОшО?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "ОсправМП"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "МОје важМП"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "Ўа"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "Ме"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "ДПЎај"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "ДПЎај МалПг"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "УМПс пПЎатака за упПтребу преЌОјуЌ ЌПгућМПстО."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Ваше ОЌе:"
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "ЛПзОМка за Пвај МалПг"
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "ТОп"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "ОЎабратО хПст Вашег МалПга."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Стартуј"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "МазаЎ"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "Ўаље"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Крај"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "ВестО"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "ППЎршка"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "СОстеЌ"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "ОС:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "ВерзОја pyLoad-а:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "ЀасцОкла ОМсталацОје:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "ЀасцОкла пПЎешавања:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "ЀасцОкла преузОЌања:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "ПрПстПр:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "ЈезОк:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "ППрт вебОМтерфејса:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "ППрт уЎаљеМПг ОМтерфејса:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "ППЎешавање"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "МеМаџер ЎатПтеке"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "ДПЎај пакет"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "ПрОлепО лОМкПве ОлО пПслатО кПМтејМер."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "ИЌе МПвПг пакета."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Везе"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "ПрОлепОте везе ОлО текст О стОсМОте ЎугЌе ЀОлтер."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "ЀОлтрОрај УРЛ"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "ЛПзОМка за РАР архОве"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "ДатПтека"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "ППшаљО кПМтејМер."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "ОЎреЎОште"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "ЧОтање прПвере"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "ПрПвера"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "ПрПвера."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Текст"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "УМетО текст Оз прПвере."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "ЗатвПрО"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "ВебОМтерфејс"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "АжурОрања су ЎПступМа!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "ДПЎатцО су ажурОраМО, рестартПватО!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Чекање прПвере"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "ОЎјава"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "АЎЌОМОструј"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "ИМфП"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "ЛПгујте се!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "ЗауставО"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "ОткажО"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "ПреузЌО:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "ППМПвМа веза:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "БрзОМа:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "АктОвМП:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "ППМПвП учОтај страМу"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "учОтавање"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "НазаЎ Ма врх"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "ИскључОтО pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "РестартПватО pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "За ЎПЎавање/прПЌеМе лПзОМку упПтребОтО:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "ВажМП! АЎЌОМ кПрОсМОк увек ОЌа сва права!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "ПрПЌеМО лПзОМку"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "АЎЌОМОстратПр"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "ДПзвПле"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "прПЌеМО"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "УМетО треМутМу О жељеМу лПзОМку."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "КПрОсМОк"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "ТреМутМа лПзОМка"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "НПва лПзОМка"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "НПва лПзОМка:"
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "НПва лПзОМка (пПМПвО)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "ППМПвОтО МПву лПзОМку."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "НеЌате правП за прОступ ПвПј страМО."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "ЀасцОкла преузОЌања МОје МађеМа."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПграМОчеМП"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "МОје ЎПступМП"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "ППкреМутО pyload.py -s за прОступ пПЎешавању."
diff --git a/locale/sr/LC_MESSAGES/pyLoad.po b/locale/sr/LC_MESSAGES/pyLoad.po
index 44cad0c91..a4d0514c0 100644
--- a/locale/sr/LC_MESSAGES/pyLoad.po
+++ b/locale/sr/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "ПрОЌљеМ је сОгМал за Озлазак"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad већ раЎО са брПјеЌ %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Не ЌПгу Ўа прПЌеМОЌ групу: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Не ЌПгу Ўа прПЌеМОЌ кПрОсМОка: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "фасцОкла за Озвештаје"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "ППкрећеЌ"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "ОсМПвМа фасцОкла: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pycrypto за ЎешОфрПвање кПМтејМера"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "фасцОкла за прОвреЌеМе ЎатПтеке"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "фасцОкла за преузОЌања"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL за сОгурМПсМе везе"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "ПреЌештање старОх пПЎешавања у базу"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "ПрПверОте ваше пПЎатке прОјављОвања са ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Све везе су уклПњеМе"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "ВреЌе преузОЌања: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "СлПбПЎМП прПстПра: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "АктОвОраЌ МалПге "
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "АктОвацОја ЎПЎатка..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad је спреЌаМ за кПрОшћење"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "пПМПвМП пПкретање pyLoad-а"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad се затвара"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "ИМсталацОја %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "Ме ЌПгу Ўа МађеЌ %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "Ме ЌПгу Ўа креОраЌ %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "ОскључујеЌ "
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "грешка прО ОскључОвању"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "убОтО pyLoad Оз терЌОМала"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "База је ОзбрОсаМП збПг МекПЌпатОбОлМе верзОје."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "База Ме ЌПже Ўа се кПМвертује"
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "База је кПМвертПваМа са v2 у v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "База је кПМвертПваМа са v3 у v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "КПМвертПвање старе Django базе"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "завршеМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "ваМ Ќреже"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "Ма ЌрежО"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "Ма чекању"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "прескПчеМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "чекаЌ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "прОвреЌеМП ваМ Ќреже"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "запПчОњеЌ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "МеуспелП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "прекОМутП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "ЎешОфрујеЌ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "прОлагПђеМП"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "преузОЌаЌ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "ПбрађујеЌ"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "МепПзМатП"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Пакет је завршеМ: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "УпПтреба SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Грешка уЎаљеМПг фОЎа: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "ППкрећеЌ %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Не ЌПгу Ўа учОтаЌ пПзаЎОМску кПЌпПМеМту %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "чекаЌ %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL сертОфОкатО МОсу прПМађеМО."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "ОЎпустОлО сЌП пПЎршку Ўа бО стартПвалО %s ЎОректМП са pyLoad"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "МПжете Ўа упПтребОте сервер са МавПјПЌ кПјО пружа ЎПбре перфПрЌаМсе О ссл,"
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "а ЌПжете О Ўа МаставОте са вашОЌ %s са pyLoads fastcgi серверПЌ"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "прОЌере пПЎешавања су у фасцОклО module/webui/servers"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "прОЌере пПЎешавања су у фасцОклО pyload/webui/servers"
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Не ЌПгу Ўа упПтребОЌ %(server)s, python-flup МОје ОМсталОраМ!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Грешка увПза lightweight сервера: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Требате Ўа преузЌете О кПЌпОлујете bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "КПпОрајте boern.so у фасцОклу module/lib ОлО упПтребОте setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "КПпОрајте boern.so у фасцОклу pyload/lib ОлО упПтребОте setup.py install"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "НаравМП требате Ўа пПзМајете лОМукс О Ўа зМате какП Ўа кПМпОлујете прПграЌе"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Сервер пПстављеМ Ма МавПјеМ, збПг прПблеЌа Ма ВОМЎПз."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Овај сервер Ме пПЎржава SSL. УЌестП њега кПрОстОте угМежЎеМО."
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "СтартПвање уграђеМПг сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "СтартПвање МавПјеМПг ССЛ веб сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "СтартПвање МавПјеМПг веб сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "СтартПвање fastcgi сервера: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "СтартПвање вебсервера (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "НеЌате правП за прОступ ПвПј страМО."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "ЀасцОкла преузОЌања МОје МађеМа."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПграМОчеМП"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "МОје ЎПступМП"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "ППкреМутО pyload.py -s за прОступ пПЎешавању."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "ОЎлПЌцО преузОЌања МОсу успелО. Враћање Ма јеЎМу везу | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "ПреузОЌање је запПчетП: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "ПреузОЌање је завршеМП: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "ПрОкључку %s МеЎПстаје фуМкцОја."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "ПреузОЌање је прекОМутП: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "ПреузОЌање је пПМПвП пПкреМутП: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "ПреузОЌање је ваМ Ќреже: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "ПреузОЌање је треМутМП ваМ Ќреже: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "ПреузОЌање МОје успелП: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Не ЌПгу Ўа се пПвежеЌ са хПстПЌ ОлО је веза прекОМута. ППМПвМП пПвезОвање за 1 ЌОМут."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "ПреузОЌање је прескПчеМП: %(name)s збПг %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "ДешОфрПвање пПчелП: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "НеуспешМП ЎешОфрПвање: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "ППМављање %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Не ЌПгу Ўа преузЌеЌ пПЎатке за %(name)s | %(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr "Грешка пПкретања куке: %s"
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Не ЌПгу Ўа актОвОраЌ %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "АктОвМу ЎПЎатцО: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "НеактОвМО ЎПЎатцО: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "НеуспешМП пПМПвМП пПвезОвање: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "СкрОпт за пПМПвМП пПвезОвање МОје прПМађеМ."
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "ППкрећеЌ пПМПвМП пПвезОвање"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Не ЌПгу Ўа ОзвршОЌ скрОпт за пПМПвМП пПвезОвање."
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "ППМПвП је пПвезаМП; МПва IP аЎреса: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "НеЌа ЎПвПљМП прПстПра Ма уређају"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Не ЌПгу Ўа се прОјавОЌ са МалПгПЌ %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "НеОсправМа лПзОМка"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "ВреЌе %s ОЌа лПш фПрЌат, упПтребО: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "НалПг %s МеЌа ЎПвПљМП саПбраћаја. ПрПвераваЌ пПМПвП за 30 ЌОМута."
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "НалПг %s је ОстекаП. ПрПвераваЌ пПМПвП за сат вреЌеМа."
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "ДПстОгМутП је ПграМОчење преузОЌања"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s ОЌа МеважећО Пбразац."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Грешка увПза %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "НОјеЎаМ хПстер МОје учОтаМ"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "АктОвОрајте ЎОректМП преузОЌање у МалПгу Bitshare-а"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "LinkList Ме ЌПже Ўа буЎе ПбрОсаМ."
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "ППЎешавања МалПга ОзбрОсаМе збПг МПвОјег фПрЌата."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "ППтребМа је прПвера ОЎеМтОтета (кПрОсМОчкП ОЌе О лПзОМка)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "УМесОте МалПг Ма сервОсу %s ОлО ЎеактОвОрајте Пвај прОкључак."
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "ПрПМађеМ је HTML кÎЎ у преузетПј ЎатПтецО (%s). ПреузОЌање ће пПМПвП бОтО пПкреМутП."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "ДатПтека треМутМП МОје ЎПступМа"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: чекање ОзЌеђу преузОЌања %d с."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: чекање пПтврЎМПг кПЎа %d с."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "Преузета ЎатПтека је празМа"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API кључ је МеОсправаМ"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: МеЌате ЎПвПљМП саПбраћаја"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "ПрекПрачОлО сте саПбраћај"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Ўељење саПбраћаја (ЎОректМП преузОЌање)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Већ преузОЌате са Пве IP аЎресе. Сачекајте 60 секуМЎО."
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "НеОсправаМ кÎЎ за прПверу ОЎеМтОтета. ПреузОЌање ће пПМПвП бОтО пПкреМутП."
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "Rapidshare.com: МеЌа слПбПЎМОх слПтПва"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "ППтребаМ ваЌ је преЌОјуЌ МалПг Ўа бОсте преузелО Пву ЎатПтеку"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "ПрОјављеМП ОЌе ЎатПтеке МОје ОсправМП"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Грешка у ОстПвреЌеМПЌ преузОЌању. Сачекајте 60 секуМЎО."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "НОсте прОјављеМО."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "ДешОфрПвање МОје успелП"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "У URL аЎресО МОје МавеЎеМ кључ ЎатПтеке"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "КÎЎ грешке:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "ДатПтека Ме пПстПјО."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** ПрОкључцО су ажурОраМО. ППМПвП пПкреМОте pyLoad. ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "ПрОкључцО су ажурОраМО О пПМПвП учОтаМО"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "НеЌа ажурОрања прОкључака"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "НеЌа МПве верзОје pyLoad-а"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** ДПступМа је МПва верзОја, pyLoad %s ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** ПреузЌОте је ПЎавЎе: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "Не ЌПгу Ўа се пПвежеЌ са серверПЌ за ажурОрања"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "НПва верзОја %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "Грешка прО ажурОрању %s"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "ВерзОје се Ме пПклапају"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "ПреузОЌање је завршеМП: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "НПвО захтев пПтврЎМПг кПЎа: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "ОЎгПвПрОте са „c %s текст Ма пПтврЎМПЌ кПЎу“"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "ДПЎатП %s Оз HotFolder-а"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "НОје ОМсталОраМ %s"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "Не ЌПгу Ўа актОвОраЌ %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "АктОвОраМП"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "НОсу актОвОраМО прОкључцО за распакОвање"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "Пакет %s је стављеМ у реЎ за распакОвање"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "ПрПверО пакет %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Распакуј у %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "НеЌа ЎатПтека за распакОвање"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "распакујеЌ"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "ЗаштОћеМП лПзОМкПЌ"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "НеОсправМа лПзОМка"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "БрОшеЌ %s ЎатПтека"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "РаспакОвање је завршеМП"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Грешка у архОвО"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC се Ме пПклапа"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "НепПзМата грешка"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "ППстављање кПрОсМОка О групе МОје успелП"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: пПрт 9666 већ је у упПтребО"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "ПреПсталП је %s креЎОта"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "Не ЌПгу Ўа пПшаљеЌ ПЎгПвПр."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "У вашеЌ МалПгу Ма сервОсу CaptchaTrader МеЌа ЎПвПљМП креЎОта."
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "СпОсак шОфратПра МОје прПМађеМ"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "СпОсак шОфратПра је празаМ"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "ПреузОЌање је завршеМП: %(name)s @ %(plugin)s"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "НПвО CaptchaID ПЎ ПтпреЌања: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "У вашеЌ МалПгу Ма сервОсу 9kw.eu МеЌа ЎПвПљМП креЎОта."
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "ИМсталОраМО скрОптО за %s: "
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "СкрОпта Ме ЌПже Ўа се ОзвршО:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Грешка у %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "У вашеЌ МалПгу Ма сервОсу ExpertDecoders МеЌа ЎПвПљМП креЎОта."
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "ПрвП ЎПЎајте МалПг Ма сервОсу rehost.to па пПМПвП пПкреМОте pyLoad."
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "ПреПсталП је %d креЎОта"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Pil О Tesseract МОсу ОМсталОраМО, МОтО је пПвезаМ клОјеМт раЎО ЎешОфрПвања пПтврЎМОх кПЎПва."
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "НО јеЎаМ резултат прПвере МОје прОЌљеМ у вреЌеМу ПЎ бОлП кПјег ЎПЎатка."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "ППстављање кПрОсМОка О групе МОје успелП: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "НеЌа прОкачеМПг клОјеМта за ЎешОфрПвање прПвере"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "ДПЎат пакет %(name)s са %(count)d везе(а)"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "ДПЎатП %(count)d везе у пакет #%(package)d"
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "НОсаЌ МашаП js ЌПтПр, ОМсталОратО Spidermonkey, ossp-js, pyv8 ОлО rhino"
diff --git a/locale/sr/LC_MESSAGES/pyLoadCli.po b/locale/sr/LC_MESSAGES/pyLoadCli.po
index 3cda02c25..21c5c2400 100644
--- a/locale/sr/LC_MESSAGES/pyLoadCli.po
+++ b/locale/sr/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " ИМтерфејс кПЌаМЎМе лОМОје"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s преузОЌања:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " БрзОМа: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " ВелОчОМа: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " ЗавршеМП: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr " ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "Ма чекању: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Статус:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "паузОраМП"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "пПкреМутП"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "УкупМа брзОМа"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "ДатПтеке у спОску"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "УкупМП"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "МеМО:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " ДПЎај везе"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Управљај спОскПЌ"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " Управљај сакупљачеЌ"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr " ПаузОрај/МаставО сервер"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " ОкПМчај сервер"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " ИзађО"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "КПрОстОте Пву сОМтаксу: add <ОЌе пакета> <веза> <Ўруга веза>
"
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "ПрПвера %d веза:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "ДатПтека Ме пПстПјО."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad је ПбустављеМ"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "КтаЌпа статус сервера"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "КтаЌпа преузОЌања у спОску"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "КтаЌпа преузОЌања у сакупљачу"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "ДПЎаје пакет у спОсак"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "ДПЎаје пакет у сакупљач"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "БрОше ЎатПтеке Оз спОска/сакупљача"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "БрОше пакете Оз спОска/сакупљача"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "ПреЌешта пакете Оз спОска у сакупљач О ПбрМутП"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "ППМПвП пПкреМО ЎатПтеке"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "ППМПвП пПкреМО пакете"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "ПрПверава ЎПступМПст (раЎО са лПкалМОЌ кПМтејМерПЌ)"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "ПрПверава ЎПступМПст ЎатПтеке кПМтејМера"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "ПаузОрај сервер"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "МаставО преузОЌања"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "ПаузОрај/МаставО"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "ПкПМчај сервер"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "СпОсак кПЌаМЎО:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Не ЌПгу Ўа пОшеЌ Ма ЎатПтеку са пПЎешавањОЌа"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Треба ваЌ py-openssl Ўа бО се прОвезалО Ма pyLoad језгрП."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "АЎреса: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "ППрт: "
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "КПрОсМОчкП ОЌе: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "ЛПзОМка: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "ППЎацО за прОјаву су пПгрешМО."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Не ЌПгу Ўа успПставОЌ везу са аЎресПЌ %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "ППтребаМ ваЌ је py-openssl Ўа бОсте се пПвезалО Ма сервер pyLoad-а."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "ЗаМеЌареМ је ОМтерактОвМО режОЌ јер сте заЎалО Меке кПЌаМЎе."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "ДПЎајте пакет:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "УМесОте ОЌе МПвПг пакета"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Пакет: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "РашчлаМОте везе кПје желОте Ўа ЎПЎате."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "УМесОте %s каЎа завршОте."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "ДПЎатП веза: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " МазаЎ Ма главМО ЌеМО"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Управљајте пакетОЌа:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Управљајте везаЌа:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Кта желОте Ўа преЌестОте?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Кта желОте Ўа ПбрОшете?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Кта желОте Ўа пПМПвП пПкреМете?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "ОЎабратО шта Ўа се ураЎО ОлО уМетО брПј пакета."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "ПбрОшО"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "преЌестО"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "пПМПвП пПкреМО"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " – претхПЎМП"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " – слеЎеће"
diff --git a/locale/sr/LC_MESSAGES/setup.po b/locale/sr/LC_MESSAGES/setup.po
index 710c3f54c..8363527b6 100644
--- a/locale/sr/LC_MESSAGES/setup.po
+++ b/locale/sr/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "ÐŽ"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "М"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "ДПбрП ЎПшлО кПЎ пПЌПћМОка за пПЎешавање pyLoad-а."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "ОМ ће прПверОтО сОстеЌ О МаЌестОтО ПсМПвМе пПставке такП Ўа ЌПжете Ўа пПкреМете pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "ВреЎМПст у угластОЌ заграЎаЌа је пПЎразуЌеваМа."
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "акП Ме желОте Ўа прПЌеМОте ОлО МезМате шта Ўа Озаберете, стОсМОте 'еМтер'."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "ЗМајте: ЌПжете пПМПвП Ўа пПкреМете Пвај асОстеМт са параЌетрПЌ --setup ОлО -s каЎа пПкреМет pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "АкП ОЌате прПблеЌа са асОстеМтПЌ, стОсМОте STRG-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "за пПМОштавање О МеЌПјте Ўа га пПкреМете аутПЌатскО са pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "КаЎа сте спреЌМО Ўа прПверОте сОстеЌ, стОсМОте 'еМтер'."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Треба ВаЌ pycurl, sqlite О python 2.5, 2.6 ОлО 2.7 за пПкретање pyLoad-а."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "ППправОте тП О пПМПвП пПкреМОте pyLoad."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Сетап ће се затвПрОтО."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "ПрПвера сОстеЌа је завршеМа, стОсМОте 'еМтер' Ўа бО вОЎелО резултат."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Статус ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "ЎешОфрПвање кПМтејМера"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "ссл веза"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "аутПЌатскП Малажење прПвере"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "ВебОМтерфејс"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "МапреЎаМ Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "ДПступМе фуМкцОје:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "ЀуМкцОје кПје МеЎПстају:"
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "py-crypto МОје ЎПступаМ"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "ТП ВаЌ треба акП желОте Ўа ЎешОфрујете кПМтејМере."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "ССЛ МОје ЎПступаМ"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "ППтребМП акП желОте Ўа ураЎОте сОгурМПсМу везу Ма језгрП ОлО вебОМтерфејс."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "АкП желОте Ўа прОступОте pyLoad саЌП лПкалМП, ССЛ МОје пПтребМП."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "МОје ЎПступМП Малажење прПвере"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "ППтребМП за Меке хПстере О каП бесплатаМ кПрОсМОк."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Gui МОје ЎПступМП"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "ГрафОчкО ОМтерфејс."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "МеЌа JavaScript ЌПтПр"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "ТП ВаЌ треба за Меке Click'N'Load везе. ИМсталОратО Spidermonkey, ossp-js, pyv8 ОлО rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "МПжете саЎа Ўа зауставОте О Ўа пПправОте Меке завОсМПстО акП желОте."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "НаставОтО са пПЎешавањеЌ?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "ЖелОте лО Ўа прПЌеМОте путању за пПЎешавање? ТреМутМа путања је %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "АкП кПрОстОте pyLoad Ма серверу ОлО Ма партОцОјО Ма ОМтерМПЌ флешу, ЌПже Ўа буЎе ЎПбрП Ўа прПЌеМОте."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "ПрПЌеМОтО путању за пПЎешавање?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "ЖелОте лО Ўа МаЌестОте пПЎатке за прОјаву О ПсМПвМе пПставке?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "ОвП је препПручеМП Ма првП пПкретање."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "УраЎО ПсМПсМП пПЎешавање?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "ЖелОте лО Ўа пПЎесОте SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "ППЎесОтО SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Да се кПМфОгурОше веб ОМтерфејс?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "ППЎесОтО веб ОМтерфејс?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "ППЎешавање је успешМП завршеМП."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "ПрОтОсМОте Enter Ўа Озађете О пПМПвП пПкреМете pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## ПрПвера сОстеЌа ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Ваша верзОја python је ЌМПгП МПва, упПтребОте python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Ваша верзОја python је престара, упПтребОте Ќакар python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "ВерзОја Python: У реЎу"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Ваша верзОја jinja2 %s Ўелу престара."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "МПжете Ўа МаставОте, алО акП веб ОМтерјест Ме раЎО,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "ажурОрајте ОлО ЎеОМсталОрајте га, pyLoad ОЌа ЎПвПљМП jinja2 бОблОПтеку."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS ЌПтПр"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## ОсМПвМП пПЎешавање ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "СлеЎећО пПЎацО за прОјаву важе за CLI, GUI О веб ОМтерфејс."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "КПрОсМОчкП ОЌе"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "ЈезОк"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "ЀасцОкла преузОЌања"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "МаксОЌалаМ брПј ОстПвреЌеМОх преузОЌања"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "КПрОстОтО пПМПвМП пПвезОвање?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "ЛПкацОја скрОпта за пПМПвМП пПвезОвање"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## ППЎешавање веб ОМтерфејса ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "АктОвОратО веб ОМтерфејс?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "АЎреса за прОјеЌ. АкП кПрОстОте 127.0.0.1 ОлО localhost, веб ОМтерфејс ће бОтО ЎПступаМ саЌП лПкалМП."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "АЎреса"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "ППрт"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad пружа МекПлОкП сОстеЌске пПЎршке сервера, евП краткП Пбјашњење."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "ППЎразуЌеваМ сервер, МајбПљО ОзбПр акП МезМате кПјО Ўа кПрОстОте."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Овај сервер пружа ССЛ О ЎПбра је алтерМатОва за уграђеМО."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "МПже Ўа га кПрОстО apache, lighttpd, пПтребМП је Ўа Ох пПЎесОте, штП МОје Мајлакше."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "ВрлП брза алтерМатОва пОсаМа у Њ, пПтребМП libev/лОМукс зМање."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "УзетО га ПвЎе: https://github.com/jonashaag/bjoern кПЌпОлујте га"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "О кПпОрајте bjoern.so у module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "О кПпОрајте bjoern.so у pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Пажња: у МекОЌ случајевОЌа уграђеМ сервер Ме раЎО, акП ОЌате прПблеЌа са веб ОМтерфејсПЌ"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "вратОте се ПвЎе О прПЌеМОте уграђеМ сервер са МавПјеМОЌ."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Сервер"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## ППЎешавање SSL-а ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "ППкреМОте Пве кПЌаМЎе Оз pyLoad фасцОкле пПЎешавања Ўа бО ураЎОлО ССЛ цертОфОкате:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "АкП сте завршОлО Ос све је у реЎу, ЌПжете саЎа Ўа актОвОрате ССЛ."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "АктОвОратО SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "ИзаберОте раЎњу"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 – креОрајте/уреЎОте кПрОсМОка"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 – ОзлОстајте кПрОсМОке"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 – уклПМОте кПрОсМОка"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 – ОзађОте"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "КПрОсМОцО"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "ППЎешавање МПве путање, актуелМа кПМфОгурацОја Меће бОтО преМета!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Путања кПМфОгурацОје"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Путања прПЌењеМа, сетај ће се затвПрОтО, пПМПвП пПкреМОте за Маставак."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "ПрОтОсМОте Enter Ўа Озађете."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Не ЌПгу Ўа пПставОЌ путању за пПЎешавање: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr "%s: У реЎу"
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: фалО"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "ЛПзОМка: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "ЛПзОМка је прекратка. УМесОте бар четОрО сОЌбПла."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "ППтврЎа лПзОМке: "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "ЛПзОМке се Ме пПклапају"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "Ўа"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "тачМП"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "т"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "Ме"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "МетачМП"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "М"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "НеОсправаМ уМПс"
diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po
index b1c927a67..8f3f05d72 100644
--- a/locale/sv/LC_MESSAGES/django.po
+++ b/locale/sv/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Ny captchabegÀran"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "Var god lÀs texten på captchan."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad startades om"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "Är det sÀkert att du vill avsluta pyLoad?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Starta om lÀnken"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Radera lÀnken"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "Var god skriv in ett paketnamn."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "Var god kiicka på den rÀtta captchapositionen."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Ett fel intrÀffade."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Mappen Àr tom"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Inga captchor att lÀsa."
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Lösenorden stÀmde inte överens."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "InstÀllningar sparade."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Ny mapp"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "Är det sÀkert att du vill starta om pyLoad?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "vÀntar %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktiva hÀmtningar"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Hem"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "HÀmtningar"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Loggar"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Konfiguration"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "Förlopp"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Ditt anvÀndarnamn och lösenord stÀmde inte. Försök igen."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "För att återstÀlla dina loginuppgifter eller lÀgga till en anvÀndare, kör:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Radera fÀrdiga"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Omstart misslyckades"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Mapp:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Lösenord:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Redigera paket"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Redigera paketdetaljerna hÀr."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Namnet på paketet."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Mappnamn för dessa nedladdningar."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Lösenordslista som anvÀnds vid uppackning."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "ÅterstÀll"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Du har loggats ut."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "SökvÀg"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "absolut"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "relativ"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "namn"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "storlek"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "typ"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "senast Àndrad"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "förÀldrakatalog"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "inget innehåll"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "TillÀggsprogram"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "VÀlj ett avsnitt från menyn"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Giltigt till"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Trafik kvar"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Tid"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Max samtidiga"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Ta bort?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "inte giltigt"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "ja"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "nej"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Skriv in dina kontouppgifter för att anvÀnda premiumfunktioner."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Ditt anvÀndarnamn."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Lösenord för detta konto."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Starta"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "föreg"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "nÀsta"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Slut"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Nyheter"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad-version:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Installationsmapp:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Konfigurationsmapp:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "HÀmtningsmapp:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Ledigt utrymme:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Språk:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Port för webbgrÀnssnitt:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Port för fjÀrrgrÀnssnitt:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Filhanterare"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "LÀgg till paket"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Klistra in lÀnkar eller ladda upp en container."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Namnet på det nya paketet."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "LÀnkar"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Klistra in dina lÀnkar eller valfri text och tryck filterknappen."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Filtrera lÀnkar"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "Lösenord för RAR-arkiv"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Fil"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Ladda upp en container."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "LÀser captcha"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha"
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Skriv in texten på captchan."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "WebbgrÀnssnitt"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad uppdatering tillgÀnglig!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Plugins uppdaterade, starta om!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha vÀntar"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Logga ut"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Administrera"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "Logga in!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Stoppa"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "HÀmta:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Återanslut:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Hastighet:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktiv:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Uppdatera sidan"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "lÀser in"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Tillbaka upp"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "Avsluta pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "Starta om pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "För att lÀgga till anvÀndare eller byta lösenord anvÀnd:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Viktigt: AdminanvÀndare har alltid alla behörigheter!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Byt lösenord"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "Behörigheter"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "Àndra"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Ange ditt nuvarande och önskade lösenord."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "AnvÀndare"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Nuvarande lösenord"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Nytt lösenord"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Det nya lösenordet."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Nytt lösenord (upprepa)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "Upprepa det nya lösenordet."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Du har inte behörighet att komma åt denna sida."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "HÀmtningskatalogen hittades inte."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "inte tillgÀnglig"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Kör pyload.py -s för att komma åt konfigurationen."
diff --git a/locale/sv/LC_MESSAGES/pyLoad.po b/locale/sv/LC_MESSAGES/pyLoad.po
index 7b88d29f7..48292bdec 100644
--- a/locale/sv/LC_MESSAGES/pyLoad.po
+++ b/locale/sv/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Tog emot avslutningssignal"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad körs redan med pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Misslyckades att Àndra gruppen %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Kunde inte Àndra anvÀndaren: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "mapp för loggar"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Startar"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "AnvÀnder hemkatalog: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "pyCrypto avkodar containerfiler"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "mapp för temporÀra filer"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "mapp för hÀmtningar"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "OpenSSL för sÀker anslutning"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Flyttar gamla anvÀndarinstÀllningar till databasen"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Kontrollera dina login-uppgifter med './pyload.py -u'"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "Alla lÀnkar togs bort"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "HÀmtningstid: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Ledigt utrymme: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Aktiverar konton..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Aktiverar tillÀggsprogram..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad Àr igång"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "startar om pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyLoad avslutas"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "Installera %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "kunde inte hitta %(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "kunde inte skapa %(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "stÀnger ner..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "fel vid nedstÀngning"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr "dödade pyLoad från Terminal"
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr "Fildatabasen togs bort på grund av inkompatibel version."
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr "Fildatabasen kunde INTE konverteras."
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr "Databasen konverterades från v2 till v3."
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr "Databasen konverterades från v3 till v4."
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr "Konverterar gammal Django DB"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "fÀrdig"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "frånkopplad"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "ansluten"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "kölagd"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "hoppades över"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "vÀntar"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "temp. frånkopplad"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "startar"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "misslyckades"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "avbruten"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "dekrypterar"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "anpassad"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "hÀmtar"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "behandlar"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "okÀnd"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paketet klart: %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr "AnvÀnder SSL ThriftBackend"
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Fel i fjÀrradministrationsmodulen: %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Startar %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "InlÀsningen av administrationsmodulen %(name)s misslyckades | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "vÀntar %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL-certifikat hittades inte."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Ledsen, start av %s direkt från pyLoad stöds inte lÀngre"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr "Du kan "
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr "naturligtvis kan du fortfarande anvÀda befintliga %s med pyLoads fastcgi server"
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
-msgstr "exempel på konfigurationsfiler finns i mappen \"module/webui/servers\""
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
+msgstr "exempel på konfigurationsfiler finns i mappen \"pyload/webui/servers\""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr "Kan inte anvÀnda %(server)s. python-flup Àr inte installerat!"
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr "Fel vid import av den lÀtta servern: %s"
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "Du måste ladda ner och kompilera bjoern, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
-msgstr "Kopiera filen boern.so till mappen 'module/lib' eller anvÀnd 'setup.py install'"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
+msgstr "Kopiera filen boern.so till mappen 'pyload/lib' eller anvÀnd 'setup.py install'"
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr "Naturligtvis behöver du vara bekant med Linux och veta hur man kompilerar programvara"
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr "Server instÀlld på trådad, pga kÀnda prestandaproblem i Windows."
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Den hÀr servern anvÀnder inte SSL, övervÀg att anvÀnda den trådade istÀllet "
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Startar inbyggd webbserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr "Startar trådad SSL-webbserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr "Startar trådad webbserver: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr "Startar fastcgi-server: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr "Startar den lÀtta webservern (bjoern): %(host)s:%(port)d"
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Du har inte behörighet att komma åt denna sida."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "HÀmtningskatalogen hittades inte."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "inte tillgÀnglig"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Kör pyload.py -s för att komma åt konfigurationen."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "HÀmtningen startar: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "HÀmtningen klar: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Plugin %s saknar en funktion."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "HÀmtningen avbröts: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "HÀmtning startades om: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "HÀmtningen Àr offline: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "HÀmtningen Àr tillfÀlligt offline: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "HÀmtning misslyckades: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "HÀmtning hoppades över: %(name)s pga %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr "Avkrypteringen startar: %s"
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr "HÀmtning misslyckades: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr "Försöker igen %s"
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Misslyckades aktivera %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Aktiverade plugins: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Avaktivera plugins: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Återanslutningen misslyckades: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Skript för att återansluta hittades inte!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Startar reconnect"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Exekveringen av återanslutningsskriptet misslyckades!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Återansluten, nytt IP-nummer: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "OtillrÀckligt utrymme på enheten"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr "Din tid %s har ett felaktigt format. AnvÀnd: 1:22-3:44"
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr "%s innehåller ett ogiltigt mönster."
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Fel vid import av %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr "lÀnklistan kunde inte raderas"
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr "KontoinstÀllningar raderade pga nytt format för konfigureringen."
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr "Filen finns inte."
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Aktiverat"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr "Ingen plugin returnerade captcharesultat i tid."
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr "Ingen klient för avkryptering av captcha ansluten"
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr "Lade till paketet %(name)s som innehåller %(count)d lÀnkar"
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr "Lade till %(count)d lÀnkar till paket #%(package)d "
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Ingen js motor hittades. Var vÀnlig installera Spidermonkey, ossp-js, pyv8 eller rhino"
diff --git a/locale/sv/LC_MESSAGES/pyLoadCli.po b/locale/sv/LC_MESSAGES/pyLoadCli.po
index 028585bc6..18b3a4009 100644
--- a/locale/sv/LC_MESSAGES/pyLoadCli.po
+++ b/locale/sv/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " KommandoradsgrÀnssnitt"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s hÀmtningar:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Hastighet: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " Storlek: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " FÀrdig om: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "vÀntar: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Meny:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " LÀgg till lÀnkar"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " Hantera kö"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "Hantera lÀnksamlaren"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "Pausa/starta servern"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " Döda server"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " Avsluta"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "AnvÀnd denna syntax: add <paketnamn> <lÀnk> <lÀnk2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Kontrollerar %d lÀnkar:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Filen finns inte."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad avbröts"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Visar serverstatus"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Visar nedladdningar i kön"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Visar nedladdningar i lÀnksamlaren"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "LÀgger till paketet i kön"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "LÀgger till paketet i lÀnksamlaren"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Radera filer från kön/lÀnksamlaren"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Radera paket från kön/lÀnksamlaren"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Flytta paket från kön till lÀnksamlaren och vice versa"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Starta om filer"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Starta om paket"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Undersök onlinestatus, fungerar med lokal container"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Kontrollerar onlinestatusen för en containerfil"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Pausa servern"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "återuppta hÀmtningar"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Pausa/fortsÀtt"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "döda server"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Lista över kommandon:"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Kunde inte skriva anvÀndarens instÀllningsfil"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "Du behöver py-openssl för att ansluta till denna pyLoad Core."
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adress: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "AnvÀndarnamn: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Lösenord: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Inloggningsdata Àr felaktigt."
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "Kunde inte etablera anslutning till %(addr)s:%(port)s."
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "Du behöver py-openssl för att ansluta till denna pyLoad core."
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Interaktivt lÀge ignorerat då vissa kommandon skickades."
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "LÀgg till paket:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Ange ett namn för nya paketet"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paket: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Klistra in lÀnkarna som du vill lÀgga till."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Skriv %s nÀr du Àr fÀrdig."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "LÀnkar lades till: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr " tillbaka till huvudmenyn"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Hantera paket:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Hantera lÀnkar:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Vad vill du flytta?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Vad vill du ta bort?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Vad vill du starta om?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "VÀlj vad du vill göra eller skriv in ett paketnummer."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "ta bort"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "flytta"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "starta om"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - föregående"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr " - nÀsta"
diff --git a/locale/sv/LC_MESSAGES/setup.po b/locale/sv/LC_MESSAGES/setup.po
index 190b6ab71..36013181c 100644
--- a/locale/sv/LC_MESSAGES/setup.po
+++ b/locale/sv/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "j"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "VÀlkommen till konfigurationsguiden för pyLoad."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Den kommer att kontrollera ditt system och göra en grundkonfiguration för att kunna köra pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "VÀrden inom hakparanteser [] Àr alltid standardvÀrdet,"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "tryck bara Enter i de fall du inte vill Àndra det eller om du Àr osÀker vad du ska vÀlja."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Glöm inte: Du kan alltid köra denna guide igen med --setup eller parametern -s, nÀr du startar pyload.py ."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Om du får några problem med denna guide så tryck Ctrl-C,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "för att avbryta och låt bli att starta automatiskt med pyload.py ."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Tryck på Enter nÀr du Àr fÀrdig för att kontrollera systemet."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "Du behöver pycurl, sqlite och python 2.5, 2.6 eller 2.7 för att köra pyLoad."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "Korrigera detta och kör pyLoad igen."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Konfigurationen kommer nu att stÀngas."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Systemkontrollen Àr fÀrdig. Tryck på Enter för att se din statusrapport."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr "container-dekryptering"
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "ssl-anslutning"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr "automatisk captcha-dekryptering"
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "Grafiskt grÀnssnitt"
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "WebbgrÀnssnitt"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "utökad Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Funktioner tillgÀngliga:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Funktioner saknade: "
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr "ingen py-crypto tillgÀnglig"
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr "Du behöver denna om du vill dekryptera container-filer."
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "ingen SSL tillgÀnglig"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Denna krÀvs om du vill etablera en sÀker anslutning till core eller webbgrÀnssnittet."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "Om du endast vill ha lokalt åtkomst till pyLoad så Àr inte SSL anvÀndbart."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr "ingen Captcha Recognition tillgÀnglig"
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr "Behövs endast för vissa \"hosters\" och som \"freeuser\"."
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "GUI inte tillgÀngligt"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Grafiskt anvÀndargrÀnssnitt."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "ingen JavaScript-motor hittades"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Du behöver detta för några Click'N'Load-lÀnkar. Installera Spidermonkey, ossp-js, pyv8 eller rhino"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Du kan avbryta konfigurationen nu och rÀtta till beroenden om du vill."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "FortsÀtt med konfigurationen?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Vill du Àndra konfigurationssökvÀgen? Aktuell sökvÀg Àr %s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr "Om du anvÀnder pyLoad på en server eller hempartitionen finns på en intern Flash-disk så kan det vara en bra idé att Àndra den."
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Ändra konfigurationssökvÀg?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Vill du konfigurera inloggningsdata och grundinstÀllningar?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Detta rekommenderas för första gången."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Skapa grundkonfiguration?"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Vill du konfigurera SSL?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Konfigurera SSL?"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Vill du konfigurera webbgrÀnssnittet?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Konfigurera webbgrÀnssnittet?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Konfigurationen fÀrdigstÀlldes."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Tryck Enter för att avsluta och starta om pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Systemkontroll ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Din python-version Àr för ny. AnvÀnd Python 2.6/2.7"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Din python-version Àr för gammal. AnvÀnd minst Python 2.5"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python-version: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "Din installerade jinja2 version %s verkar vara för gammal."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr "Du kan med sÀkerhet fortsÀtta men om webbgrÀnssnittet inte fungerar,"
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr "uppgradera eller avinstallera det. pyLoad inkluderar ett lÀmpligt jinja2-bibliotek."
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS-motor"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Grundkonfiguration ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Följande inloggningsdata Àr giltigt för CLI, GUI och webbgrÀnssnitt."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr "Externa klienter (GUI, CLI osv) behöver fjÀrråtkomst för att fungera över nÀtverket."
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr "Men om du bara vill anvÀnda webbgrÀnssnittet kan du avaktivera den för att spara RAM."
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Aktivera fjÀrråtkomst"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "HÀmtningsmapp"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Max samtidiga hÀmtningar"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "AnvÀnd återanslutning (Reconnect)?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Plats för Reconnect-skript"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Konfiguration av webbgrÀnssnitt ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Aktivera webbgrÀnssnitt?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Lyssningsadress, om du anvÀnder 127.0.0.1 eller localhost, kommer webbgrÀnssnittet endast vara åtkomligt lokalt."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad erbjuder flera server backends. HÀr följer en kort förklaring."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr "Standardserver, bÀsta valet om du inte vet vilken du ska vÀlja."
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr "Denna server erbjuder SSL och Àr ett bra alternativ till den inbyggda."
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Kan anvÀndas med apache, lighttpd. KrÀver att du konfigurera dem, vilket inte Àr så svårt."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr "Mycket snabbt alternativ skrivet i C. KrÀver libev och Linux-kunskaper."
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "HÀmta det hÀr: https://github.com/jonashaag/bjoern, kompilera det"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
-msgstr "och kopiera bjoern.so till module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
+msgstr "och kopiera bjoern.so till pyload/lib"
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Viktigt: I vissa ovanliga fall kanske den inbyggda servern inte fungerar. Om du upplever problem med webbgrÀnssnittet"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "så kom tillbaka hit och Àndra den inbyggda servern till den trådade servern."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## SSL-konfiguration ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Kör dessa kommandon från konfigurationsmappen för pyLoad för att skapa SSL-certifikaten:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Du kan aktivera SSL nu om du Àr fÀrdig och allting gick bra."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "Aktivera SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "VÀlj åtgÀrd"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Skapa/Redigera anvÀndare"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Lista anvÀndare"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Ta bort anvÀndare"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Avsluta"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "AnvÀndare"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "StÀller in ny konfigurationssökvÀg. Aktuell konfiguration kommer inte att överföras!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "KonfigurationssökvÀg"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "KonfigurationssökvÀgen har Àndrats. Guiden kommer nu att stÀngas. Starta om för att fortsÀtta."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Tryck Enter för att avsluta."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "InstÀllning av konfigurationssökvÀg misslyckades: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: saknas"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Lösenord: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Lösenord (igen): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Lösenorden stÀmde inte överens."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "ja"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "sant"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "s"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "nej"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "falskt"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Ogiltig inmatning"
diff --git a/locale/te/LC_MESSAGES/django.po b/locale/te/LC_MESSAGES/django.po
index 08637a88d..e70361f00 100644
--- a/locale/te/LC_MESSAGES/django.po
+++ b/locale/te/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr ""
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr ""
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr ""
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr ""
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr ""
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr ""
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr ""
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr ""
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr ""
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr ""
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/te/LC_MESSAGES/pyLoad.po b/locale/te/LC_MESSAGES/pyLoad.po
index 9b38dd6fa..fd50b53a0 100644
--- a/locale/te/LC_MESSAGES/pyLoad.po
+++ b/locale/te/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr ""
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/te/LC_MESSAGES/pyLoadCli.po b/locale/te/LC_MESSAGES/pyLoadCli.po
index 8bea11172..88558b540 100644
--- a/locale/te/LC_MESSAGES/pyLoadCli.po
+++ b/locale/te/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr ""
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr ""
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr ""
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr ""
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr ""
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr ""
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr ""
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr ""
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr ""
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr ""
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr ""
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr ""
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr ""
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr ""
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/te/LC_MESSAGES/setup.po b/locale/te/LC_MESSAGES/setup.po
index 3a58338b3..0249422a8 100644
--- a/locale/te/LC_MESSAGES/setup.po
+++ b/locale/te/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr ""
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr ""
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr ""
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr ""
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr ""
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po
index e76b54f38..63e227a8d 100644
--- a/locale/tr/LC_MESSAGES/django.po
+++ b/locale/tr/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "Yeni Captcha İsteği"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "LÃŒtfen captcha ÃŒstÃŒndeki metni okuyunuz."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad yeniden başlatıldı"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "Kapat"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "Başarılı"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "Aç"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "pyLoad'dan çıkmak istediğinize emin misiniz?"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "Bağlantıyı yeniden başlat"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "Bağlantıyı Sil"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "LÌtfen paket adını girin."
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "LÃŒtfen sağdaki captcha ya tıklatın."
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "Bir hata oluştu."
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "Klasör boş"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "Başarısız oldu"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "Okumak için Captcha bulunamadı"
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "Parolalar eşleşmedi."
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "Ayarlar kaydedildi."
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "Yeni klasör"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "pyLoad'u yeniden başlatmak istediğinize emin misiniz?"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "bekleyen %s"
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "Aktif İndirmeler"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "Ev"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "İndirmeler"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "Loglar "
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "Ayarlar"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "İsim"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Durum"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "Bilgi"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Boyut"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "İlerleme"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Oturum açma"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Kullanıcı Adı"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Şifre"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "Kullanıcı adınız ve parolanız uymuyor. LÌtfen tekrar deneyiniz."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "Hesabınızı sıfırlamak için veya yeni kullanıcı eklemek için çalıştırın:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "Bitenleri Temizle"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "Başarısızları Tekrar Başlat"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "Klasör:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "Şifre:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "Paketi DÃŒzenle"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "Aşağıdaki paket detaylarını dÃŒzenle."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "Paketin adı."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Klasör"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "Bu indirmeler için alt klasör adı."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "Unrar için parola listesi."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Gönder"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "Sıfırla"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "Başarılı şekilde çıkış yaptınız."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "Yol"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "tam"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "Bağıntılı"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "isim"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "boyut"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "tip"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "son değişimi"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "ana klasör"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "içerik yok"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Genel"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "Eklentiler"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Hesaplar"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "MenÌden bir bölÌm seçiniz"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Eklenti"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "Son geçerlilik tarihi"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "Kalan trafik"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "Zaman"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "Maks Paralel"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "Sil?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "geçerli"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "geçersiz"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "evet"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "hayır"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Ekle"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "Hesap Ekle"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "Premium özelliklerini kullanabilmek için hesap bilgilerini giriniz."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "Kullanıcı adınız."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "Bu hesap için parola."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "TÌrÌ"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "Hesabınız için host seçiniz."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "Başla"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "önceki"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "sonraki"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "Son"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "Haberler"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "Destek"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "Sistem"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad versiyonu:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "Kurulum KlasörÌ:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "Ayar KlasörÌ:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "İndirme KlasörÌ:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "Boş Alan:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "Dil:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Web ArayÃŒz Portu:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "Uzak ArayÃŒz Portu:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "Kurulum"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "Dosya Yöneticisi"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "Paket Ekle"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "Linklerinizi yapıştırın veya taşıyıcı dosyayı yÃŒkleyin."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "Yeni paketin adı."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "Linkler"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "Linklerinizi veya herhangi bir metni yapıştırıp filitrele butonuna basınız."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "Linkleri filitrele"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "RAR-Arşiv dosyaları için parola"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "Dosya"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "Taşıyıcı dosyayı yÃŒkleyin."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Hedef"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "Captcha okunuyor"
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "Captcha."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "Metin"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "Captcha ÃŒstÃŒndeki metni giriniz."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Kapat"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Web arayÌzÌ"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad GÃŒncelleme mevcut!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "Eklentiler gÃŒncellendi, lÃŒtfen yeniden başlatın !"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "Captcha bekliyor"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "Çıkış"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "Yönet"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "Bilgi"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "LÃŒtfen Giriş Yapın!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "Dur"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "İptal"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "İndirme:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "Yeniden bağlan:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "Hız:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "Aktif:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "Sayfayı yenile"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "yÃŒkleniyor"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "Sayfa başı"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "pyLoad'dan çık"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "pyLoad'ı yeniden başlat"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "Kullanıcı eklemek veya şifre değiştirmek:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "Önemli: Yönetici kullanıcısının her zaman tÃŒm izinleri vardır!"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "Parolayı Değiştir"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "İzinleri"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "değiştir"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "Şimdiki parolanızı ve değiştirmek istediğiniz parolayı giriniz."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "Kullanıcı"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "Parolanız"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "Yeni parola"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "Yeni parola."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "Yeni parola (tekrar)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "LÌtfen yeni parolanızı tekrar giriniz."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Bu sayfaya erişmek için izniniz yok."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "İndirme dizini bulunamadı."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "sınırsız"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "mevcut değil"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Ayarlara erişmek için pyload.py -s çalıştırın."
diff --git a/locale/tr/LC_MESSAGES/pyLoad.po b/locale/tr/LC_MESSAGES/pyLoad.po
index c3d2d7a55..ea9d3755c 100644
--- a/locale/tr/LC_MESSAGES/pyLoad.po
+++ b/locale/tr/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "Çıkış sinyali alındı"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad zaten %s pid ile çalışıyor"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "Grup değiştirme başarısız: %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "Kullanıcı değiştirme başarısız: %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "gÌnlÌkler için klasör"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "Başlıyor"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "Ev dizinini kullan: %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "geçici dosyalar için klasör"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "indirmeler için klasör"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "GÃŒvenli bağlantı için OpenSSL"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "Eski kullanıcı ayarlarını veritabanına taşı"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "Giriş bilgilerinizi kontrol edin ./pyload.py -u"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "TÃŒm bağlantılar kaldırıldı"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "İndirme sÌresi: %s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "Boş alan: %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "Hesap etkinleştiriliyor ..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "Eklentiler etkinleştiriliyor ..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad başlatıldı ve çalışıyor"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "pyLoad yeniden başlatılıyor"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "pyload çıkış"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "kapatılıyor ..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "kapatma sırasında hata oluştu"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "bitti"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "Çevrimdışı"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "Çevrimiçi"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "sıraya alındı"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "atlandı"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "bekliyor"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "geçici çevrimdışı"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "başlatılıyor"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "başarısız oldu"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "iptal edildi"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "çözÌlÌyor"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "Özel"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "indiriliyor"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "işlem devam ediyor"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "bilinmeyen"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "Paket tamamlandı. %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "Uzak uç hatası: % s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "Başlıyor %(name)s: %(addr)s:%(port)s"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "Arka uç yÌklenirken hata %(name)s | %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr "bekleyen %s"
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL sertifikaları bulunamadı."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr "Maalesef pyLoad içinde doğrudan başlangıç​​ %s için destek dÌştÃŒ"
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr "bjoern'i indirmek ve derlemek gerekir, https://github.com/jonashaag/bjoern"
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "Bu sunucu hiçbir SSL sunmuyor, kullanarak yerine dişli dÌşÌnÃŒn lÃŒtfen"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr "Yerleşik web sunucusu başlatılıyor: %(host)s:%(port)d"
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr "Bu sayfaya erişmek için izniniz yok."
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr "İndirme dizini bulunamadı."
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "sınırsız"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr "mevcut değil"
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr "Ayarlara erişmek için pyload.py -s çalıştırın."
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "Karşıdan yÃŒkleme başarısız, tekli bağlantıya dönÃŒn | %s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "YÃŒkleme başlar: %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "YÃŒkleme bitti: %s"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "Eklenti %s işlevi eksik."
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "YÃŒkleme iptal edildi: %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "YÃŒkleme yeniden başlatıldı: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "YÃŒkleme çevrimdışı: %s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "YÃŒkleme geçici olarak çevrımdışı: %s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "YÃŒkleme başarısız: %(name)s | %(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "Sunucuya bağlanılamadı veya bağlantı sıfırlandı, 1 dakikalık erteleme bekleniyor."
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "YÌkleme atlandı: %(name)s bunun yÌzÌnden %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "Bilgisi %(name)s alınırken hata | %(err)s oluştu"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "Aktive etme başarısız %(name)s"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr "Eklentiler etkinleştiriliyor: %s"
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr "Eklentiler kapatılıyor: %s"
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "Tekrar bağlanma başarısız: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "Tekrar bağlanma komutu bulunamadı!"
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "Tekrar bağlanma başlatılıyor"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "Yeniden Bağlantı komut dosyası yÃŒrÃŒtmesi başarısız!"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "Yeniden Bağlandı, yeni IP: %s"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "Aygıtta yeterli alan yok"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "Hesap ile giriş yapılamadı %(user)s | %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "Hatalı Şifre"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "Hesap %s yeterli trafik yok, 30 dk içinde yeniden deneyin"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "Hesap %s sÌresi doldu, 1 saat içinde yeniden deneyin"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "İndirme sınırına erişildi"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "Alınırken hata %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "Hiçbir Sunucu yÌklenemedi"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "Bitshare hesabınızdaki direk yÃŒklemeyi aktifleştirin"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "Yetkilendirme gerekli (kullanıcı adı: şifre)"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "LÃŒtfen %s hesabınıza girin veya bu eklentiyi devre dışı bırakın"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "İndirilen dosyadaki (%s)... HTML kodunda yönlendirme hatası? Download yeniden başlatıldı."
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "Dosya geçici olarak kullanılamıyor"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr "Netload: YÌklemeler %d s arasında bekliyor."
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr "Netload: captcha için bekleniyor %d s."
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "İndirilen dosya boş"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API anahtarı geçersiz"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: yeterli trafik kalmadı"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "Trafik aşıldı"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr "Rapidshare: Trafik Paylaşılan (direk yÃŒkleme)"
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "Zaten bu IP adresinden yÌkleme yapılmakta, 60 saniye bekleniyor"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "Geçersiz kimlik doğrulama kodu, yÃŒkleme yeniden başlatılacak"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr "RapidShareCom: TÃŒm ÃŒcretsiz bağlantılar doldu"
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "Bu dosya için premium Ìyelik hesabı gerekir"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "Dosya adı geçersiz bildirdi"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "Paralel yÌkleme hatası, 60 saniye bekleniyor."
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "giriş yapılmadı."
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "ÇözÃŒmleme başarısız oldu"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "URL'de sağlanan hiçbir dosya anahtarı yok"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "Hata kodu:"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "*** Eklentiler gÃŒncellendi, pyLoad'ı yeniden başlatın ***"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "Eklentiler gÃŒncellendi ve yeniden yÃŒklendi"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "Eklentiler için gÌncelleme yok"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "pyLoad için gÌncelleme yok"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "*** Yeni pyLoad SÌrÌmÌ %s mevcuttur ***"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** Buradan indirin: http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "GÃŒncelleştirmeler için sunucuya bağlanmak mÃŒmkÃŒn değil"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "Yeni versiyonu %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "%s gÃŒncelleştirme hatası"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "SÃŒrÃŒm uyuşmazlığı"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "YÌkleme bitti: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "Yeni Captcha İsteği: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "captcha ÃŒstÃŒndeki 'c %s metnini cevapla"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "LÃŒtfen önce premium.to hesabınızı ekleyin ve pyLoad'u yeniden başlatın"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "HotFolder gelen ek %s"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "YÌklÌ %s yok"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "%s etkinleştirilemedi"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "Etkinleştirildi"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "Aktif Extract eklentisi yok"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "%s paketini daha sonra ayıklamak için sıraya alındı"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "%s paketi kontrol et"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "Arşiv ayıklanıyor şuraya %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "Arşivden ayıklanacak dosya bulunamadı"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "Ayıklanıyor"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "Şifre korumalı"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "Hatalı şifre"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "%s Dosya siliniyor"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "Ayıklama bitti"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "Arşiv hatası"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC Uyuşmazlığı"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "Bilinmeyen Hata"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "Kullanıcı ve Grup Ayarları başarısız oldu"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: Port 9666 zaten kullanılıyor"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "%s kredi kaldı"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "yanıt gönderilemedi."
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "Sizin CaptchaTrader hesabınızda yeterli kredi bulunmamakta"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "Şifreleme listesi bulunamadı"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Şifreleme listesi boş"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "YÌkleme bitti: %(name)s @ %(plugin)s "
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "Yeni CaptchaID yÌkleme tarafından: %s : %s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "Captcha 9kw.eu hesabı yeterli kredi yok"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "%s: için yÌklÌ komut dosyaları"
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "Komut dosya çalıştırılamaz:"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "Hata %(script)s: %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "ExpertDecoders hesabınızda yeterli kredi yok"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "LÃŒtfen önce rehost.to hesabınızı ekleyin ve pyLoad'u yeniden başlatın"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "LÃŒtfen önce bir geçerli premiumize.me hesabı ekleyin ve pyLoad yeniden başlatın."
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "%d kredi kaldı"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "Captcha şifresini çözmek için pil ve tesseract yÃŒklenmemiş ve hiçbir istemci bağlı değil"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "Kullanıcı ve grup kurma başarısız oldu: %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/tr/LC_MESSAGES/pyLoadCli.po b/locale/tr/LC_MESSAGES/pyLoadCli.po
index 19d122f60..923de377c 100644
--- a/locale/tr/LC_MESSAGES/pyLoadCli.po
+++ b/locale/tr/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " Komut satır arayÌzÌ"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s İndirmeler:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " Hız: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " BÃŒyÃŒklÃŒk: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " Bitiş zamanı: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "bekleniyor: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "Durum"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "Duraklatıldı"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "çalışıyor"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "toplam hız"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "Sıradaki Dosyalar"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "Toplam"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "MenÌ:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " Linkleri Ekle"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "Kuyruğu DÃŒzenle"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "KolektörÌ DÌzenle "
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "(Un)Sunucuyu Durdur"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "Sunucuyu Devredışı bırak"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "Çıkış"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "LÃŒtfen doğru eşleştirme metnini kullanın:Ekle <Paket adı> <link> <linkl2>"
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "%d Linkler Kontrol ediliyor"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Dosya bulunamadı"
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad durdu"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "Sunucu durumunu yazdır"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "Kuyruktakileri yazdır"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "Kolektördekileri yazdır"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "Kuyruğa paket ekle"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "Kolektöre paket ekle"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "Dosyaları Kuyruktan/Kolektör'den sil"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "Paketleri Kuyruktan/Kolektör'den sil"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "Paketleri Kuyruktan , Kolektöre taşı veya tam tersini yap"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Dosyaları yenile"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "Paketleri yenile"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "Yerel konteynerla çalıştıgını ve online olup olmadığını kontrol et"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "Konteyner dosyalarının çemrimiçi oldugunu kontrol et"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "Sunucuyu durdur"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "indirmelere devam et"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "Seçilenleri durdur/devam ettir"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "sunucuyu durdur yap"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "Komut listesi"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "Kullanıcı ayar dosyası yazılamadı"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "pyLoad çekirdeğine bağlanmak için py-opensll ye baglanmanız lazım"
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "Adres: "
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Port:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Kullanıcı adı: "
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Şifre: "
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "Giriş bilgileri yanlış"
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "%(addr)s:%(port)s. ile bağlantı kurulamadı"
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "pyLoad çekirdeğine bağlanmak için py-opensll ye baglanmanız lazım"
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "Bazı komutları onayladınızdan beri , Çevrimdışı modu engellendi"
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "Paket ekle:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "Yeni paketin adını girin"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Paket: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Eklemek isteniz linkleri çözÌmle"
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Tip %s tamamlandı"
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Eklenen linkler: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "MenÌye geri dön"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "Paketleri DÃŒzenle:"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Linkleri DÃŒzenle:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "Neleri taşımak istersiniz?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "Neleri silmek istersiniz?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "Neleri yenilemek istersiniz?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr "Ne yapmak istediniz seçin veya paket numarası girin."
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "sil"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "taşı"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "yeniden başlat "
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - önceki"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "-Sonraki"
diff --git a/locale/tr/LC_MESSAGES/setup.po b/locale/tr/LC_MESSAGES/setup.po
index e12e79344..ddc5a5de8 100644
--- a/locale/tr/LC_MESSAGES/setup.po
+++ b/locale/tr/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "e"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "h"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "PyLoad ayar sihirbazına hoşgeldiniz."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Sisteminizi kontrol edecek ve pyLoad'ın çalışması için bir temel kurulum yapacaktır."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "Parantez içindeki değerler [], her zaman varsayılan değerdir"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "değiştirmek istemediğinde yada neyi seçeceğinden emin değilsen, sadece enter'e bas."
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "Unutma: pyload.py -setup yada -s ekleyerek bu Asistanı her zaman yeniden başlatabilirsiniz."
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "Asistan ile herhangi bir sorun yaşarsanız STRG-C tuşuna basın,"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "iptal etmek ve pyload.py ile otomatik başlatmamak için."
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "Eğer sistem kontrolÃŒ için hazırsanız, enter'a basın."
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "pyLoad'ı çalıştırmak için pycurl, sqlite ve python 2.5, 2.6 veya 2.7 gerekir."
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "LÃŒtfen bunu dÃŒzeltin ve pyLoad'ı yeniden çalıştırın."
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "Kur şimdi kapanacak."
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "Sistem kontrolÃŒ tamamlandı, durum raporunu görmek için Enter tuşuna basın."
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "## Durum ##"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr "ssl bağlantısı"
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr "ArayÃŒz"
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Web arayÌzÌ"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr "genişletilmiş Click'N'Load"
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr "Mevcut Özellikler:"
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr "Eksik Özellikler:"
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr "SSL bulunmamaktadır"
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr "Sisteme yada Web arayÃŒzÃŒne gÃŒvenli bağlantı için bu gerekli."
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr "pyLoad'a yanlızca yerel erişmek istiyorsanız, ssl önerilmez."
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr "Kullanıcı ArayÃŒzÃŒ mevcut değil"
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr "Grafiksel Kullanıcı ArayÌzÌ."
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr "JavaScript motoru bulunamadı"
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr "Bazı Click'N'Load bağlantıları için gerekli. Spidermonkey, ossp-js, pyv8 yada rhino yÃŒkleyin"
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr "Şuan kurulum iptal edebilir ve gerekiyorsa bazı bağımlılık gerektiren dÃŒzeltmeleri yapabilirsiniz."
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "Kurulum ile devam edilsin mi?"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "Yapılandırma yolunu değiştirmek istiyor musunuz? Mevcut% s"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "Yapılandırma yolunu değiştirme?"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "Giriş verileri ve temel ayarları yapılandırmak istiyor musunuz?"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "Bu ilk çalışma için tavsiye edilir."
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "Temel kurulum yap"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "Ssl yapılandırmak istiyor musunuz?"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "Ssl yapılandırması"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "Web arayÌzÌnÌ yapılandırmak istiyor musunuz?"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "Web arayÌzÌ yapılandırması?"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "Kur başarıyla tamamlandı."
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "Çıkmak için Enter tuşuna basın ve pyLoad'ı yeniden başlatın"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr "## Sistem Kontrol ##"
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr "Python sÌrÌmÌnÌz çok yeni, Python 2.6/2.7 kullanın"
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr "Python sÌrÌmÌnÌz çok eski, en az Python 2.5 kullanın"
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr "Python Versiyon: OK"
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr "YÌklÌ olan Jinja2 versiyonu %s çok eski görÌnÌyor."
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr "JS motoru"
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "## Temel Kurulum ##"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "Aşağıdaki giriş verileri geçerlidir şunlar için CLI, GUI ve webarayÃŒzÃŒ."
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Kullanıcı Adı"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr "Uzaktan Erişim"
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "Dil"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr "İndirme klasörÌ"
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "Max indirme sayısı"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "Bağlantı sıfırlama?"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "Komut dosyası konumu yeniden bağlanın"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "## Web arayÌzÌ Kurulumu ##"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "Web arayÌzÌ etkin?"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "Adrese bak, eğer 127.0.0.1 veya localhost kullanıyorsanız, webinterface yerel olarak erişilebilir olacaktır."
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Adres"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Port"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad şimdi kısa bir açıklama sonrasında, birçok sunucu arka uçları sunmaktadır."
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "Tarafından kullanılabilmek için apache, lighttpd, sana onları konfigÃŒre etmek gerektirir; ki bu çok da kolay bir iş değildir."
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "Buradan edinin: https://github.com/jonashaag/bjoern, onu derleyin"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "Dikkat: Bazı farklı durumlarda yerleşik sunucu çalışmıyorsa, eğer webarayÃŒzÃŒyle ilgili problem farke edersen"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "Buraya gel ve burada yerleşik sunucu dişli değiştir."
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Sunucu"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "## SSL Kurulumu ##"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "Bu komutlar ssl sertifikaları yapmak için pyLoad config klasörÃŒnden çalıştırın:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "Eğer yaptıysan ve her şey iyi gittiyse, ssl'yi şimdi etkinleştirebilirsiniz."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "SSL Etkinleştir?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "Eylem seçin"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - Kullanıcı Oluştur / DÃŒzenle"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - Kullanıcıları listele"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - Kullanıcı kaldır"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - Çıkış"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "Kullanıcılar"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr "Yeni ayarlar yapılandırma yolu, eski ayarlar transfer edilmeyecek!"
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr "Yapılandırma yolu"
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr "Yapılandırma yolu değişti, kurulum şimdi kapanacak, devam etmek için yeniden başlatın."
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "Çıkmak için Enter tuşuna basın."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Yapılandırma ayar yolu başarısız oldu: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr "%s: eksik"
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Şifre: "
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "Şifre çok kısa. En az 4 sembol kullanın."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "Şifre (tekrar):"
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "Parolalar eşleşmedi."
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "evet"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "doğru"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr "d"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "hayır"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "yanlış"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr "y"
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "Geçersiz giriş"
diff --git a/locale/uk/LC_MESSAGES/django.po b/locale/uk/LC_MESSAGES/django.po
index 388d61f64..0209d315c 100644
--- a/locale/uk/LC_MESSAGES/django.po
+++ b/locale/uk/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "вОкл"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "вкл"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "НевЎалП"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "ІЌ’я"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Статус"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "РПзЌір"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "ЛПгіМ"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "ІЌ'я кПрОстувача"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "ПарПль"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Папка"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "ПіЎтверЎОтО"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "ЗагальМі"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "ОблікПві запОсО"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "ПлагіМ"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "ЎійсМОй"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "ДПЎатО"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "ТОп"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "СОстеЌа"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "ПараЌетрО"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "ПрОзМачеММя"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "ЗакрОтО"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "СкасуватО"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr "АЎЌіМ"
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПбЌежеМОй"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/uk/LC_MESSAGES/pyLoad.po b/locale/uk/LC_MESSAGES/pyLoad.po
index 2c1e6af57..20c9a1b17 100644
--- a/locale/uk/LC_MESSAGES/pyLoad.po
+++ b/locale/uk/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "SSL-сертОфікатО Ме зМайЎеМП."
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "МеПбЌежеМОй"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/uk/LC_MESSAGES/pyLoadCli.po b/locale/uk/LC_MESSAGES/pyLoadCli.po
index 57cb147ef..10ac61deb 100644
--- a/locale/uk/LC_MESSAGES/pyLoadCli.po
+++ b/locale/uk/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr " ІМтерфейс кПЌаМЎМПгП ряЎка"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s заваМтажеМь:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr " КвОЎкість: "
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr " РПзЌір: "
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr " ЗакіМчОв у: "
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID: "
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "ПчікуваММя: "
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "СтаМ:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "прОзупОМеМП"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "загальМа швОЎкість"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "ЀайлО у черзі"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "ВсьПгП"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "МеМю:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr " ДПЎатО пПсОлаММя"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr " КеруваММя чергПю"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr " КеруватО кПлектПрПЌ"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr ""
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr " ВбОтО сервер"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr " ВОйтО"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "БуЎь ласка, вОкПрОстПвуйте такОй сОМтаксОс: ЎПЎатО < Ñ–ÐŒ'я Пакета > <link><link2>..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Перевірка %d пПсОлаММя:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Ѐайл Ме ісМує."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr ""
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr ""
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "ПереЌістОтО пакуМкО з чергО у кПлектПр і МавпакО"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr ""
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr ""
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr ""
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr ""
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr ""
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr ""
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr ""
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr ""
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr ""
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "ДПЎатО пакет:"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "ВвеЎіть Ñ–ÐŒ'я Ўля МПвПгП пакета"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr ""
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr ""
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr ""
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "ППсОлаММя ЎПЎаМП: "
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr ""
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "КеруваММя пПсОлаММяЌО:"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "ЩП вО хПчете вОЎалОтО?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "вОЎалОтО"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "перезапустОтО"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " -пПпереЎМій"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr ""
diff --git a/locale/uk/LC_MESSAGES/setup.po b/locale/uk/LC_MESSAGES/setup.po
index 5693044f1..a06a623f9 100644
--- a/locale/uk/LC_MESSAGES/setup.po
+++ b/locale/uk/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "ЛаскавП прПсОЌП ЎП асОстеМту устаМПвкО."
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "Ввашу сОстеЌу зараз буЎе перевіреМП і зрПблеМПбазПві устаМПвкО Ўля тПгП, щПб запустОтО pyLoad."
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "ЗМачеММя у кваЎратМОх Ўужках [] завжЎО є зМачеММя за заЌПвчаММяЌ"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "НатОсМіть enter щПб перезапустіть pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "ІЌ'я кПрОстувача"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "МПва/Language"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "АЎреса"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "ППрт"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Сервер"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "# # SSL МалаштуваММя # #"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "ВОкПМатО ці кПЌаМЎО з папкО pyLoad Ўля тПгП щПб зрПбОтО ssl сертОфікатО:"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "ЯкщП вО все зрПбОлО, і все прПйшлП ЎПбре, вО ЌПжете актОвуватО ssl зараз."
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "АктОвуватО SSL?"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "ВОбратО ÐŽÑ–ÑŽ"
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1 - СтвПреММя та реЎагуваММя кПрОстувач"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2 - СпОсПк кПрОстувачів"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3 - ВОЎалОтО кПрОстувача"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4 - ВОхіЎ"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "КПрОстувачі"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "НатОсМіть клавішу Enter, щПб закрОтО."
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "Не вЎалПся зЌіМОтО шлях ЎП МалаштуваМь: %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr ""
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "ПарПль заМаЎтП кПрПткОй. МіМіЌальМа ЎПвжОМа 4 сОЌвПла."
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "ПарПль (ще раз): "
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "Так"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "Ні"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "НевірМОй ввіЎ"
diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po
index 6bdce3925..16cbce3da 100644
--- a/locale/vi/LC_MESSAGES/django.po
+++ b/locale/vi/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr ""
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr ""
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr ""
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "tắt"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr ""
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "trên"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr ""
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr ""
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr ""
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr ""
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr ""
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr ""
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr ""
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr ""
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr ""
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr ""
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr ""
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr ""
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr ""
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr ""
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr ""
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr ""
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "Tên"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "Tình trạng"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr ""
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "Kích thước"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr ""
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "Đăng nhập"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "Tên người dùng"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "Mật khẩu"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr ""
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr ""
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "Thư mục"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr ""
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "Gá»­i"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr ""
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr ""
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "Chung"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "Tài khoản"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "Plugin"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "hợp lệ"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "Thêm"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr ""
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr ""
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr ""
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr ""
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr ""
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr ""
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr ""
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr ""
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr ""
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr ""
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr ""
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr ""
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr ""
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr ""
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr ""
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr ""
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr ""
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr ""
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "Điểm đến"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr ""
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "Đóng"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr ""
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr ""
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr ""
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr ""
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr ""
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr ""
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr ""
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "Hủy bỏ"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr ""
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr ""
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr ""
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr ""
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "khÃŽng giới hạn"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/vi/LC_MESSAGES/pyLoad.po b/locale/vi/LC_MESSAGES/pyLoad.po
index 90bf0609d..3f1e8e5c8 100644
--- a/locale/vi/LC_MESSAGES/pyLoad.po
+++ b/locale/vi/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr ""
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr ""
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr ""
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr ""
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr ""
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr ""
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr ""
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr ""
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr ""
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr ""
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr ""
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr ""
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr ""
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr ""
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr ""
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr ""
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr ""
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr ""
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr ""
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr ""
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr ""
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr ""
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr ""
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr ""
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr ""
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr ""
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr ""
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr ""
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr ""
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr ""
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr ""
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr ""
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "khÃŽng giới hạn"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr ""
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr ""
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr ""
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr ""
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr ""
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr ""
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr ""
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr ""
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr ""
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr ""
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr ""
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr ""
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr ""
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr ""
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr ""
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr ""
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr ""
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr ""
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr ""
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr ""
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr ""
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr ""
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr ""
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr ""
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr ""
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr ""
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr ""
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr ""
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr ""
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr ""
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr ""
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr ""
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr ""
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr ""
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr ""
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr ""
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr ""
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr ""
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr ""
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr ""
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr ""
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr ""
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr ""
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr ""
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr ""
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr ""
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/vi/LC_MESSAGES/pyLoadCli.po b/locale/vi/LC_MESSAGES/pyLoadCli.po
index 0f79cabe8..a35b37295 100644
--- a/locale/vi/LC_MESSAGES/pyLoadCli.po
+++ b/locale/vi/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "Giao diện Dòng lệnh"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "%s Tải xuống:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "Tốc độ:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "Kích thước:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "Kết thúc trong:"
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "ID:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "chờ:"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr ""
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr ""
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr ""
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr ""
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr ""
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "Danh Mục:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "Thêm liên kết"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr ""
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr ""
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "(Un)Tạm dừng máy chủ"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "Dừng máy chủ"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "Thoát"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr ""
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "Đang kiểm tra %d liên kết:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "Tập tin khÃŽng tồn tại."
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr ""
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "in trạng thái máy chủ"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "in hàng đợi tải xuống"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr ""
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr ""
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr ""
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr ""
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr ""
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "Khởi động lại các tập tin."
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr ""
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr ""
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr ""
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "tạm dừng máy chủ"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "tiếp tục tải xuống"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "chuyển giữa tạm dừng/tiếp tục"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "dừng máy chủ"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr ""
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr ""
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr ""
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "địa chỉ:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "Cổng:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "Tên người dùng:"
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "Mật khẩu:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr ""
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr ""
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr ""
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr ""
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr ""
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr ""
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "Gói: %s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "Phân tích liên kết bạn muốn thêm."
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "Nhập %s khi xong."
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "Liên kết đã thêm:"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "quay lại menu chính"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr ""
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "Quản lÜ liên kết"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr ""
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr ""
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr ""
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr ""
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr "- quay lại"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "- kế tiếp"
diff --git a/locale/vi/LC_MESSAGES/setup.po b/locale/vi/LC_MESSAGES/setup.po
index a063269c2..c02da4262 100644
--- a/locale/vi/LC_MESSAGES/setup.po
+++ b/locale/vi/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr ""
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr ""
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr ""
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr ""
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr ""
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr ""
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr ""
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr ""
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr ""
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr ""
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr ""
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr ""
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr ""
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr ""
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr ""
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr ""
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr ""
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr ""
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr ""
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr ""
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr ""
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr ""
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr ""
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr ""
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr ""
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr ""
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr ""
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr ""
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr ""
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr ""
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "Tên người dùng"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "NgÎn ngữ"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr ""
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr ""
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr ""
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr ""
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr ""
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr ""
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "Địa chỉ"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "Cổng"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr ""
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr ""
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr ""
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr ""
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr ""
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "Máy chủ"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr ""
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr ""
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr ""
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr ""
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr ""
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr ""
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr ""
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr ""
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr ""
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr ""
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr ""
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr ""
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "Mật khẩu:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr ""
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr ""
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr ""
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr ""
diff --git a/locale/zh/LC_MESSAGES/django.po b/locale/zh/LC_MESSAGES/django.po
index d34a347af..192ea08f1 100644
--- a/locale/zh/LC_MESSAGES/django.po
+++ b/locale/zh/LC_MESSAGES/django.po
@@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/webui/translations.js:1
+#: pyload/webui/translations.js:1
msgid "New Captcha Request"
msgstr "新验证请求"
-#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7
+#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7
msgid "Please read the text on the captcha."
msgstr "请读取验证码䞊的文本."
-#: module/webui/translations.js:3
+#: pyload/webui/translations.js:3
msgid "pyLoad restarted"
msgstr "pyLoad已经重启"
-#: module/webui/translations.js:4
-#: module/webui/themes/default/tml/settings_item.html:16
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:4
+#: pyload/webui/themes/default/tml/settings_item.html:16
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "off"
msgstr "關"
-#: module/webui/translations.js:5
+#: pyload/webui/translations.js:5
msgid "Success"
msgstr "成功"
-#: module/webui/translations.js:6
-#: module/webui/themes/default/tml/settings_item.html:14
-#: module/webui/themes/default/tml/base.html:123
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/translations.js:6
+#: pyload/webui/themes/default/tml/settings_item.html:14
+#: pyload/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:124
msgid "on"
msgstr "開"
-#: module/webui/translations.js:7
+#: pyload/webui/translations.js:7
msgid "You are really sure you want to quit pyLoad?"
msgstr "确讀芁退出pyLoad吗"
-#: module/webui/translations.js:8
+#: pyload/webui/translations.js:8
msgid "Restart Link"
msgstr "铟接重新匀始"
-#: module/webui/translations.js:9
+#: pyload/webui/translations.js:9
msgid "Delete Link"
msgstr "删陀铟接"
-#: module/webui/translations.js:10
+#: pyload/webui/translations.js:10
msgid "Please Enter a packagename."
msgstr "请蟓入䞋蜜包名字"
-#: module/webui/translations.js:11
+#: pyload/webui/translations.js:11
msgid "Please click on the right captcha position."
msgstr "请点击正确的验证码䜍眮"
-#: module/webui/translations.js:12
+#: pyload/webui/translations.js:12
msgid "Error occured."
msgstr "错误发生了"
-#: module/webui/translations.js:13
-#: module/webui/themes/default/tml/filemanager.html:65
-#: module/webui/themes/default/tml/folder.html:14
+#: pyload/webui/translations.js:13
+#: pyload/webui/themes/default/tml/filemanager.html:65
+#: pyload/webui/themes/default/tml/folder.html:14
msgid "Folder is empty"
msgstr "文件倹䞺空"
-#: module/webui/translations.js:14
+#: pyload/webui/translations.js:14
msgid "Failed"
msgstr "倱敗"
-#: module/webui/translations.js:15
+#: pyload/webui/translations.js:15
msgid "No Captchas to read."
msgstr "没有获取验证码"
-#: module/webui/translations.js:16
+#: pyload/webui/translations.js:16
msgid "Passwords did not match."
msgstr "密码䞍笊"
-#: module/webui/translations.js:17
+#: pyload/webui/translations.js:17
msgid "Settings saved."
msgstr "讟眮已保存"
-#: module/webui/translations.js:18
+#: pyload/webui/translations.js:18
msgid "New folder"
msgstr "新文件倹"
-#: module/webui/translations.js:19
+#: pyload/webui/translations.js:19
msgid "Are you sure you want to restart pyLoad?"
msgstr "确定重启pyLoad吗"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/webui/themes/default/tml/home.html:206
+#: pyload/webui/themes/default/tml/home.html:206
msgid "Active Downloads"
msgstr "掻劚䞋蜜"
-#: module/webui/themes/default/tml/home.html:211
-#: module/webui/themes/default/tml/base.html:84
+#: pyload/webui/themes/default/tml/home.html:211
+#: pyload/webui/themes/default/tml/base.html:84
msgid "Home"
msgstr "銖页"
-#: module/webui/themes/default/tml/home.html:214
-#: module/webui/themes/default/tml/queue.html:15
-#: module/webui/themes/default/tml/window.html:34
-#: module/webui/themes/default/tml/base.html:87
+#: pyload/webui/themes/default/tml/home.html:214
+#: pyload/webui/themes/default/tml/queue.html:15
+#: pyload/webui/themes/default/tml/window.html:34
+#: pyload/webui/themes/default/tml/base.html:87
msgid "Queue"
msgstr ""
-#: module/webui/themes/default/tml/home.html:217
-#: module/webui/themes/default/tml/queue.html:17
-#: module/webui/themes/default/tml/window.html:36
-#: module/webui/themes/default/tml/base.html:90
+#: pyload/webui/themes/default/tml/home.html:217
+#: pyload/webui/themes/default/tml/queue.html:17
+#: pyload/webui/themes/default/tml/window.html:36
+#: pyload/webui/themes/default/tml/base.html:90
msgid "Collector"
msgstr ""
-#: module/webui/themes/default/tml/home.html:220
-#: module/webui/themes/default/tml/downloads.html:6
-#: module/webui/themes/default/tml/base.html:93
+#: pyload/webui/themes/default/tml/home.html:220
+#: pyload/webui/themes/default/tml/downloads.html:6
+#: pyload/webui/themes/default/tml/base.html:93
msgid "Downloads"
msgstr "已䞋蜜"
-#: module/webui/themes/default/tml/home.html:226
-#: module/webui/themes/default/tml/logs.html:3
-#: module/webui/themes/default/tml/logs.html:4
-#: module/webui/themes/default/tml/base.html:99
+#: pyload/webui/themes/default/tml/home.html:226
+#: pyload/webui/themes/default/tml/logs.html:3
+#: pyload/webui/themes/default/tml/logs.html:4
+#: pyload/webui/themes/default/tml/base.html:99
msgid "Logs"
msgstr "日志"
-#: module/webui/themes/default/tml/home.html:229
-#: module/webui/themes/default/tml/settings.html:3
-#: module/webui/themes/default/tml/settings.html:4
-#: module/webui/themes/default/tml/base.html:102
+#: pyload/webui/themes/default/tml/home.html:229
+#: pyload/webui/themes/default/tml/settings.html:3
+#: pyload/webui/themes/default/tml/settings.html:4
+#: pyload/webui/themes/default/tml/base.html:102
msgid "Config"
msgstr "配眮"
-#: module/webui/themes/default/tml/home.html:237
-#: module/webui/themes/default/tml/queue.html:82
-#: module/webui/themes/default/tml/settings.html:91
-#: module/webui/themes/default/tml/window.html:7
-#: module/webui/themes/default/tml/admin.html:25
+#: pyload/webui/themes/default/tml/home.html:237
+#: pyload/webui/themes/default/tml/queue.html:82
+#: pyload/webui/themes/default/tml/settings.html:91
+#: pyload/webui/themes/default/tml/window.html:7
+#: pyload/webui/themes/default/tml/admin.html:25
msgid "Name"
msgstr "名皱"
-#: module/webui/themes/default/tml/home.html:238
-#: module/webui/themes/default/tml/settings.html:93
+#: pyload/webui/themes/default/tml/home.html:238
+#: pyload/webui/themes/default/tml/settings.html:93
msgid "Status"
msgstr "狀態"
-#: module/webui/themes/default/tml/home.html:239
-#: module/webui/themes/default/tml/info.html:14
-#: module/webui/themes/default/tml/info.html:15
+#: pyload/webui/themes/default/tml/home.html:239
+#: pyload/webui/themes/default/tml/info.html:14
+#: pyload/webui/themes/default/tml/info.html:15
msgid "Information"
msgstr "信息"
-#: module/webui/themes/default/tml/home.html:240
+#: pyload/webui/themes/default/tml/home.html:240
msgid "Size"
msgstr "倧小"
-#: module/webui/themes/default/tml/home.html:241
+#: pyload/webui/themes/default/tml/home.html:241
msgid "Progress"
msgstr "进床"
-#: module/webui/themes/default/tml/login.html:3
-#: module/webui/themes/default/tml/settings.html:178
+#: pyload/webui/themes/default/tml/login.html:3
+#: pyload/webui/themes/default/tml/settings.html:178
msgid "Login"
msgstr "登入"
-#: module/webui/themes/default/tml/login.html:14
+#: pyload/webui/themes/default/tml/login.html:14
msgid "Username"
msgstr "䜿甚者名皱"
-#: module/webui/themes/default/tml/login.html:19
-#: module/webui/themes/default/tml/queue.html:92
-#: module/webui/themes/default/tml/settings.html:92
-#: module/webui/themes/default/tml/settings.html:183
-#: module/webui/themes/default/tml/window.html:21
+#: pyload/webui/themes/default/tml/login.html:19
+#: pyload/webui/themes/default/tml/queue.html:92
+#: pyload/webui/themes/default/tml/settings.html:92
+#: pyload/webui/themes/default/tml/settings.html:183
+#: pyload/webui/themes/default/tml/window.html:21
msgid "Password"
msgstr "密碌"
-#: module/webui/themes/default/tml/login.html:29
+#: pyload/webui/themes/default/tml/login.html:29
msgid "Your username and password didn't match. Please try again."
msgstr "悚的甚户名和密码䞍匹配, 请再试䞀次."
-#: module/webui/themes/default/tml/login.html:30
+#: pyload/webui/themes/default/tml/login.html:30
msgid "To reset your login data or add an user run:"
msgstr "芁重眮悚的登圕数据或添加䞀䞪甚户, 请运行:"
-#: module/webui/themes/default/tml/queue.html:25
+#: pyload/webui/themes/default/tml/queue.html:25
msgid "Delete Finished"
msgstr "删陀完成"
-#: module/webui/themes/default/tml/queue.html:26
+#: pyload/webui/themes/default/tml/queue.html:26
msgid "Restart Failed"
msgstr "重启出错"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Folder:"
msgstr "文件倹:"
-#: module/webui/themes/default/tml/queue.html:65
+#: pyload/webui/themes/default/tml/queue.html:65
msgid "Password:"
msgstr "密码:"
-#: module/webui/themes/default/tml/queue.html:79
+#: pyload/webui/themes/default/tml/queue.html:79
msgid "Edit Package"
msgstr "猖蟑䞋蜜"
-#: module/webui/themes/default/tml/queue.html:80
+#: pyload/webui/themes/default/tml/queue.html:80
msgid "Edit the package detais below."
msgstr "修改文件包诊细泚释信息."
-#: module/webui/themes/default/tml/queue.html:83
+#: pyload/webui/themes/default/tml/queue.html:83
msgid "The name of the package."
msgstr "文件名."
-#: module/webui/themes/default/tml/queue.html:87
+#: pyload/webui/themes/default/tml/queue.html:87
msgid "Folder"
msgstr "目錄"
-#: module/webui/themes/default/tml/queue.html:88
+#: pyload/webui/themes/default/tml/queue.html:88
msgid "Name of subfolder for these downloads."
msgstr "歀䞋蜜的子目圕名."
-#: module/webui/themes/default/tml/queue.html:93
+#: pyload/webui/themes/default/tml/queue.html:93
msgid "List of passwords used for unrar."
msgstr "UNRAR解压猩密码列衚."
-#: module/webui/themes/default/tml/queue.html:97
-#: module/webui/themes/default/tml/settings.html:167
-#: module/webui/themes/default/tml/captcha.html:33
-#: module/webui/themes/default/tml/admin.html:61
-#: module/webui/themes/default/tml/admin.html:91
+#: pyload/webui/themes/default/tml/queue.html:97
+#: pyload/webui/themes/default/tml/settings.html:167
+#: pyload/webui/themes/default/tml/captcha.html:33
+#: pyload/webui/themes/default/tml/admin.html:61
+#: pyload/webui/themes/default/tml/admin.html:91
msgid "Submit"
msgstr "同意"
-#: module/webui/themes/default/tml/queue.html:98
-#: module/webui/themes/default/tml/settings.html:198
-#: module/webui/themes/default/tml/window.html:41
-#: module/webui/themes/default/tml/admin.html:92
+#: pyload/webui/themes/default/tml/queue.html:98
+#: pyload/webui/themes/default/tml/settings.html:198
+#: pyload/webui/themes/default/tml/window.html:41
+#: pyload/webui/themes/default/tml/admin.html:92
msgid "Reset"
msgstr "重眮"
-#: module/webui/themes/default/tml/logout.html:8
+#: pyload/webui/themes/default/tml/logout.html:8
msgid "You were successfully logged out."
msgstr "悚已成功泚销."
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "Path"
msgstr "路埄"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "absolute"
msgstr "绝对"
-#: module/webui/themes/default/tml/pathchooser.html:39
-#: module/webui/themes/default/tml/pathchooser.html:41
+#: pyload/webui/themes/default/tml/pathchooser.html:39
+#: pyload/webui/themes/default/tml/pathchooser.html:41
msgid "relative"
msgstr "盞对"
-#: module/webui/themes/default/tml/pathchooser.html:46
+#: pyload/webui/themes/default/tml/pathchooser.html:46
msgid "name"
msgstr "名称"
-#: module/webui/themes/default/tml/pathchooser.html:47
+#: pyload/webui/themes/default/tml/pathchooser.html:47
msgid "size"
msgstr "倧小"
-#: module/webui/themes/default/tml/pathchooser.html:48
+#: pyload/webui/themes/default/tml/pathchooser.html:48
msgid "type"
msgstr "类型"
-#: module/webui/themes/default/tml/pathchooser.html:49
+#: pyload/webui/themes/default/tml/pathchooser.html:49
msgid "last modified"
msgstr "最后修改"
-#: module/webui/themes/default/tml/pathchooser.html:54
+#: pyload/webui/themes/default/tml/pathchooser.html:54
msgid "parent directory"
msgstr "父目圕"
-#: module/webui/themes/default/tml/pathchooser.html:70
+#: pyload/webui/themes/default/tml/pathchooser.html:70
msgid "no content"
msgstr "没有内容"
-#: module/webui/themes/default/tml/settings.html:16
+#: pyload/webui/themes/default/tml/settings.html:16
msgid "General"
msgstr "䞀般蚭定"
-#: module/webui/themes/default/tml/settings.html:17
+#: pyload/webui/themes/default/tml/settings.html:17
msgid "Plugins"
msgstr "插件"
-#: module/webui/themes/default/tml/settings.html:18
+#: pyload/webui/themes/default/tml/settings.html:18
msgid "Accounts"
msgstr "垳戶"
-#: module/webui/themes/default/tml/settings.html:45
-#: module/webui/themes/default/tml/settings.html:74
+#: pyload/webui/themes/default/tml/settings.html:45
+#: pyload/webui/themes/default/tml/settings.html:74
msgid "Choose a section from the menu"
msgstr "从菜单䞭选择䞀项目"
-#: module/webui/themes/default/tml/settings.html:90
+#: pyload/webui/themes/default/tml/settings.html:90
msgid "Plugin"
msgstr "倖掛"
-#: module/webui/themes/default/tml/settings.html:94
+#: pyload/webui/themes/default/tml/settings.html:94
msgid "Premium"
msgstr "高级垐号"
-#: module/webui/themes/default/tml/settings.html:95
+#: pyload/webui/themes/default/tml/settings.html:95
msgid "Valid until"
msgstr "有效期至"
-#: module/webui/themes/default/tml/settings.html:96
+#: pyload/webui/themes/default/tml/settings.html:96
msgid "Traffic left"
msgstr "剩䜙流量"
-#: module/webui/themes/default/tml/settings.html:97
+#: pyload/webui/themes/default/tml/settings.html:97
msgid "Time"
msgstr "æ—¶é—Ž"
-#: module/webui/themes/default/tml/settings.html:98
+#: pyload/webui/themes/default/tml/settings.html:98
msgid "Max Parallel"
msgstr "最倧连接数"
-#: module/webui/themes/default/tml/settings.html:99
+#: pyload/webui/themes/default/tml/settings.html:99
msgid "Delete?"
msgstr "确讀删陀?"
-#: module/webui/themes/default/tml/settings.html:121
+#: pyload/webui/themes/default/tml/settings.html:121
msgid "valid"
msgstr "有效的"
-#: module/webui/themes/default/tml/settings.html:124
+#: pyload/webui/themes/default/tml/settings.html:124
msgid "not valid"
msgstr "无效"
-#: module/webui/themes/default/tml/settings.html:131
+#: pyload/webui/themes/default/tml/settings.html:131
msgid "yes"
msgstr "是"
-#: module/webui/themes/default/tml/settings.html:134
+#: pyload/webui/themes/default/tml/settings.html:134
msgid "no"
msgstr "吊"
-#: module/webui/themes/default/tml/settings.html:168
-#: module/webui/themes/default/tml/settings.html:197
-#: module/webui/themes/default/tml/base.html:117
+#: pyload/webui/themes/default/tml/settings.html:168
+#: pyload/webui/themes/default/tml/settings.html:197
+#: pyload/webui/themes/default/tml/base.html:117
msgid "Add"
msgstr "增加"
-#: module/webui/themes/default/tml/settings.html:176
+#: pyload/webui/themes/default/tml/settings.html:176
msgid "Add Account"
msgstr "新增垳號"
-#: module/webui/themes/default/tml/settings.html:177
+#: pyload/webui/themes/default/tml/settings.html:177
msgid "Enter your account data to use premium features."
msgstr "蟓入悚的垐户资料来䜿甚高级功胜."
-#: module/webui/themes/default/tml/settings.html:179
-#: module/webui/themes/default/tml/admin.html:71
+#: pyload/webui/themes/default/tml/settings.html:179
+#: pyload/webui/themes/default/tml/admin.html:71
msgid "Your username."
msgstr "悚的甚户名."
-#: module/webui/themes/default/tml/settings.html:184
-#: module/webui/themes/default/tml/admin.html:76
+#: pyload/webui/themes/default/tml/settings.html:184
+#: pyload/webui/themes/default/tml/admin.html:76
msgid "The password for this account."
msgstr "圓前密码仅䞺歀垐号所甚."
-#: module/webui/themes/default/tml/settings.html:188
+#: pyload/webui/themes/default/tml/settings.html:188
msgid "Type"
msgstr "皮類"
-#: module/webui/themes/default/tml/settings.html:189
+#: pyload/webui/themes/default/tml/settings.html:189
msgid "Choose the hoster for your account."
msgstr "请选择悚垐号对应的眑盘类型."
-#: module/webui/themes/default/tml/logs.html:12
-#: module/webui/themes/default/tml/base.html:114
+#: pyload/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/base.html:114
msgid "Start"
msgstr "启劚"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "prev"
msgstr "䞊䞀页"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "next"
msgstr "䞋䞀页"
-#: module/webui/themes/default/tml/logs.html:12
+#: pyload/webui/themes/default/tml/logs.html:12
msgid "End"
msgstr "完成"
-#: module/webui/themes/default/tml/info.html:18
+#: pyload/webui/themes/default/tml/info.html:18
msgid "News"
msgstr "新闻"
-#: module/webui/themes/default/tml/info.html:21
+#: pyload/webui/themes/default/tml/info.html:21
msgid "Support"
msgstr "技术支持"
-#: module/webui/themes/default/tml/info.html:37
+#: pyload/webui/themes/default/tml/info.html:37
msgid "System"
msgstr "系統"
-#: module/webui/themes/default/tml/info.html:40
+#: pyload/webui/themes/default/tml/info.html:40
msgid "Python:"
msgstr ""
-#: module/webui/themes/default/tml/info.html:44
+#: pyload/webui/themes/default/tml/info.html:44
msgid "OS:"
msgstr "操䜜系统:"
-#: module/webui/themes/default/tml/info.html:48
+#: pyload/webui/themes/default/tml/info.html:48
msgid "pyLoad version:"
msgstr "pyLoad 版本:"
-#: module/webui/themes/default/tml/info.html:52
+#: pyload/webui/themes/default/tml/info.html:52
msgid "Installation Folder:"
msgstr "安装文件倹:"
-#: module/webui/themes/default/tml/info.html:56
+#: pyload/webui/themes/default/tml/info.html:56
msgid "Config Folder:"
msgstr "配眮文件倹:"
-#: module/webui/themes/default/tml/info.html:60
+#: pyload/webui/themes/default/tml/info.html:60
msgid "Download Folder:"
msgstr "䞋蜜文件倹:"
-#: module/webui/themes/default/tml/info.html:64
+#: pyload/webui/themes/default/tml/info.html:64
msgid "Free Space:"
msgstr "空闲空闎:"
-#: module/webui/themes/default/tml/info.html:68
+#: pyload/webui/themes/default/tml/info.html:68
msgid "Language:"
msgstr "语蚀:"
-#: module/webui/themes/default/tml/info.html:72
+#: pyload/webui/themes/default/tml/info.html:72
msgid "Webinterface Port:"
msgstr "Web界面端口:"
-#: module/webui/themes/default/tml/info.html:76
+#: pyload/webui/themes/default/tml/info.html:76
msgid "Remote Interface Port:"
msgstr "远皋接口端口:"
-#: module/webui/themes/default/tml/setup.html:3
-#: module/webui/themes/default/tml/setup.html:4
+#: pyload/webui/themes/default/tml/setup.html:3
+#: pyload/webui/themes/default/tml/setup.html:4
msgid "Setup"
msgstr "蚭定"
-#: module/webui/themes/default/tml/filemanager.html:19
+#: pyload/webui/themes/default/tml/filemanager.html:19
msgid "FileManager"
msgstr "文件管理噚"
-#: module/webui/themes/default/tml/window.html:5
-#: module/webui/themes/default/tml/window.html:40
+#: pyload/webui/themes/default/tml/window.html:5
+#: pyload/webui/themes/default/tml/window.html:40
msgid "Add Package"
msgstr "添加䞋蜜"
-#: module/webui/themes/default/tml/window.html:6
+#: pyload/webui/themes/default/tml/window.html:6
msgid "Paste your links or upload a container."
msgstr "粘莎铟接或者䞊䌠䞀容噚."
-#: module/webui/themes/default/tml/window.html:8
+#: pyload/webui/themes/default/tml/window.html:8
msgid "The name of the new package."
msgstr "新建䞋蜜的名字."
-#: module/webui/themes/default/tml/window.html:12
+#: pyload/webui/themes/default/tml/window.html:12
msgid "Links"
msgstr "铟接"
-#: module/webui/themes/default/tml/window.html:13
+#: pyload/webui/themes/default/tml/window.html:13
msgid "Paste your links here or any text and press the filter button."
msgstr "圚这里粘莎悚的铟接或任䜕文本内容, 然后按\"过滀\"按钮."
-#: module/webui/themes/default/tml/window.html:14
+#: pyload/webui/themes/default/tml/window.html:14
msgid "Filter urls"
msgstr "过滀"
-#: module/webui/themes/default/tml/window.html:22
+#: pyload/webui/themes/default/tml/window.html:22
msgid "Password for RAR-Archive"
msgstr "RAR压猩包密码"
-#: module/webui/themes/default/tml/window.html:26
+#: pyload/webui/themes/default/tml/window.html:26
msgid "File"
msgstr "文件"
-#: module/webui/themes/default/tml/window.html:27
+#: pyload/webui/themes/default/tml/window.html:27
msgid "Upload a container."
msgstr "䞊䌠䞀容噚."
-#: module/webui/themes/default/tml/window.html:31
+#: pyload/webui/themes/default/tml/window.html:31
msgid "Destination"
msgstr "目的地"
-#: module/webui/themes/default/tml/captcha.html:6
+#: pyload/webui/themes/default/tml/captcha.html:6
msgid "Captcha reading"
msgstr "验证码读取䞭..."
-#: module/webui/themes/default/tml/captcha.html:13
+#: pyload/webui/themes/default/tml/captcha.html:13
msgid "Captcha"
msgstr "验证码"
-#: module/webui/themes/default/tml/captcha.html:14
+#: pyload/webui/themes/default/tml/captcha.html:14
msgid "The captcha."
msgstr "验证码."
-#: module/webui/themes/default/tml/captcha.html:20
+#: pyload/webui/themes/default/tml/captcha.html:20
msgid "Text"
msgstr "文本"
-#: module/webui/themes/default/tml/captcha.html:21
+#: pyload/webui/themes/default/tml/captcha.html:21
msgid "Input the text on the captcha."
msgstr "蟓入验证码䞊的文本."
-#: module/webui/themes/default/tml/captcha.html:34
+#: pyload/webui/themes/default/tml/captcha.html:34
msgid "Close"
msgstr "關閉"
-#: module/webui/themes/default/tml/base.html:20
-#: module/webui/themes/default/tml/base.html:139
+#: pyload/webui/themes/default/tml/base.html:20
+#: pyload/webui/themes/default/tml/base.html:139
msgid "Webinterface"
msgstr "Web界面"
-#: module/webui/themes/default/tml/base.html:39
+#: pyload/webui/themes/default/tml/base.html:39
msgid "pyLoad Update available!"
msgstr "pyLoad 曎新可甚!"
-#: module/webui/themes/default/tml/base.html:46
+#: pyload/webui/themes/default/tml/base.html:46
msgid "Plugins updated, please restart!"
msgstr "插件已曎新, 请重新启劚皋序!"
-#: module/webui/themes/default/tml/base.html:52
+#: pyload/webui/themes/default/tml/base.html:52
msgid "Captcha waiting"
msgstr "验证码等埅䞭"
-#: module/webui/themes/default/tml/base.html:57
+#: pyload/webui/themes/default/tml/base.html:57
msgid "Logout"
msgstr "泚销"
-#: module/webui/themes/default/tml/base.html:59
-#: module/webui/themes/default/tml/admin.html:8
-#: module/webui/themes/default/tml/admin.html:9
+#: pyload/webui/themes/default/tml/base.html:59
+#: pyload/webui/themes/default/tml/admin.html:8
+#: pyload/webui/themes/default/tml/admin.html:9
msgid "Administrate"
msgstr "管理"
-#: module/webui/themes/default/tml/base.html:61
+#: pyload/webui/themes/default/tml/base.html:61
msgid "Info"
msgstr "信息"
-#: module/webui/themes/default/tml/base.html:65
+#: pyload/webui/themes/default/tml/base.html:65
msgid "Please Login!"
msgstr "请登圕!"
-#: module/webui/themes/default/tml/base.html:115
+#: pyload/webui/themes/default/tml/base.html:115
msgid "Stop"
msgstr "停止"
-#: module/webui/themes/default/tml/base.html:116
+#: pyload/webui/themes/default/tml/base.html:116
msgid "Cancel"
msgstr "取消"
-#: module/webui/themes/default/tml/base.html:123
+#: pyload/webui/themes/default/tml/base.html:123
msgid "Download:"
msgstr "䞋蜜:"
-#: module/webui/themes/default/tml/base.html:124
+#: pyload/webui/themes/default/tml/base.html:124
msgid "Reconnect:"
msgstr "重新连接:"
-#: module/webui/themes/default/tml/base.html:125
+#: pyload/webui/themes/default/tml/base.html:125
msgid "Speed:"
msgstr "速床:"
-#: module/webui/themes/default/tml/base.html:126
+#: pyload/webui/themes/default/tml/base.html:126
msgid "Active:"
msgstr "掻劚:"
-#: module/webui/themes/default/tml/base.html:127
+#: pyload/webui/themes/default/tml/base.html:127
msgid "Reload page"
msgstr "刷新页面"
-#: module/webui/themes/default/tml/base.html:157
+#: pyload/webui/themes/default/tml/base.html:157
msgid "loading"
msgstr "加蜜䞭"
-#: module/webui/themes/default/tml/base.html:166
+#: pyload/webui/themes/default/tml/base.html:166
msgid "Back to top"
msgstr "返回顶郚"
-#: module/webui/themes/default/tml/admin.html:13
+#: pyload/webui/themes/default/tml/admin.html:13
msgid "Quit pyLoad"
msgstr "退出pyLoad"
-#: module/webui/themes/default/tml/admin.html:14
+#: pyload/webui/themes/default/tml/admin.html:14
msgid "Restart pyLoad"
msgstr "重启pyLoad"
-#: module/webui/themes/default/tml/admin.html:18
+#: pyload/webui/themes/default/tml/admin.html:18
msgid "To add user or change passwords use:"
msgstr "添加甚户或曎改密码请䜿甚:"
-#: module/webui/themes/default/tml/admin.html:19
+#: pyload/webui/themes/default/tml/admin.html:19
msgid "Important: Admin user have always all permissions!"
msgstr "重芁提瀺管理员莊户具有所有操䜜权限"
-#: module/webui/themes/default/tml/admin.html:28
-#: module/webui/themes/default/tml/admin.html:67
+#: pyload/webui/themes/default/tml/admin.html:28
+#: pyload/webui/themes/default/tml/admin.html:67
msgid "Change Password"
msgstr "曎改密码"
-#: module/webui/themes/default/tml/admin.html:31
+#: pyload/webui/themes/default/tml/admin.html:31
msgid "Admin"
msgstr ""
-#: module/webui/themes/default/tml/admin.html:34
+#: pyload/webui/themes/default/tml/admin.html:34
msgid "Permissions"
msgstr "讞可"
-#: module/webui/themes/default/tml/admin.html:41
+#: pyload/webui/themes/default/tml/admin.html:41
msgid "change"
msgstr "曎改"
-#: module/webui/themes/default/tml/admin.html:69
+#: pyload/webui/themes/default/tml/admin.html:69
msgid "Enter your current and desired Password."
msgstr "请蟓入悚圓前以及需芁修改的密码."
-#: module/webui/themes/default/tml/admin.html:70
+#: pyload/webui/themes/default/tml/admin.html:70
msgid "User"
msgstr "甚户"
-#: module/webui/themes/default/tml/admin.html:75
+#: pyload/webui/themes/default/tml/admin.html:75
msgid "Current password"
msgstr "圓前密码"
-#: module/webui/themes/default/tml/admin.html:80
+#: pyload/webui/themes/default/tml/admin.html:80
msgid "New password"
msgstr "新密码"
-#: module/webui/themes/default/tml/admin.html:81
+#: pyload/webui/themes/default/tml/admin.html:81
msgid "The new password."
msgstr "新的密码."
-#: module/webui/themes/default/tml/admin.html:85
+#: pyload/webui/themes/default/tml/admin.html:85
msgid "New password (repeat)"
msgstr "新密码 (重倍)"
-#: module/webui/themes/default/tml/admin.html:86
+#: pyload/webui/themes/default/tml/admin.html:86
msgid "Please repeat the new password."
msgstr "请确讀悚的新密码."
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "無限制"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
diff --git a/locale/zh/LC_MESSAGES/pyLoad.po b/locale/zh/LC_MESSAGES/pyLoad.po
index 19a8a1487..c8d759aab 100644
--- a/locale/zh/LC_MESSAGES/pyLoad.po
+++ b/locale/zh/LC_MESSAGES/pyLoad.po
@@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/Core.py:182
+#: pyload/Core.py:182
msgid "Received Quit signal"
msgstr "收到退出蚊號"
-#: module/Core.py:303
+#: pyload/Core.py:303
#, python-format
msgid "pyLoad already running with pid %s"
msgstr "pyLoad已經圚執行pid %s"
-#: module/Core.py:317
+#: pyload/Core.py:317
#, python-format
msgid "Failed changing group: %s"
msgstr "無法改變矀組 %s"
-#: module/Core.py:327
+#: pyload/Core.py:327
#, python-format
msgid "Failed changing user: %s"
msgstr "無法改變䜿甚者 %s"
-#: module/Core.py:329
+#: pyload/Core.py:329
msgid "folder for logs"
msgstr "LOG文件倹"
-#: module/Core.py:340
+#: pyload/Core.py:340
msgid "Starting"
msgstr "開始"
-#: module/Core.py:341
+#: pyload/Core.py:341
#, python-format
msgid "Using home directory: %s"
msgstr "䜿甚家目錄 %s"
-#: module/Core.py:350
+#: pyload/Core.py:350
msgid "pycrypto to decode container files"
msgstr "䜿甚pycrypto解密文件"
-#: module/Core.py:353
+#: pyload/Core.py:353
msgid "folder for temporary files"
msgstr "䞎时文件倹"
-#: module/Core.py:358
+#: pyload/Core.py:358
msgid "folder for downloads"
msgstr "䞋蜜文件倹"
-#: module/Core.py:361
+#: pyload/Core.py:361
msgid "OpenSSL for secure connection"
msgstr "䜿甚OpenSSL安党登陆"
-#: module/Core.py:365
+#: pyload/Core.py:365
msgid "Moving old user config to DB"
msgstr "将旧甚户讟定移入数据库"
-#: module/Core.py:368
+#: pyload/Core.py:368
msgid "Please check your logindata with ./pyload.py -u"
msgstr "请执行./pyload.py -u 来确讀䜠的logindata"
-#: module/Core.py:371
+#: pyload/Core.py:371
msgid "All links removed"
msgstr "刪陀所有連結"
-#: module/Core.py:402
+#: pyload/Core.py:402
#, python-format
msgid "Downloadtime: %s"
msgstr "䞋蜜时闎%s"
-#: module/Core.py:412
+#: pyload/Core.py:412
#, python-format
msgid "Free space: %s"
msgstr "剩逘空間 %s"
-#: module/Core.py:432
+#: pyload/Core.py:432
msgid "Activating Accounts..."
msgstr "啟動垳戶..."
-#: module/Core.py:438
+#: pyload/Core.py:438
msgid "Activating Plugins..."
msgstr "激掻插件䞭..."
-#: module/Core.py:441
+#: pyload/Core.py:441
msgid "pyLoad is up and running"
msgstr "pyLoad已是最新的狀態"
-#: module/Core.py:460
+#: pyload/Core.py:460
msgid "restarting pyLoad"
msgstr "重新啟動pyLoad"
-#: module/Core.py:464
+#: pyload/Core.py:464
msgid "pyLoad quits"
msgstr "離開pyLoad"
-#: module/Core.py:521
+#: pyload/Core.py:521
#, python-format
msgid "Install %s"
msgstr "安装 %s"
-#: module/Core.py:557
+#: pyload/Core.py:557
#, python-format
msgid "could not find %(desc)s: %(name)s"
msgstr "无法扟到%(desc)s: %(name)s"
-#: module/Core.py:559
+#: pyload/Core.py:559
#, python-format
msgid "could not create %(desc)s: %(name)s"
msgstr "无法创建%(desc)s: %(name)s"
-#: module/Core.py:580
+#: pyload/Core.py:580
msgid "shutting down..."
msgstr "關閉..."
-#: module/Core.py:597
+#: pyload/Core.py:597
msgid "error while shutting down"
msgstr "關閉時出珟錯誀"
-#: module/Core.py:661
+#: pyload/Core.py:661
msgid "killed pyLoad from Terminal"
msgstr ""
-#: module/database/DatabaseBackend.py:174
+#: pyload/database/DatabaseBackend.py:174
msgid "Filedatabase was deleted due to incompatible version."
msgstr ""
-#: module/database/DatabaseBackend.py:189
+#: pyload/database/DatabaseBackend.py:189
msgid "Filedatabase could NOT be converted."
msgstr ""
-#: module/database/DatabaseBackend.py:198
+#: pyload/database/DatabaseBackend.py:198
msgid "Database was converted from v2 to v3."
msgstr ""
-#: module/database/DatabaseBackend.py:206
+#: pyload/database/DatabaseBackend.py:206
msgid "Database was converted from v3 to v4."
msgstr ""
-#: module/database/DatabaseBackend.py:252
+#: pyload/database/DatabaseBackend.py:252
msgid "Converting old Django DB"
msgstr ""
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "finished"
msgstr "已完成"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "offline"
msgstr "離線"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "online"
msgstr "線䞊"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "queued"
msgstr "䜇列"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "skipped"
msgstr "跳過"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "waiting"
msgstr "等埅䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "temp. offline"
msgstr "暫時離線"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "starting"
msgstr "開始"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "failed"
msgstr "倱敗"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "aborted"
msgstr "äž­æ­¢"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "decrypting"
msgstr "解析"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "custom"
msgstr "自蚂"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "downloading"
msgstr "䞋茉䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "processing"
msgstr "處理䞭"
-#: module/database/FileDatabase.py:45
+#: pyload/database/FileDatabase.py:45
msgid "unknown"
msgstr "未知"
-#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74
-#: module/plugins/hooks/XMPPInterface.py:83
+#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74
+#: pyload/plugins/hooks/XMPPInterface.py:83
#, python-format
msgid "Package finished: %s"
msgstr "套件已完成 %s"
-#: module/remote/ThriftBackend.py:39
+#: pyload/remote/ThriftBackend.py:39
msgid "Using SSL ThriftBackend"
msgstr ""
-#: module/remote/RemoteManager.py:35
+#: pyload/remote/RemoteManager.py:35
#, python-format
msgid "Remote backend error: %s"
msgstr "遠端錯誀 %s"
-#: module/remote/RemoteManager.py:82
+#: pyload/remote/RemoteManager.py:82
#, python-format
msgid "Starting %(name)s: %(addr)s:%(port)s"
msgstr "%(name)s %(addr)s:%(port)s 啟動䞭"
-#: module/remote/RemoteManager.py:84
+#: pyload/remote/RemoteManager.py:84
#, python-format
msgid "Failed loading backend %(name)s | %(error)s"
msgstr "無法茉入 %(name)s %(error)s"
-#: module/webui/app/json.py:57
+#: pyload/webui/app/json.py:57
#, python-format
msgid "waiting %s"
msgstr ""
-#: module/threads/ServerThread.py:35
+#: pyload/threads/ServerThread.py:35
msgid "SSL certificates not found."
msgstr "沒有扟到SSL憑證"
-#: module/threads/ServerThread.py:39
+#: pyload/threads/ServerThread.py:39
#, python-format
msgid "Sorry, we dropped support for starting %s directly within pyLoad"
msgstr ""
-#: module/threads/ServerThread.py:40
+#: pyload/threads/ServerThread.py:40
msgid "You can use the threaded server which offers good performance and ssl,"
msgstr ""
-#: module/threads/ServerThread.py:41
+#: pyload/threads/ServerThread.py:41
#, python-format
msgid "of course you can still use your existing %s with pyLoads fastcgi server"
msgstr ""
-#: module/threads/ServerThread.py:42
-msgid "sample configs are located in the module/webui/servers directory"
+#: pyload/threads/ServerThread.py:42
+msgid "sample configs are located in the pyload/webui/servers directory"
msgstr ""
-#: module/threads/ServerThread.py:49
+#: pyload/threads/ServerThread.py:49
#, python-format
msgid "Can't use %(server)s, python-flup is not installed!"
msgstr ""
-#: module/threads/ServerThread.py:56
+#: pyload/threads/ServerThread.py:56
#, python-format
msgid "Error importing lightweight server: %s"
msgstr ""
-#: module/threads/ServerThread.py:57
+#: pyload/threads/ServerThread.py:57
msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern"
msgstr ""
-#: module/threads/ServerThread.py:58
-msgid "Copy the boern.so to module/lib folder or use setup.py install"
+#: pyload/threads/ServerThread.py:58
+msgid "Copy the boern.so to pyload/lib folder or use setup.py install"
msgstr ""
-#: module/threads/ServerThread.py:59
+#: pyload/threads/ServerThread.py:59
msgid "Of course you need to be familiar with linux and know how to compile software"
msgstr ""
-#: module/threads/ServerThread.py:63
+#: pyload/threads/ServerThread.py:63
msgid "Server set to threaded, due to known performance problems on windows."
msgstr ""
-#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103
+#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103
msgid "This server offers no SSL, please consider using threaded instead"
msgstr "目前的服務噚䞍支揎SSL請將䌺服噚暡匏改為Threaded"
-#: module/threads/ServerThread.py:82
+#: pyload/threads/ServerThread.py:82
#, python-format
msgid "Starting builtin webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:87
+#: pyload/threads/ServerThread.py:87
#, python-format
msgid "Starting threaded SSL webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:91
+#: pyload/threads/ServerThread.py:91
#, python-format
msgid "Starting threaded webserver: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:97
+#: pyload/threads/ServerThread.py:97
#, python-format
msgid "Starting fastcgi server: %(host)s:%(port)d"
msgstr ""
-#: module/threads/ServerThread.py:105
+#: pyload/threads/ServerThread.py:105
#, python-format
msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d"
msgstr ""
-#: module/webui/app/pyload.py:125
+#: pyload/webui/app/pyload.py:125
msgid "You dont have permission to access this page."
msgstr ""
-#: module/webui/app/pyload.py:193
+#: pyload/webui/app/pyload.py:193
msgid "Download directory not found."
msgstr ""
-#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267
+#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267
msgid "unlimited"
msgstr "無限制"
-#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269
+#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269
msgid "not available"
msgstr ""
-#: module/webui/app/pyload.py:508
+#: pyload/webui/app/pyload.py:508
msgid "Run pyload.py -s to access the setup."
msgstr ""
-#: module/network/HTTPDownload.py:245
+#: pyload/network/HTTPDownload.py:245
#, python-format
msgid "Download chunks failed, fallback to single connection | %s"
msgstr "分區䞋茉倱敗採甚單䞀連接䞋茉%s"
-#: module/threads/PluginThread.py:183
+#: pyload/threads/PluginThread.py:183
#, python-format
msgid "Download starts: %s"
msgstr "開始䞋茉 %s"
-#: module/threads/PluginThread.py:189
+#: pyload/threads/PluginThread.py:189
#, python-format
msgid "Download finished: %s"
msgstr "%s 䞋茉完成"
-#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365
+#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365
#, python-format
msgid "Plugin %s is missing a function."
msgstr "%s 暡組猺少盞關功胜"
-#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265
-#: module/threads/PluginThread.py:382
+#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265
+#: pyload/threads/PluginThread.py:382
#, python-format
msgid "Download aborted: %s"
msgstr "取消䞋茉 %s"
-#: module/threads/PluginThread.py:222
+#: pyload/threads/PluginThread.py:222
#, python-format
msgid "Download restarted: %(name)s | %(msg)s"
msgstr "重新䞋茉%(name)s %(msg)s"
-#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373
+#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373
#, python-format
msgid "Download is offline: %s"
msgstr "䞋茉任務斷線%s"
-#: module/threads/PluginThread.py:234
+#: pyload/threads/PluginThread.py:234
#, python-format
msgid "Download is temporary offline: %s"
msgstr "䞋茉任務暫時斷線%s"
-#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304
+#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304
#, python-format
msgid "Download failed: %(name)s | %(msg)s"
msgstr "%(name)s 䞋茉倱敗%(msg)s"
-#: module/threads/PluginThread.py:254
+#: pyload/threads/PluginThread.py:254
msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry."
msgstr "無法連線至host䞀分鐘埌重詊"
-#: module/threads/PluginThread.py:290
+#: pyload/threads/PluginThread.py:290
#, python-format
msgid "Download skipped: %(name)s due to %(plugin)s"
msgstr "%(name)s 取消䞋茉由斌 %(plugin)s"
-#: module/threads/PluginThread.py:361
+#: pyload/threads/PluginThread.py:361
#, python-format
msgid "Decrypting starts: %s"
msgstr ""
-#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394
+#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394
#, python-format
msgid "Decrypting failed: %(name)s | %(msg)s"
msgstr ""
-#: module/threads/PluginThread.py:388
+#: pyload/threads/PluginThread.py:388
#, python-format
msgid "Retrying %s"
msgstr ""
-#: module/threads/PluginThread.py:635
+#: pyload/threads/PluginThread.py:635
#, python-format
msgid "Info Fetching for %(name)s failed | %(err)s"
msgstr "取埗 %(name)s的錯誀資蚊|%(err)s"
-#: module/HookManager.py:90 module/plugins/Hook.py:102
+#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102
#, python-format
msgid "Error executing hooks: %s"
msgstr ""
-#: module/HookManager.py:140
+#: pyload/HookManager.py:140
#, python-format
msgid "Failed activating %(name)s"
msgstr "啟甚 %(name)s 時癌生錯誀"
-#: module/HookManager.py:144
+#: pyload/HookManager.py:144
#, python-format
msgid "Activated plugins: %s"
msgstr ""
-#: module/HookManager.py:145
+#: pyload/HookManager.py:145
#, python-format
msgid "Deactivate plugins: %s"
msgstr ""
-#: module/ThreadManager.py:137
+#: pyload/ThreadManager.py:137
#, python-format
msgid "Reconnect Failed: %s"
msgstr "重新連接倱敗: %s"
-#: module/ThreadManager.py:176
+#: pyload/ThreadManager.py:176
msgid "Reconnect script not found!"
msgstr "重新連接腳本未扟到 "
-#: module/ThreadManager.py:182
+#: pyload/ThreadManager.py:182
msgid "Starting reconnect"
msgstr "開始重詊"
-#: module/ThreadManager.py:196
+#: pyload/ThreadManager.py:196
msgid "Failed executing reconnect script!"
msgstr "執行重詊腳本倱敗"
-#: module/ThreadManager.py:208
+#: pyload/ThreadManager.py:208
#, python-format
msgid "Reconnected, new IP: %s"
msgstr "䜿甚新IP: %s 重詊"
-#: module/ThreadManager.py:288
+#: pyload/ThreadManager.py:288
msgid "Not enough space left on device"
msgstr "儲存空間䞍足"
-#: module/plugins/Account.py:85 module/plugins/Account.py:91
+#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91
#, python-format
msgid "Could not login with account %(user)s | %(msg)s"
msgstr "無法登入%(user)s %(msg)s"
-#: module/plugins/Account.py:86
+#: pyload/plugins/Account.py:86
msgid "Wrong Password"
msgstr "密碌錯誀"
-#: module/plugins/Account.py:240
+#: pyload/plugins/Account.py:240
#, python-format
msgid "Your Time %s has wrong format, use: 1:22-3:44"
msgstr ""
-#: module/plugins/Account.py:266
+#: pyload/plugins/Account.py:266
#, python-format
msgid "Account %s has not enough traffic, checking again in 30min"
msgstr "垳戶 %s 流量甚鑿30分鐘埌重新檢查"
-#: module/plugins/Account.py:273
+#: pyload/plugins/Account.py:273
#, python-format
msgid "Account %s is expired, checking again in 1h"
msgstr "垳戶 %s 已過期䞀小時埌重詊"
-#: module/plugins/crypter/SerienjunkiesOrg.py:128
+#: pyload/plugins/crypter/SerienjunkiesOrg.py:128
msgid "Downloadlimit reached"
msgstr "已達到䞋茉流量䞊限"
-#: module/plugins/PluginManager.py:153
+#: pyload/plugins/PluginManager.py:153
#, python-format
msgid "%s has a invalid pattern."
msgstr ""
-#: module/plugins/PluginManager.py:272
+#: pyload/plugins/PluginManager.py:272
#, python-format
msgid "Error importing %(name)s: %(msg)s"
msgstr "癌珟錯誀 %(name)s: %(msg)s"
-#: module/plugins/internal/MultiHoster.py:133
+#: pyload/plugins/internal/MultiHoster.py:133
msgid "No Hoster loaded"
msgstr "扟䞍到任䜕Hoster"
-#: module/plugins/accounts/BitshareCom.py:37
+#: pyload/plugins/accounts/BitshareCom.py:37
msgid "Activate direct Download in your Bitshare Account"
msgstr "埞悚的Bitshare垳號䞭盎接䞋茉"
-#: module/plugins/container/LinkList.py:65
+#: pyload/plugins/container/LinkList.py:65
msgid "LinkList could not be cleared."
msgstr ""
-#: module/plugins/AccountManager.py:88
+#: pyload/plugins/AccountManager.py:88
msgid "Account settings deleted, due to new config format."
msgstr ""
-#: module/plugins/hoster/BasePlugin.py:65
+#: pyload/plugins/hoster/BasePlugin.py:65
msgid "Authorization required (username:password)"
msgstr "需芁認證垳號密碌"
-#: module/plugins/hoster/SimplydebridCom.py:25
-#: module/plugins/hoster/RealdebridCom.py:41
-#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22
-#: module/plugins/hoster/UnrestrictLi.py:53
-#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36
-#: module/plugins/hoster/AlldebridCom.py:38
-#: module/plugins/hoster/DebridItaliaCom.py:40
-#: module/plugins/hoster/RPNetBiz.py:26
-#: module/plugins/hoster/MultiDebridCom.py:41
-#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26
-#: module/plugins/hoster/PremiumizeMe.py:22
-#: module/plugins/hooks/RPNetBiz.py:43
+#: pyload/plugins/hoster/SimplydebridCom.py:25
+#: pyload/plugins/hoster/RealdebridCom.py:41
+#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22
+#: pyload/plugins/hoster/UnrestrictLi.py:53
+#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36
+#: pyload/plugins/hoster/AlldebridCom.py:38
+#: pyload/plugins/hoster/DebridItaliaCom.py:40
+#: pyload/plugins/hoster/RPNetBiz.py:26
+#: pyload/plugins/hoster/MultiDebridCom.py:41
+#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26
+#: pyload/plugins/hoster/PremiumizeMe.py:22
+#: pyload/plugins/hooks/RPNetBiz.py:43
#, python-format
msgid "Please enter your %s account or deactivate this plugin"
msgstr "請茞入䜠的垳戶或是停甚歀暡組"
-#: module/plugins/hoster/FilesMailRu.py:99
+#: pyload/plugins/hoster/FilesMailRu.py:99
#, python-format
msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted."
msgstr "䞋茉檔案䞭包含HTML語法解析錯誀嗎準備重詊"
-#: module/plugins/hoster/NetloadIn.py:146
-#: module/plugins/hoster/NetloadIn.py:170
+#: pyload/plugins/hoster/NetloadIn.py:146
+#: pyload/plugins/hoster/NetloadIn.py:170
msgid "File temporarily not available"
msgstr "檔案暫時無法䞋茉"
-#: module/plugins/hoster/NetloadIn.py:183
+#: pyload/plugins/hoster/NetloadIn.py:183
#, python-format
msgid "Netload: waiting between downloads %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:214
+#: pyload/plugins/hoster/NetloadIn.py:214
#, python-format
msgid "Netload: waiting for captcha %d s."
msgstr ""
-#: module/plugins/hoster/NetloadIn.py:252
+#: pyload/plugins/hoster/NetloadIn.py:252
msgid "Downloaded File was empty"
msgstr "䞋茉的檔案是空的"
-#: module/plugins/hoster/UploadedTo.py:129
+#: pyload/plugins/hoster/UploadedTo.py:129
msgid "API key invalid"
msgstr "API金鑰無效"
-#: module/plugins/hoster/UploadedTo.py:153
+#: pyload/plugins/hoster/UploadedTo.py:153
#, python-format
msgid "%s: Not enough traffic left"
msgstr "%s: 流量已甚完"
-#: module/plugins/hoster/UploadedTo.py:156
+#: pyload/plugins/hoster/UploadedTo.py:156
msgid "Traffic exceeded"
msgstr "超出流量限制"
-#: module/plugins/hoster/RapidshareCom.py:100
+#: pyload/plugins/hoster/RapidshareCom.py:100
msgid "Rapidshare: Traffic Share (direct download)"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:127
-#: module/plugins/hoster/RapidshareCom.py:194
+#: pyload/plugins/hoster/RapidshareCom.py:127
+#: pyload/plugins/hoster/RapidshareCom.py:194
msgid "Already downloading from this ip address, waiting 60 seconds"
msgstr "æ­€IP䜍址已圚䞋茉及䞀項目請等埅六十秒埌重詊"
-#: module/plugins/hoster/RapidshareCom.py:131
+#: pyload/plugins/hoster/RapidshareCom.py:131
msgid "Invalid Auth Code, download will be restarted"
msgstr "驗證倱敗任務即將重詊"
-#: module/plugins/hoster/RapidshareCom.py:199
+#: pyload/plugins/hoster/RapidshareCom.py:199
msgid "RapidShareCom: No free slots"
msgstr ""
-#: module/plugins/hoster/RapidshareCom.py:202
+#: pyload/plugins/hoster/RapidshareCom.py:202
msgid "You need a premium account for this file"
msgstr "歀檔案需芁高玚甚戶才胜䞋茉"
-#: module/plugins/hoster/RapidshareCom.py:204
+#: pyload/plugins/hoster/RapidshareCom.py:204
msgid "Filename reported invalid"
msgstr "䞍正確的檔名"
-#: module/plugins/hoster/FileserveCom.py:99
+#: pyload/plugins/hoster/FileserveCom.py:99
msgid "Parallel download error, now waiting 60s."
msgstr "同時䞋茉錯誀60秒埌重詊"
-#: module/plugins/hoster/FileserveCom.py:215
+#: pyload/plugins/hoster/FileserveCom.py:215
msgid "Not logged in."
msgstr "未登入"
-#: module/plugins/hoster/MegaNz.py:56
+#: pyload/plugins/hoster/MegaNz.py:56
msgid "Decryption failed"
msgstr "解析倱敗"
-#: module/plugins/hoster/MegaNz.py:106
+#: pyload/plugins/hoster/MegaNz.py:106
msgid "No file key provided in the URL"
msgstr "URL未提䟛金鑰"
-#: module/plugins/hoster/MegaNz.py:118
+#: pyload/plugins/hoster/MegaNz.py:118
msgid "Error code:"
msgstr "錯誀碌"
-#: module/plugins/Container.py:68
+#: pyload/plugins/Container.py:68
msgid "File not exists."
msgstr ""
-#: module/plugins/hooks/UpdateManager.py:74
+#: pyload/plugins/hooks/UpdateManager.py:74
msgid "*** Plugins have been updated, please restart pyLoad ***"
msgstr "倖掛已曎新請重新啟動pyLoad"
-#: module/plugins/hooks/UpdateManager.py:76
+#: pyload/plugins/hooks/UpdateManager.py:76
msgid "Plugins updated and reloaded"
msgstr "倖掛已曎新"
-#: module/plugins/hooks/UpdateManager.py:79
+#: pyload/plugins/hooks/UpdateManager.py:79
msgid "No plugin updates available"
msgstr "倖掛沒有可甚的曎新"
-#: module/plugins/hooks/UpdateManager.py:96
+#: pyload/plugins/hooks/UpdateManager.py:96
msgid "No Updates for pyLoad"
msgstr "pyLoad沒有可甚的曎新"
-#: module/plugins/hooks/UpdateManager.py:100
+#: pyload/plugins/hooks/UpdateManager.py:100
#, python-format
msgid "*** New pyLoad Version %s available ***"
msgstr "pyLoad有新版本%s可䜿甚"
-#: module/plugins/hooks/UpdateManager.py:101
+#: pyload/plugins/hooks/UpdateManager.py:101
msgid "*** Get it here: http://pyload.org/download ***"
msgstr "*** 請埞歀䞋茉 http://pyload.org/download ***"
-#: module/plugins/hooks/UpdateManager.py:104
+#: pyload/plugins/hooks/UpdateManager.py:104
msgid "Not able to connect server for updates"
msgstr "無法連線至曎新䌺服噚"
-#: module/plugins/hooks/UpdateManager.py:148
+#: pyload/plugins/hooks/UpdateManager.py:148
#, python-format
msgid "New version of %(type)s|%(name)s : %(version).2f"
msgstr "新版本 %(type)s|%(name)s : %(version).2f"
-#: module/plugins/hooks/UpdateManager.py:157
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:157
+#: pyload/plugins/hooks/UpdateManager.py:162
#, python-format
msgid "Error when updating %s"
msgstr "曎新 %s 時癌生錯誀"
-#: module/plugins/hooks/UpdateManager.py:162
+#: pyload/plugins/hooks/UpdateManager.py:162
msgid "Version mismatch"
msgstr "版本䞍合"
-#: module/plugins/hooks/IRCInterface.py:82
+#: pyload/plugins/hooks/IRCInterface.py:82
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s "
msgstr "%(name)s @ %(plugin)s 已完成"
-#: module/plugins/hooks/IRCInterface.py:95
+#: pyload/plugins/hooks/IRCInterface.py:95
#, python-format
msgid "New Captcha Request: %s"
msgstr "驗證碌請求: %s"
-#: module/plugins/hooks/IRCInterface.py:96
+#: pyload/plugins/hooks/IRCInterface.py:96
#, python-format
msgid "Answer with 'c %s text on the captcha'"
msgstr "請茞入驗證碌䞊的文字 %s"
-#: module/plugins/hooks/Premium4Me.py:29
+#: pyload/plugins/hooks/Premium4Me.py:29
msgid "Please add your premium.to account first and restart pyLoad"
msgstr "請先添加premium.to垳戶䞊重新啟動pyLoad"
-#: module/plugins/hooks/HotFolder.py:82
+#: pyload/plugins/hooks/HotFolder.py:82
#, python-format
msgid "Added %s from HotFolder"
msgstr "埞HotFolder增加 %s"
-#: module/plugins/hooks/ExtractArchive.py:95
+#: pyload/plugins/hooks/ExtractArchive.py:95
#, python-format
msgid "No %s installed"
msgstr "未安裝 %s"
-#: module/plugins/hooks/ExtractArchive.py:97
-#: module/plugins/hooks/ExtractArchive.py:102
+#: pyload/plugins/hooks/ExtractArchive.py:97
+#: pyload/plugins/hooks/ExtractArchive.py:102
#, python-format
msgid "Could not activate %s"
msgstr "無法啟甚 %s"
-#: module/plugins/hooks/ExtractArchive.py:107
+#: pyload/plugins/hooks/ExtractArchive.py:107
msgid "Activated"
msgstr "已啟甚"
-#: module/plugins/hooks/ExtractArchive.py:109
+#: pyload/plugins/hooks/ExtractArchive.py:109
msgid "No Extract plugins activated"
msgstr "解壓瞮倖掛未啟甚"
-#: module/plugins/hooks/ExtractArchive.py:121
+#: pyload/plugins/hooks/ExtractArchive.py:121
#, python-format
msgid "Package %s queued for later extracting"
msgstr "任務 %s 已排入解壓䜇列"
-#: module/plugins/hooks/ExtractArchive.py:144
+#: pyload/plugins/hooks/ExtractArchive.py:144
#, python-format
msgid "Check package %s"
msgstr "檢查䞋茉任務 %s"
-#: module/plugins/hooks/ExtractArchive.py:185
+#: pyload/plugins/hooks/ExtractArchive.py:185
#, python-format
msgid "Extract to %s"
msgstr "解壓瞮至 %s"
-#: module/plugins/hooks/ExtractArchive.py:200
+#: pyload/plugins/hooks/ExtractArchive.py:200
msgid "No files found to extract"
msgstr "無法扟到壓瞮檔"
-#: module/plugins/hooks/ExtractArchive.py:207
+#: pyload/plugins/hooks/ExtractArchive.py:207
msgid "extracting"
msgstr "解壓瞮䞭"
-#: module/plugins/hooks/ExtractArchive.py:218
+#: pyload/plugins/hooks/ExtractArchive.py:218
msgid "Password protected"
msgstr "被加密的壓瞮檔"
-#: module/plugins/hooks/ExtractArchive.py:239
+#: pyload/plugins/hooks/ExtractArchive.py:239
msgid "Wrong password"
msgstr "密碌錯誀"
-#: module/plugins/hooks/ExtractArchive.py:247
+#: pyload/plugins/hooks/ExtractArchive.py:247
#, python-format
msgid "Deleting %s files"
msgstr "刪陀檔案 %s"
-#: module/plugins/hooks/ExtractArchive.py:254
+#: pyload/plugins/hooks/ExtractArchive.py:254
msgid "Extracting finished"
msgstr "解壓瞮完成"
-#: module/plugins/hooks/ExtractArchive.py:260
+#: pyload/plugins/hooks/ExtractArchive.py:260
msgid "Archive Error"
msgstr "壓瞮檔損毀"
-#: module/plugins/hooks/ExtractArchive.py:262
+#: pyload/plugins/hooks/ExtractArchive.py:262
msgid "CRC Mismatch"
msgstr "CRC䞍正確"
-#: module/plugins/hooks/ExtractArchive.py:266
+#: pyload/plugins/hooks/ExtractArchive.py:266
msgid "Unknown Error"
msgstr "未知錯誀"
-#: module/plugins/hooks/ExtractArchive.py:318
+#: pyload/plugins/hooks/ExtractArchive.py:318
msgid "Setting User and Group failed"
msgstr "蚭定䜿甚者及矀組倱敗"
-#: module/plugins/hooks/ClickAndLoad.py:75
+#: pyload/plugins/hooks/ClickAndLoad.py:75
msgid "Click'N'Load: Port 9666 already in use"
msgstr "Click'N'Load: 9666阜已被䜿甚"
-#: module/plugins/hooks/CaptchaTrader.py:69
-#: module/plugins/hooks/Captcha9kw.py:59
-#: module/plugins/hooks/ExpertDecoders.py:50
+#: pyload/plugins/hooks/CaptchaTrader.py:69
+#: pyload/plugins/hooks/Captcha9kw.py:59
+#: pyload/plugins/hooks/ExpertDecoders.py:50
#, python-format
msgid "%s credits left"
msgstr "額床剩逘 %s"
-#: module/plugins/hooks/CaptchaTrader.py:117
+#: pyload/plugins/hooks/CaptchaTrader.py:117
msgid "Could not send response."
msgstr "無法癌送回應。"
-#: module/plugins/hooks/CaptchaTrader.py:135
+#: pyload/plugins/hooks/CaptchaTrader.py:135
msgid "Your CaptchaTrader Account has not enough credits"
msgstr "CaptchaTrader垳戶額床䞍足"
-#: module/plugins/hooks/LinkdecrypterCom.py:43
+#: pyload/plugins/hooks/LinkdecrypterCom.py:43
msgid "Crypter list not found"
msgstr "未扟到Crypteræž…å–®"
-#: module/plugins/hooks/LinkdecrypterCom.py:57
+#: pyload/plugins/hooks/LinkdecrypterCom.py:57
msgid "Crypter list is empty"
msgstr "Crypter枅單是空的"
-#: module/plugins/hooks/XMPPInterface.py:91
+#: pyload/plugins/hooks/XMPPInterface.py:91
#, python-format
msgid "Download finished: %(name)s @ %(plugin)s"
msgstr "%(name)s @ %(plugin)s 完成"
-#: module/plugins/hooks/Captcha9kw.py:93
+#: pyload/plugins/hooks/Captcha9kw.py:93
#, python-format
msgid "New CaptchaID from upload: %s : %s"
msgstr "䞊傳新的CaptchaID%s:%s"
-#: module/plugins/hooks/Captcha9kw.py:129
+#: pyload/plugins/hooks/Captcha9kw.py:129
msgid "Your Captcha 9kw.eu Account has not enough credits"
msgstr "9kw.eu垳戶額床䞍足"
-#: module/plugins/hooks/ExternalScripts.py:54
+#: pyload/plugins/hooks/ExternalScripts.py:54
#, python-format
msgid "Installed scripts for %s: "
msgstr "%s 已安裝的腳本"
-#: module/plugins/hooks/ExternalScripts.py:69
+#: pyload/plugins/hooks/ExternalScripts.py:69
msgid "Script not executable:"
msgstr "無法執行腳本"
-#: module/plugins/hooks/ExternalScripts.py:80
+#: pyload/plugins/hooks/ExternalScripts.py:80
#, python-format
msgid "Error in %(script)s: %(error)s"
msgstr "%(script)s %(error)s"
-#: module/plugins/hooks/ExpertDecoders.py:95
+#: pyload/plugins/hooks/ExpertDecoders.py:95
msgid "Your ExpertDecoders Account has not enough credits"
msgstr "ExpertDecoders垳戶額床䞍足"
-#: module/plugins/hooks/RehostTo.py:32
+#: pyload/plugins/hooks/RehostTo.py:32
msgid "Please add your rehost.to account first and restart pyLoad"
msgstr "請先添加rehost.to垳戶䞊重新啟動pyLoad"
-#: module/plugins/hooks/PremiumizeMe.py:48
+#: pyload/plugins/hooks/PremiumizeMe.py:48
msgid "Please add a valid premiumize.me account first and restart pyLoad."
msgstr "請先蚭定premiumize.me垳戶䞊重新啟動pyLoad"
-#: module/plugins/hooks/CaptchaBrotherhood.py:69
+#: pyload/plugins/hooks/CaptchaBrotherhood.py:69
#, python-format
msgid "%d credits left"
msgstr "額床剩䞋 %d"
-#: module/plugins/Plugin.py:389
+#: pyload/plugins/Plugin.py:389
msgid "Pil and tesseract not installed and no Client connected for captcha decrypting"
msgstr "尚未安裝Pil及tesseract尚未連接至需芁解析的客戶端"
-#: module/plugins/Plugin.py:393
+#: pyload/plugins/Plugin.py:393
msgid "No captcha result obtained in appropiate time by any of the plugins."
msgstr ""
-#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532
+#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532
#, python-format
msgid "Setting User and Group failed: %s"
msgstr "蚭眮䜿甚者和組倱敗 %s"
-#: module/CaptchaManager.py:78
+#: pyload/CaptchaManager.py:78
msgid "No Client connected for captcha decrypting"
msgstr ""
-#: module/Api.py:330
+#: pyload/Api.py:330
#, python-format
msgid "Added package %(name)s containing %(count)d links"
msgstr ""
-#: module/Api.py:593
+#: pyload/Api.py:593
#, python-format
msgid "Added %(count)d links to package #%(package)d "
msgstr ""
-#: module/common/JsEngine.py:156
+#: pyload/common/JsEngine.py:156
msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
diff --git a/locale/zh/LC_MESSAGES/pyLoadCli.po b/locale/zh/LC_MESSAGES/pyLoadCli.po
index 47d8acb01..fd5ebd330 100644
--- a/locale/zh/LC_MESSAGES/pyLoadCli.po
+++ b/locale/zh/LC_MESSAGES/pyLoadCli.po
@@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/cli/Cli.py:75 module/cli/Cli.py:133
+#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133
msgid " Command Line Interface"
msgstr "呜什列介面"
-#: module/cli/Cli.py:165
+#: pyload/cli/Cli.py:165
#, python-format
msgid "%s Downloads:"
msgstr "已䞋茉 %s:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Speed: "
msgstr "速床:"
-#: module/cli/Cli.py:177
+#: pyload/cli/Cli.py:177
msgid " Size: "
msgstr "倧小:"
-#: module/cli/Cli.py:178
+#: pyload/cli/Cli.py:178
msgid " Finished in: "
msgstr "距離完成:"
-#: module/cli/Cli.py:179
+#: pyload/cli/Cli.py:179
msgid " ID: "
msgstr "線號:"
-#: module/cli/Cli.py:184
+#: pyload/cli/Cli.py:184
msgid "waiting: "
msgstr "等埅䞭:"
-#: module/cli/Cli.py:191 module/cli/Cli.py:193
+#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193
msgid "Status:"
msgstr "狀態:"
-#: module/cli/Cli.py:191
+#: pyload/cli/Cli.py:191
msgid "paused"
msgstr "已暫停"
-#: module/cli/Cli.py:193
+#: pyload/cli/Cli.py:193
msgid "running"
msgstr "執行䞭"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "total Speed"
msgstr "瞜速床"
-#: module/cli/Cli.py:196
+#: pyload/cli/Cli.py:196
msgid "Files in queue"
msgstr "䜇列䞭檔案"
-#: module/cli/Cli.py:197
+#: pyload/cli/Cli.py:197
msgid "Total"
msgstr "瞜蚈"
-#: module/cli/Cli.py:203
+#: pyload/cli/Cli.py:203
msgid "Menu:"
msgstr "衚單:"
-#: module/cli/Cli.py:205
+#: pyload/cli/Cli.py:205
msgid " Add Links"
msgstr "加入連結"
-#: module/cli/Cli.py:206
+#: pyload/cli/Cli.py:206
msgid " Manage Queue"
msgstr "䜇列管理"
-#: module/cli/Cli.py:207
+#: pyload/cli/Cli.py:207
msgid " Manage Collector"
msgstr "收集噚管理"
-#: module/cli/Cli.py:208
+#: pyload/cli/Cli.py:208
msgid " (Un)Pause Server"
msgstr "暫停/啟動 䌺服噚"
-#: module/cli/Cli.py:209
+#: pyload/cli/Cli.py:209
msgid " Kill Server"
msgstr "終止䌺服噚"
-#: module/cli/Cli.py:210
+#: pyload/cli/Cli.py:210
msgid " Quit"
msgstr "離開"
-#: module/cli/Cli.py:289 module/cli/Cli.py:296
+#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296
msgid "Please use this syntax: add <Package name> <link> <link2> ..."
msgstr "請䜿甚歀語法: add 任務名皱> <連結> <連結2> ..."
-#: module/cli/Cli.py:315
+#: pyload/cli/Cli.py:315
#, python-format
msgid "Checking %d links:"
msgstr "檢查 %d 連結:"
-#: module/cli/Cli.py:324
+#: pyload/cli/Cli.py:324
msgid "File does not exists."
msgstr "檔案䞍存圚。"
-#: module/cli/Cli.py:385
+#: pyload/cli/Cli.py:385
msgid "pyLoad was terminated"
msgstr "pyLoad 已終止"
-#: module/cli/Cli.py:443
+#: pyload/cli/Cli.py:443
msgid "Prints server status"
msgstr "顯瀺䌺服噚狀態"
-#: module/cli/Cli.py:444
+#: pyload/cli/Cli.py:444
msgid "Prints downloads in queue"
msgstr "顯瀺䜇列䞭䞋茉項目"
-#: module/cli/Cli.py:445
+#: pyload/cli/Cli.py:445
msgid "Prints downloads in collector"
msgstr "顯瀺收集噚䞭䞋茉項目"
-#: module/cli/Cli.py:446
+#: pyload/cli/Cli.py:446
msgid "Adds package to queue"
msgstr "新增任務到䜇列"
-#: module/cli/Cli.py:447
+#: pyload/cli/Cli.py:447
msgid "Adds package to collector"
msgstr "新增任務到收集噚"
-#: module/cli/Cli.py:448
+#: pyload/cli/Cli.py:448
msgid "Delete Files from Queue/Collector"
msgstr "埞䜇列/收集噚䞭刪陀檔案"
-#: module/cli/Cli.py:449
+#: pyload/cli/Cli.py:449
msgid "Delete Packages from Queue/Collector"
msgstr "埞䜇列/收集噚䞭刪陀任務"
-#: module/cli/Cli.py:450
+#: pyload/cli/Cli.py:450
msgid "Move Packages from Queue to Collector or vice versa"
msgstr "圚䜇列或收集噚䞭移動任務"
-#: module/cli/Cli.py:451
+#: pyload/cli/Cli.py:451
msgid "Restart files"
msgstr "重新開始檔案"
-#: module/cli/Cli.py:452
+#: pyload/cli/Cli.py:452
msgid "Restart packages"
msgstr "重新開始任務"
-#: module/cli/Cli.py:453
+#: pyload/cli/Cli.py:453
msgid "Check online status, works with local container"
msgstr "查看線䞊狀態工䜜與本機容噚"
-#: module/cli/Cli.py:454
+#: pyload/cli/Cli.py:454
msgid "Checks online status of a container file"
msgstr "檢查容噚內檔案䞊線狀態"
-#: module/cli/Cli.py:455
+#: pyload/cli/Cli.py:455
msgid "Pause the server"
msgstr "暫停䌺服噚"
-#: module/cli/Cli.py:456
+#: pyload/cli/Cli.py:456
msgid "continue downloads"
msgstr "繌續䞋茉"
-#: module/cli/Cli.py:457
+#: pyload/cli/Cli.py:457
msgid "Toggle pause/unpause"
msgstr "暫停/繌續"
-#: module/cli/Cli.py:458
+#: pyload/cli/Cli.py:458
msgid "kill server"
msgstr "終止䌺服噚"
-#: module/cli/Cli.py:460
+#: pyload/cli/Cli.py:460
msgid "List of commands:"
msgstr "呜什枅單"
-#: module/cli/Cli.py:473
+#: pyload/cli/Cli.py:473
msgid "Couldn't write user config file"
msgstr "䞍胜寫入䜿甚者蚭定檔"
-#: module/cli/Cli.py:548
+#: pyload/cli/Cli.py:548
msgid "You need py-openssl to connect to this pyLoad Core."
msgstr "悚需芁安装py-openssl来连接这䞪pyLoad栞心。"
-#: module/cli/Cli.py:555
+#: pyload/cli/Cli.py:555
msgid "Address: "
msgstr "䜍址:"
-#: module/cli/Cli.py:556
+#: pyload/cli/Cli.py:556
msgid "Port: "
msgstr "連接埠:"
-#: module/cli/Cli.py:557
+#: pyload/cli/Cli.py:557
msgid "Username: "
msgstr "䜿甚者名皱:"
-#: module/cli/Cli.py:561
+#: pyload/cli/Cli.py:561
msgid "Password: "
msgstr "密碌:"
-#: module/cli/Cli.py:566 module/cli/Cli.py:575
+#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575
msgid "Login data is wrong."
msgstr "登入資蚊錯誀。"
-#: module/cli/Cli.py:568 module/cli/Cli.py:577
+#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577
#, python-format
msgid "Could not establish connection to %(addr)s:%(port)s."
msgstr "無法建立 %(addr)s:%(port)s 連線。"
-#: module/cli/Cli.py:580
+#: pyload/cli/Cli.py:580
msgid "You need py-openssl to connect to this pyLoad core."
msgstr "悚需芁 py-openssl 䟆連接 pyLoad 栞心。"
-#: module/cli/Cli.py:582
+#: pyload/cli/Cli.py:582
msgid "Interactive mode ignored since you passed some commands."
msgstr "執行呜什䞭応略互動暡匏。"
-#: module/cli/AddPackage.py:48
+#: pyload/cli/AddPackage.py:48
msgid "Add Package:"
msgstr "新增䞋茉任務"
-#: module/cli/AddPackage.py:53
+#: pyload/cli/AddPackage.py:53
msgid "Enter a name for the new package"
msgstr "茞入新任務名皱"
-#: module/cli/AddPackage.py:57
+#: pyload/cli/AddPackage.py:57
#, python-format
msgid "Package: %s"
msgstr "任務%s"
-#: module/cli/AddPackage.py:58
+#: pyload/cli/AddPackage.py:58
msgid "Parse the links you want to add."
msgstr "分析䜠想加入的連結。"
-#: module/cli/AddPackage.py:59
+#: pyload/cli/AddPackage.py:59
#, python-format
msgid "Type %s when done."
msgstr "完成埌請茞入 %s"
-#: module/cli/AddPackage.py:60
+#: pyload/cli/AddPackage.py:60
msgid "Links added: "
msgstr "加入的連結:"
-#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149
+#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149
msgid " back to main menu"
msgstr "回到䞻遞單"
-#: module/cli/ManageFiles.py:97
+#: pyload/cli/ManageFiles.py:97
msgid "Manage Packages:"
msgstr "管理任務"
-#: module/cli/ManageFiles.py:99
+#: pyload/cli/ManageFiles.py:99
msgid "Manage Links:"
msgstr "管理連結"
-#: module/cli/ManageFiles.py:104
+#: pyload/cli/ManageFiles.py:104
msgid "What do you want to move?"
msgstr "䜠想芁移動?"
-#: module/cli/ManageFiles.py:106
+#: pyload/cli/ManageFiles.py:106
msgid "What do you want to delete?"
msgstr "䜠想芁刪陀?"
-#: module/cli/ManageFiles.py:108
+#: pyload/cli/ManageFiles.py:108
msgid "What do you want to restart?"
msgstr "䜠想芁重啟?"
-#: module/cli/ManageFiles.py:113
+#: pyload/cli/ManageFiles.py:113
msgid "Choose what yout want to do or enter package number."
msgstr ""
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "delete"
msgstr "刪陀"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "move"
msgstr "移動"
-#: module/cli/ManageFiles.py:115
+#: pyload/cli/ManageFiles.py:115
msgid "restart"
msgstr "重啟"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - previous"
msgstr " - 侊侀頁"
-#: module/cli/ManageFiles.py:148
+#: pyload/cli/ManageFiles.py:148
msgid " - next"
msgstr "- 例侀頁"
diff --git a/locale/zh/LC_MESSAGES/setup.po b/locale/zh/LC_MESSAGES/setup.po
index 323d06cea..4496c4010 100644
--- a/locale/zh/LC_MESSAGES/setup.po
+++ b/locale/zh/LC_MESSAGES/setup.po
@@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.net\n"
-#: module/setup.py:51
+#: pyload/setup.py:51
msgid "y"
msgstr "是"
-#: module/setup.py:53
+#: pyload/setup.py:53
msgid "n"
msgstr "吊"
-#: module/setup.py:72
+#: pyload/setup.py:72
msgid "Welcome to the pyLoad Configuration Assistent."
msgstr "歡迎䜿甚pyLoad蚭定助手"
-#: module/setup.py:73
+#: pyload/setup.py:73
msgid "It will check your system and make a basic setup in order to run pyLoad."
msgstr "它將會檢查悚的系統䞊完成基本蚭定"
-#: module/setup.py:75
+#: pyload/setup.py:75
msgid "The value in brackets [] always is the default value,"
msgstr "䞭括匧內的倌為預蚭倌"
-#: module/setup.py:76
+#: pyload/setup.py:76
msgid "in case you don't want to change it or you are unsure what to choose, just hit enter."
msgstr "劂果悚䞍知道該劂䜕蚭定或是䞍需改變請盎接按䞋Enter"
-#: module/setup.py:78
+#: pyload/setup.py:78
msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ."
msgstr "小提醒 悚以埌可以透過pyLoadCore -s 或是 pyload.py --setup重新執行蚭定助手"
-#: module/setup.py:79
+#: pyload/setup.py:79
msgid "If you have any problems with this assistent hit STRG-C,"
msgstr "劂果䜠对本助理有任䜕疑问请摁STRG-C"
-#: module/setup.py:80
+#: pyload/setup.py:80
msgid "to abort and don't let him start with pyload.py automatically anymore."
msgstr "䞍再讓蚭定助手與pyLoad同時啟動"
-#: module/setup.py:82
+#: pyload/setup.py:82
msgid "When you are ready for system check, hit enter."
msgstr "按䞋確定埌開始檢查系統狀態"
-#: module/setup.py:89
+#: pyload/setup.py:89
msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad."
msgstr "䜠需芁pycurlsqlite以及python 2.52.6或是2.7来运行pyLoad。"
-#: module/setup.py:90
+#: pyload/setup.py:90
msgid "Please correct this and re-run pyLoad."
msgstr "请修改后重新运行pyLoad"
-#: module/setup.py:91
+#: pyload/setup.py:91
msgid "Setup will now close."
msgstr "安装向富关闭。"
-#: module/setup.py:95
+#: pyload/setup.py:95
msgid "System check finished, hit enter to see your status report."
msgstr "系统检查完毕恩䞋回蜊以查看系统报告。"
-#: module/setup.py:97
+#: pyload/setup.py:97
msgid "## Status ##"
msgstr "进皋"
-#: module/setup.py:101
+#: pyload/setup.py:101
msgid "container decrypting"
msgstr ""
-#: module/setup.py:102
+#: pyload/setup.py:102
msgid "ssl connection"
msgstr ""
-#: module/setup.py:103
+#: pyload/setup.py:103
msgid "automatic captcha decryption"
msgstr ""
-#: module/setup.py:104
+#: pyload/setup.py:104
msgid "GUI"
msgstr ""
-#: module/setup.py:105
+#: pyload/setup.py:105
msgid "Webinterface"
msgstr "Web界面"
-#: module/setup.py:106
+#: pyload/setup.py:106
msgid "extended Click'N'Load"
msgstr ""
-#: module/setup.py:113
+#: pyload/setup.py:113
msgid "Features available:"
msgstr ""
-#: module/setup.py:117
+#: pyload/setup.py:117
msgid "Featues missing: "
msgstr ""
-#: module/setup.py:121
+#: pyload/setup.py:121
msgid "no py-crypto available"
msgstr ""
-#: module/setup.py:122
+#: pyload/setup.py:122
msgid "You need this if you want to decrypt container files."
msgstr ""
-#: module/setup.py:126
+#: pyload/setup.py:126
msgid "no SSL available"
msgstr ""
-#: module/setup.py:127
+#: pyload/setup.py:127
msgid "This is needed if you want to establish a secure connection to core or webinterface."
msgstr ""
-#: module/setup.py:128
+#: pyload/setup.py:128
msgid "If you only want to access locally to pyLoad ssl is not usefull."
msgstr ""
-#: module/setup.py:132
+#: pyload/setup.py:132
msgid "no Captcha Recognition available"
msgstr ""
-#: module/setup.py:133
+#: pyload/setup.py:133
msgid "Only needed for some hosters and as freeuser."
msgstr ""
-#: module/setup.py:137
+#: pyload/setup.py:137
msgid "Gui not available"
msgstr ""
-#: module/setup.py:138
+#: pyload/setup.py:138
msgid "The Graphical User Interface."
msgstr ""
-#: module/setup.py:142
+#: pyload/setup.py:142
msgid "no JavaScript engine found"
msgstr ""
-#: module/setup.py:143
+#: pyload/setup.py:143
msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino"
msgstr ""
-#: module/setup.py:145
+#: pyload/setup.py:145
msgid "You can abort the setup now and fix some dependicies if you want."
msgstr ""
-#: module/setup.py:147
+#: pyload/setup.py:147
msgid "Continue with setup?"
msgstr "是吊繌續蚭定"
-#: module/setup.py:153
+#: pyload/setup.py:153
#, python-format
msgid "Do you want to change the config path? Current is %s"
msgstr "目前存攟蚭定檔的䜍眮為 %s是吊芁修改"
-#: module/setup.py:155
+#: pyload/setup.py:155
msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it."
msgstr ""
-#: module/setup.py:156
+#: pyload/setup.py:156
msgid "Change config path?"
msgstr "改變蚭定擋路埑"
-#: module/setup.py:162
+#: pyload/setup.py:162
msgid "Do you want to configure login data and basic settings?"
msgstr "是吊芁進行基本蚭定"
-#: module/setup.py:163
+#: pyload/setup.py:163
msgid "This is recommend for first run."
msgstr "第䞀次䜿甚pyLoad時建議䜿甚"
-#: module/setup.py:164
+#: pyload/setup.py:164
msgid "Make basic setup?"
msgstr "開始基瀎蚭定嗎"
-#: module/setup.py:171
+#: pyload/setup.py:171
msgid "Do you want to configure ssl?"
msgstr "開始蚭定SSL嗎"
-#: module/setup.py:172
+#: pyload/setup.py:172
msgid "Configure ssl?"
msgstr "蚭定SSL"
-#: module/setup.py:178
+#: pyload/setup.py:178
msgid "Do you want to configure webinterface?"
msgstr "開始蚭定網頁介面"
-#: module/setup.py:179
+#: pyload/setup.py:179
msgid "Configure webinterface?"
msgstr "蚭定網頁介面"
-#: module/setup.py:184
+#: pyload/setup.py:184
msgid "Setup finished successfully."
msgstr "蚭定完成"
-#: module/setup.py:185
+#: pyload/setup.py:185
msgid "Hit enter to exit and restart pyLoad"
msgstr "按䞋Enter離開蚭定介面䞊重新啟動pyLoad"
-#: module/setup.py:191
+#: pyload/setup.py:191
msgid "## System Check ##"
msgstr ""
-#: module/setup.py:194
+#: pyload/setup.py:194
msgid "Your python version is to new, Please use Python 2.6/2.7"
msgstr ""
-#: module/setup.py:197
+#: pyload/setup.py:197
msgid "Your python version is to old, Please use at least Python 2.5"
msgstr ""
-#: module/setup.py:200
+#: pyload/setup.py:200
msgid "Python Version: OK"
msgstr ""
-#: module/setup.py:247
+#: pyload/setup.py:247
#, python-format
msgid "Your installed jinja2 version %s seems too old."
msgstr ""
-#: module/setup.py:248
+#: pyload/setup.py:248
msgid "You can safely continue but if the webinterface is not working,"
msgstr ""
-#: module/setup.py:249
+#: pyload/setup.py:249
msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary."
msgstr ""
-#: module/setup.py:264
+#: pyload/setup.py:264
msgid "JS engine"
msgstr ""
-#: module/setup.py:270
+#: pyload/setup.py:270
msgid "## Basic Setup ##"
msgstr "基本蚭定"
-#: module/setup.py:273
+#: pyload/setup.py:273
msgid "The following logindata is valid for CLI, GUI and webinterface."
msgstr "䞋列蚊息圚CLI、GUI及網頁介面皆是有效的"
-#: module/setup.py:279 module/setup.py:370 module/setup.py:386
+#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386
msgid "Username"
msgstr "䜿甚者名皱"
-#: module/setup.py:285
+#: pyload/setup.py:285
msgid "External clients (GUI, CLI or other) need remote access to work over the network."
msgstr ""
-#: module/setup.py:286
+#: pyload/setup.py:286
msgid "However, if you only want to use the webinterface you may disable it to save ram."
msgstr ""
-#: module/setup.py:287
+#: pyload/setup.py:287
msgid "Enable remote access"
msgstr ""
-#: module/setup.py:291
+#: pyload/setup.py:291
msgid "Language"
msgstr "語蚀"
-#: module/setup.py:293
+#: pyload/setup.py:293
msgid "Downloadfolder"
msgstr ""
-#: module/setup.py:294
+#: pyload/setup.py:294
msgid "Max parallel downloads"
msgstr "同時最倧䞋茉敞量"
-#: module/setup.py:298
+#: pyload/setup.py:298
msgid "Use Reconnect?"
msgstr "開啟重詊機制"
-#: module/setup.py:301
+#: pyload/setup.py:301
msgid "Reconnect script location"
msgstr "重詊腳本路埑"
-#: module/setup.py:306
+#: pyload/setup.py:306
msgid "## Webinterface Setup ##"
msgstr "網頁介面蚭定"
-#: module/setup.py:309
+#: pyload/setup.py:309
msgid "Activate webinterface?"
msgstr "開啟網頁介面"
-#: module/setup.py:311
+#: pyload/setup.py:311
msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally."
msgstr "監聜䜍址䜿甚127.0.0.1或localhost可讓網頁介面只有圚本地端可䜿甚"
-#: module/setup.py:312
+#: pyload/setup.py:312
msgid "Address"
msgstr "IP䜍址"
-#: module/setup.py:313
+#: pyload/setup.py:313
msgid "Port"
msgstr "埠"
-#: module/setup.py:315
+#: pyload/setup.py:315
msgid "pyLoad offers several server backends, now following a short explanation."
msgstr "pyLoad提䟛了幟皮server暡匏以䞋䜜簡短說明"
-#: module/setup.py:316
+#: pyload/setup.py:316
msgid "Default server, best choice if you dont know which one to choose."
msgstr ""
-#: module/setup.py:317
+#: pyload/setup.py:317
msgid "This server offers SSL and is a good alternative to builtin."
msgstr ""
-#: module/setup.py:319
+#: pyload/setup.py:319
msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job."
msgstr "再適當的蚭定埌可以被apache、lighttpd䜿甚專業暡匏"
-#: module/setup.py:320
+#: pyload/setup.py:320
msgid "Very fast alternative written in C, requires libev and linux knowlegde."
msgstr ""
-#: module/setup.py:321
+#: pyload/setup.py:321
msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it"
msgstr "由歀䞋茉 https://github.com/jonashaag/bjoern䞊線譯"
-#: module/setup.py:322
-msgid "and copy bjoern.so to module/lib"
+#: pyload/setup.py:322
+msgid "and copy bjoern.so to pyload/lib"
msgstr ""
-#: module/setup.py:326
+#: pyload/setup.py:326
msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface"
msgstr "譊告內建(buildin)䌺服噚圚某些情況會無法運䜜"
-#: module/setup.py:327
+#: pyload/setup.py:327
msgid "come back here and change the builtin server to the threaded one here."
msgstr "劂果䜠癌珟網頁介面有任䜕問題請重新執行蚭定助手䞊將䌺服噚暡匏蚭定為其逘暡匏"
-#: module/setup.py:329
+#: pyload/setup.py:329
msgid "Server"
msgstr "䌺服噚"
-#: module/setup.py:334
+#: pyload/setup.py:334
msgid "## SSL Setup ##"
msgstr "SSL蚭定"
-#: module/setup.py:336
+#: pyload/setup.py:336
msgid "Execute these commands from pyLoad config folder to make ssl certificates:"
msgstr "圚pyLoad蚭定檔目錄䞭執行䞋列指什以取埗SSL憑證"
-#: module/setup.py:342
+#: pyload/setup.py:342
msgid "If you're done and everything went fine, you can activate ssl now."
msgstr "劂果䞀切順利珟圚就可以開啟SSL"
-#: module/setup.py:344
+#: pyload/setup.py:344
msgid "Activate SSL?"
msgstr "啟甚SSL"
-#: module/setup.py:360
+#: pyload/setup.py:360
msgid "Select action"
msgstr "遞擇動䜜 "
-#: module/setup.py:361
+#: pyload/setup.py:361
msgid "1 - Create/Edit user"
msgstr "1. 建立或線茯䜿甚者"
-#: module/setup.py:362
+#: pyload/setup.py:362
msgid "2 - List users"
msgstr "2. 列出所有䜿甚者"
-#: module/setup.py:363
+#: pyload/setup.py:363
msgid "3 - Remove user"
msgstr "3. 刪陀䜿甚者"
-#: module/setup.py:364
+#: pyload/setup.py:364
msgid "4 - Quit"
msgstr "4. 離開"
-#: module/setup.py:376
+#: pyload/setup.py:376
msgid "Users"
msgstr "䜿甚者"
-#: module/setup.py:403
+#: pyload/setup.py:403
msgid "Setting new configpath, current configuration will not be transfered!"
msgstr ""
-#: module/setup.py:404
+#: pyload/setup.py:404
msgid "Configpath"
msgstr ""
-#: module/setup.py:412
+#: pyload/setup.py:412
msgid "Configpath changed, setup will now close, please restart to go on."
msgstr ""
-#: module/setup.py:413
+#: pyload/setup.py:413
msgid "Press Enter to exit."
msgstr "按䞋 Enter 離開。"
-#: module/setup.py:417
+#: pyload/setup.py:417
#, python-format
msgid "Setting config path failed: %s"
msgstr "蚭定檔路埑有誀 %s"
-#: module/setup.py:422
+#: pyload/setup.py:422
#, python-format
msgid "%s: OK"
msgstr ""
-#: module/setup.py:424
+#: pyload/setup.py:424
#, python-format
msgid "%s: missing"
msgstr ""
-#: module/setup.py:464
+#: pyload/setup.py:464
msgid "Password: "
msgstr "密碌:"
-#: module/setup.py:468
+#: pyload/setup.py:468
msgid "Password too short. Use at least 4 symbols."
msgstr "密碌至少需芁四個字元"
-#: module/setup.py:471
+#: pyload/setup.py:471
msgid "Password (again): "
msgstr "再茞入䞀次密碌"
-#: module/setup.py:477
+#: pyload/setup.py:477
msgid "Passwords did not match."
msgstr "密码䞍笊"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "yes"
msgstr "是"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "true"
msgstr "是"
-#: module/setup.py:493
+#: pyload/setup.py:493
msgid "t"
msgstr ""
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "no"
msgstr "吊"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "false"
msgstr "吊"
-#: module/setup.py:496
+#: pyload/setup.py:496
msgid "f"
msgstr ""
-#: module/setup.py:499 module/setup.py:509
+#: pyload/setup.py:499 pyload/setup.py:509
msgid "Invalid Input"
msgstr "䞍合法的茞入"
diff --git a/module/ConfigParser.py b/module/ConfigParser.py
deleted file mode 100644
index 9de405a3d..000000000
--- a/module/ConfigParser.py
+++ /dev/null
@@ -1,373 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-from time import sleep
-from os.path import exists, join
-from shutil import copy
-
-from traceback import print_exc
-from utils import chmod
-
-# ignore these plugin configs, mainly because plugins were wiped out
-IGNORE = (
- "FreakshareNet", "SpeedManager", "ArchiveTo", "ShareCx", ('hooks', 'UnRar'),
- 'EasyShareCom', 'FlyshareCz'
- )
-
-CONF_VERSION = 1
-
-class ConfigParser:
- """
- holds and manage the configuration
-
- current dict layout:
-
- {
-
- section: {
- option: {
- value:
- type:
- desc:
- }
- desc:
-
- }
-
- """
-
-
- def __init__(self):
- """Constructor"""
- self.config = {} # the config values
- self.plugin = {} # the config for plugins
- self.oldRemoteData = {}
-
- self.pluginCB = None # callback when plugin config value is changed
-
- self.checkVersion()
-
- self.readConfig()
-
- self.deleteOldPlugins()
-
-
- def checkVersion(self, n=0):
- """determines if config need to be copied"""
- try:
- if not exists("pyload.conf"):
- copy(join(pypath, "module", "config", "default.conf"), "pyload.conf")
-
- if not exists("plugin.conf"):
- f = open("plugin.conf", "wb")
- f.write("version: " + str(CONF_VERSION))
- f.close()
-
- f = open("pyload.conf", "rb")
- v = f.readline()
- f.close()
- v = v[v.find(":") + 1:].strip()
-
- if not v or int(v) < CONF_VERSION:
- copy(join(pypath, "module", "config", "default.conf"), "pyload.conf")
- print "Old version of config was replaced"
-
- f = open("plugin.conf", "rb")
- v = f.readline()
- f.close()
- v = v[v.find(":") + 1:].strip()
-
- if not v or int(v) < CONF_VERSION:
- f = open("plugin.conf", "wb")
- f.write("version: " + str(CONF_VERSION))
- f.close()
- print "Old version of plugin-config replaced"
- except:
- if n < 3:
- sleep(0.3)
- self.checkVersion(n + 1)
- else:
- raise
-
- def readConfig(self):
- """reads the config file"""
-
- self.config = self.parseConfig(join(pypath, "module", "config", "default.conf"))
- self.plugin = self.parseConfig("plugin.conf")
-
- try:
- homeconf = self.parseConfig("pyload.conf")
- if "username" in homeconf["remote"]:
- if "password" in homeconf["remote"]:
- self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"],
- "password": homeconf["remote"]["username"]["value"]}
- del homeconf["remote"]["password"]
- del homeconf["remote"]["username"]
- self.updateValues(homeconf, self.config)
-
- except Exception, e:
- print "Config Warning"
- print_exc()
-
-
- def parseConfig(self, config):
- """parses a given configfile"""
-
- f = open(config)
-
- config = f.read()
-
- config = config.splitlines()[1:]
-
- conf = {}
-
- section, option, value, typ, desc = "", "", "", "", ""
-
- listmode = False
-
- for line in config:
- comment = line.rfind("#")
- if line.find(":", comment) < 0 > line.find("=", comment) and comment > 0 and line[comment - 1].isspace():
- line = line.rpartition("#") # removes comments
- if line[1]:
- line = line[0]
- else:
- line = line[2]
-
- line = line.strip()
-
- try:
- if line == "":
- continue
- elif line.endswith(":"):
- section, none, desc = line[:-1].partition('-')
- section = section.strip()
- desc = desc.replace('"', "").strip()
- conf[section] = {"desc": desc}
- else:
- if listmode:
- if line.endswith("]"):
- listmode = False
- line = line.replace("]", "")
-
- value += [self.cast(typ, x.strip()) for x in line.split(",") if x]
-
- if not listmode:
- conf[section][option] = {"desc": desc,
- "type": typ,
- "value": value}
-
-
- else:
- content, none, value = line.partition("=")
-
- content, none, desc = content.partition(":")
-
- desc = desc.replace('"', "").strip()
-
- typ, none, option = content.strip().rpartition(" ")
-
- value = value.strip()
-
- if value.startswith("["):
- if value.endswith("]"):
- listmode = False
- value = value[:-1]
- else:
- listmode = True
-
- value = [self.cast(typ, x.strip()) for x in value[1:].split(",") if x]
- else:
- value = self.cast(typ, value)
-
- if not listmode:
- conf[section][option] = {"desc": desc,
- "type": typ,
- "value": value}
-
- except Exception, e:
- print "Config Warning"
- print_exc()
-
- f.close()
- return conf
-
-
- def updateValues(self, config, dest):
- """sets the config values from a parsed config file to values in destination"""
-
- for section in config.iterkeys():
- if section in dest:
- for option in config[section].iterkeys():
- if option in ("desc", "outline"): continue
-
- if option in dest[section]:
- dest[section][option]["value"] = config[section][option]["value"]
-
- #else:
- # dest[section][option] = config[section][option]
-
-
- #else:
- # dest[section] = config[section]
-
- def saveConfig(self, config, filename):
- """saves config to filename"""
- with open(filename, "wb") as f:
- chmod(filename, 0600)
- f.write("version: %i \n" % CONF_VERSION)
- for section in config.iterkeys():
- f.write('\n%s - "%s":\n' % (section, config[section]["desc"]))
-
- for option, data in config[section].iteritems():
- if option in ("desc", "outline"): continue
-
- if isinstance(data["value"], list):
- value = "[ \n"
- for x in data["value"]:
- value += "\t\t" + str(x) + ",\n"
- value += "\t\t]\n"
- else:
- if type(data["value"]) in (str, unicode):
- value = data["value"] + "\n"
- else:
- value = str(data["value"]) + "\n"
- try:
- f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value))
- except UnicodeEncodeError:
- f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8")))
-
- def cast(self, typ, value):
- """cast value to given format"""
- if type(value) not in (str, unicode):
- return value
-
- elif typ == "int":
- return int(value)
- elif typ == "bool":
- return True if value.lower() in ("1", "true", "on", "an", "yes") else False
- elif typ == "time":
- if not value: value = "0:00"
- if not ":" in value: value += ":00"
- return value
- elif typ in ("str", "file", "folder"):
- try:
- return value.encode("utf8")
- except:
- return value
- else:
- return value
-
-
- def save(self):
- """saves the configs to disk"""
-
- self.saveConfig(self.config, "pyload.conf")
- self.saveConfig(self.plugin, "plugin.conf")
-
-
- def __getitem__(self, section):
- """provides dictonary like access: c['section']['option']"""
- return Section(self, section)
-
-
- def get(self, section, option):
- """get value"""
- val = self.config[section][option]["value"]
- try:
- if type(val) in (str, unicode):
- return val.decode("utf8")
- else:
- return val
- except:
- return val
-
- def set(self, section, option, value):
- """set value"""
-
- value = self.cast(self.config[section][option]["type"], value)
-
- self.config[section][option]["value"] = value
- self.save()
-
- def getPlugin(self, plugin, option):
- """gets a value for a plugin"""
- val = self.plugin[plugin][option]["value"]
- try:
- if type(val) in (str, unicode):
- return val.decode("utf8")
- else:
- return val
- except:
- return val
-
- def setPlugin(self, plugin, option, value):
- """sets a value for a plugin"""
-
- value = self.cast(self.plugin[plugin][option]["type"], value)
-
- if self.pluginCB: self.pluginCB(plugin, option, value)
-
- self.plugin[plugin][option]["value"] = value
- self.save()
-
- def getMetaData(self, section, option):
- """ get all config data for an option """
- return self.config[section][option]
-
- def addPluginConfig(self, name, config, outline=""):
- """adds config options with tuples (name, type, desc, default)"""
- if name not in self.plugin:
- conf = {"desc": name,
- "outline": outline}
- self.plugin[name] = conf
- else:
- conf = self.plugin[name]
- conf["outline"] = outline
-
- for item in config:
- if item[0] in conf:
- conf[item[0]]["type"] = item[1]
- conf[item[0]]["desc"] = item[2]
- else:
- conf[item[0]] = {
- "desc": item[2],
- "type": item[1],
- "value": self.cast(item[1], item[3])
- }
-
- values = [x[0] for x in config] + ["desc", "outline"]
- #delete old values
- for item in conf.keys():
- if item not in values:
- del conf[item]
-
- def deleteConfig(self, name):
- """Removes a plugin config"""
- if name in self.plugin:
- del self.plugin[name]
-
-
- def deleteOldPlugins(self):
- """ remove old plugins from config """
-
- for name in IGNORE:
- if name in self.plugin:
- del self.plugin[name]
-
-
-class Section:
- """provides dictionary like access for configparser"""
-
- def __init__(self, parser, section):
- """Constructor"""
- self.parser = parser
- self.section = section
-
- def __getitem__(self, item):
- """getitem"""
- return self.parser.get(self.section, item)
-
- def __setitem__(self, item, value):
- """setitem"""
- self.parser.set(self.section, item, value)
diff --git a/module/Core.py b/module/Core.py
deleted file mode 100644
index a3156d804..000000000
--- a/module/Core.py
+++ /dev/null
@@ -1,663 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: spoob
- @author: sebnapi
- @author: RaNaN
- @author: mkaay
- @version: v0.4.10
-"""
-CURRENT_VERSION = '0.4.10'
-
-import __builtin__
-
-from getopt import getopt, GetoptError
-import module.common.pylgettext as gettext
-from imp import find_module
-import logging
-import logging.handlers
-import os
-from os import _exit, execl, getcwd, makedirs, remove, sep, walk, chdir, close
-from os.path import exists, join
-import signal
-import subprocess
-import sys
-from sys import argv, executable, exit
-from time import time, sleep
-from traceback import print_exc
-
-from module import InitHomeDir
-from module.plugins.AccountManager import AccountManager
-from module.CaptchaManager import CaptchaManager
-from module.ConfigParser import ConfigParser
-from module.plugins.PluginManager import PluginManager
-from module.PullEvents import PullManager
-from module.network.RequestFactory import RequestFactory
-from module.threads.ServerThread import WebServer
-from module.Scheduler import Scheduler
-from module.common.JsEngine import JsEngine
-from module import remote
-from module.remote.RemoteManager import RemoteManager
-from module.database import DatabaseBackend, FileHandler
-
-from module.utils import freeSpace, formatSize, get_console_encoding
-
-from codecs import getwriter
-
-enc = get_console_encoding(sys.stdout.encoding)
-sys.stdout = getwriter(enc)(sys.stdout, errors="replace")
-
-# TODO List
-# - configurable auth system ldap/mysql
-# - cron job like sheduler
-
-class Core(object):
- """pyLoad Core, one tool to rule them all... (the filehosters) :D"""
-
- def __init__(self):
- self.doDebug = False
- self.running = False
- self.daemon = False
- self.remote = True
- self.arg_links = []
- self.pidfile = "pyload.pid"
- self.deleteLinks = False # will delete links on startup
-
- if len(argv) > 1:
- try:
- options, args = getopt(argv[1:], 'vchdusqp:',
- ["version", "clear", "clean", "help", "debug", "user",
- "setup", "configdir=", "changedir", "daemon",
- "quit", "status", "no-remote","pidfile="])
-
- for option, argument in options:
- if option in ("-v", "--version"):
- print "pyLoad", CURRENT_VERSION
- exit()
- elif option in ("-p", "--pidfile"):
- self.pidfile = argument
- elif option == "--daemon":
- self.daemon = True
- elif option in ("-c", "--clear"):
- self.deleteLinks = True
- elif option in ("-h", "--help"):
- self.print_help()
- exit()
- elif option in ("-d", "--debug"):
- self.doDebug = True
- elif option in ("-u", "--user"):
- from module.setup import Setup
-
- self.config = ConfigParser()
- s = Setup(pypath, self.config)
- s.set_user()
- exit()
- elif option in ("-s", "--setup"):
- from module.setup import Setup
-
- self.config = ConfigParser()
- s = Setup(pypath, self.config)
- s.start()
- exit()
- elif option == "--changedir":
- from module.setup import Setup
-
- self.config = ConfigParser()
- s = Setup(pypath, self.config)
- s.conf_path(True)
- exit()
- elif option in ("-q", "--quit"):
- self.quitInstance()
- exit()
- elif option == "--status":
- pid = self.isAlreadyRunning()
- if self.isAlreadyRunning():
- print pid
- exit(0)
- else:
- print "false"
- exit(1)
- elif option == "--clean":
- self.cleanTree()
- exit()
- elif option == "--no-remote":
- self.remote = False
-
- except GetoptError:
- print 'Unknown Argument(s) "%s"' % " ".join(argv[1:])
- self.print_help()
- exit()
-
- def print_help(self):
- print
- print "pyLoad v%s 2008-2014 the pyLoad Team" % CURRENT_VERSION
- print
- if sys.argv[0].endswith(".py"):
- print "Usage: python pyload.py [options]"
- else:
- print "Usage: pyload [options]"
- print
- print "<Options>"
- print " -v, --version", " " * 10, "Print version to terminal"
- print " -c, --clear", " " * 12, "Delete all saved packages/links"
- #print " -a, --add=<link/list>", " " * 2, "Add the specified links"
- print " -u, --user", " " * 13, "Manages users"
- print " -d, --debug", " " * 12, "Enable debug mode"
- print " -s, --setup", " " * 12, "Run Setup Assistant"
- print " --configdir=<dir>", " " * 6, "Run with <dir> as config directory"
- print " -p, --pidfile=<file>", " " * 3, "Set pidfile to <file>"
- print " --changedir", " " * 12, "Change config dir permanently"
- print " --daemon", " " * 15, "Daemonmize after start"
- print " --no-remote", " " * 12, "Disable remote access (saves RAM)"
- print " --status", " " * 15, "Display pid if running or False"
- print " --clean", " " * 16, "Remove .pyc/.pyo files"
- print " -q, --quit", " " * 13, "Quit running pyLoad instance"
- print " -h, --help", " " * 13, "Display this help screen"
- print
-
- def toggle_pause(self):
- if self.threadManager.pause:
- self.threadManager.pause = False
- return False
- elif not self.threadManager.pause:
- self.threadManager.pause = True
- return True
-
- def quit(self, a, b):
- self.shutdown()
- self.log.info(_("Received Quit signal"))
- _exit(1)
-
- def writePidFile(self):
- self.deletePidFile()
- pid = os.getpid()
- f = open(self.pidfile, "wb")
- f.write(str(pid))
- f.close()
-
- def deletePidFile(self):
- if self.checkPidFile():
- self.log.debug("Deleting old pidfile %s" % self.pidfile)
- os.remove(self.pidfile)
-
- def checkPidFile(self):
- """ return pid as int or 0"""
- if os.path.isfile(self.pidfile):
- f = open(self.pidfile, "rb")
- pid = f.read().strip()
- f.close()
- if pid:
- pid = int(pid)
- return pid
-
- return 0
-
- def isAlreadyRunning(self):
- pid = self.checkPidFile()
- if not pid or os.name == "nt": return False
- try:
- os.kill(pid, 0) # 0 - default signal (does nothing)
- except:
- return 0
-
- return pid
-
- def quitInstance(self):
- if os.name == "nt":
- print "Not supported on windows."
- return
-
- pid = self.isAlreadyRunning()
- if not pid:
- print "No pyLoad running."
- return
-
- try:
- os.kill(pid, 3) #SIGUIT
-
- t = time()
- print "waiting for pyLoad to quit"
-
- while exists(self.pidfile) and t + 10 > time():
- sleep(0.25)
-
- if not exists(self.pidfile):
- print "pyLoad successfully stopped"
- else:
- os.kill(pid, 9) #SIGKILL
- print "pyLoad did not respond"
- print "Kill signal was send to process with id %s" % pid
-
- except:
- print "Error quitting pyLoad"
-
-
- def cleanTree(self):
- for path, dirs, files in walk(self.path("")):
- for f in files:
- if not f.endswith(".pyo") and not f.endswith(".pyc"):
- continue
-
- if "_25" in f or "_26" in f or "_27" in f:
- continue
-
- print join(path, f)
- remove(join(path, f))
-
- def start(self, rpc=True, web=True):
- """ starts the fun :D """
-
- self.version = CURRENT_VERSION
-
- if not exists("pyload.conf"):
- from module.setup import Setup
-
- print "This is your first start, running configuration assistent now."
- self.config = ConfigParser()
- s = Setup(pypath, self.config)
- res = False
- try:
- res = s.start()
- except SystemExit:
- pass
- except KeyboardInterrupt:
- print "\nSetup interrupted"
- except:
- res = False
- print_exc()
- print "Setup failed"
- if not res:
- remove("pyload.conf")
-
- exit()
-
- try: signal.signal(signal.SIGQUIT, self.quit)
- except: pass
-
- self.config = ConfigParser()
-
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("pyLoad", self.path("locale"),
- languages=[self.config['general']['language'], "en"], fallback=True)
- translation.install(True)
-
- self.debug = self.doDebug or self.config['general']['debug_mode']
- self.remote &= self.config['remote']['activated']
-
- pid = self.isAlreadyRunning()
- if pid:
- print _("pyLoad already running with pid %s") % pid
- exit()
-
- if os.name != "nt" and self.config["general"]["renice"]:
- os.system("renice %d %d" % (self.config["general"]["renice"], os.getpid()))
-
- if self.config["permission"]["change_group"]:
- if os.name != "nt":
- try:
- from grp import getgrnam
-
- group = getgrnam(self.config["permission"]["group"])
- os.setgid(group[2])
- except Exception, e:
- print _("Failed changing group: %s") % e
-
- if self.config["permission"]["change_user"]:
- if os.name != "nt":
- try:
- from pwd import getpwnam
-
- user = getpwnam(self.config["permission"]["user"])
- os.setuid(user[2])
- except Exception, e:
- print _("Failed changing user: %s") % e
-
- self.check_file(self.config['log']['log_folder'], _("folder for logs"), True)
-
- if self.debug:
- self.init_logger(logging.DEBUG) # logging level
- else:
- self.init_logger(logging.INFO) # logging level
-
- self.do_kill = False
- self.do_restart = False
- self.shuttedDown = False
-
- self.log.info(_("Starting") + " pyLoad %s" % CURRENT_VERSION)
- self.log.info(_("Using home directory: %s") % getcwd())
-
- self.writePidFile()
-
- #@TODO refractor
-
- remote.activated = self.remote
- self.log.debug("Remote activated: %s" % self.remote)
-
- self.check_install("Crypto", _("pycrypto to decode container files"))
- #img = self.check_install("Image", _("Python Image Library (PIL) for captcha reading"))
- #self.check_install("pycurl", _("pycurl to download any files"), True, True)
- self.check_file("tmp", _("folder for temporary files"), True)
- #tesser = self.check_install("tesseract", _("tesseract for captcha reading"), False) if os.name != "nt" else True
-
- self.captcha = True # checks seems to fail, although tesseract is available
-
- self.check_file(self.config['general']['download_folder'], _("folder for downloads"), True)
-
- if self.config['ssl']['activated']:
- self.check_install("OpenSSL", _("OpenSSL for secure connection"))
-
- self.setupDB()
- if self.config.oldRemoteData:
- self.log.info(_("Moving old user config to DB"))
- self.db.addUser(self.config.oldRemoteData["username"], self.config.oldRemoteData["password"])
-
- self.log.info(_("Please check your logindata with ./pyload.py -u"))
-
- if self.deleteLinks:
- self.log.info(_("All links removed"))
- self.db.purgeLinks()
-
- self.requestFactory = RequestFactory(self)
- __builtin__.pyreq = self.requestFactory
-
- self.lastClientConnected = 0
-
- # later imported because they would trigger api import, and remote value not set correctly
- from module import Api
- from module.HookManager import HookManager
- from module.ThreadManager import ThreadManager
-
- if Api.activated != self.remote:
- self.log.warning("Import error: API remote status not correct.")
-
- self.api = Api.Api(self)
-
- self.scheduler = Scheduler(self)
-
- #hell yeah, so many important managers :D
- self.pluginManager = PluginManager(self)
- self.pullManager = PullManager(self)
- self.accountManager = AccountManager(self)
- self.threadManager = ThreadManager(self)
- self.captchaManager = CaptchaManager(self)
- self.hookManager = HookManager(self)
- self.remoteManager = RemoteManager(self)
-
- self.js = JsEngine()
-
- self.log.info(_("Downloadtime: %s") % self.api.isTimeDownload())
-
- if rpc:
- self.remoteManager.startBackends()
-
- if web:
- self.init_webserver()
-
- spaceLeft = freeSpace(self.config["general"]["download_folder"])
-
- self.log.info(_("Free space: %s") % formatSize(spaceLeft))
-
- self.config.save() #save so config files gets filled
-
- link_file = join(pypath, "links.txt")
-
- if exists(link_file):
- f = open(link_file, "rb")
- if f.read().strip():
- self.api.addPackage("links.txt", [link_file], 1)
- f.close()
-
- link_file = "links.txt"
- if exists(link_file):
- f = open(link_file, "rb")
- if f.read().strip():
- self.api.addPackage("links.txt", [link_file], 1)
- f.close()
-
- #self.scheduler.addJob(0, self.accountManager.getAccountInfos)
- self.log.info(_("Activating Accounts..."))
- self.accountManager.getAccountInfos()
-
- self.threadManager.pause = False
- self.running = True
-
- self.log.info(_("Activating Plugins..."))
- self.hookManager.coreReady()
-
- self.log.info(_("pyLoad is up and running"))
-
- #test api
-# from module.common.APIExerciser import startApiExerciser
-# startApiExerciser(self, 3)
-
- #some memory stats
-# from guppy import hpy
-# hp=hpy()
-# import objgraph
-# objgraph.show_most_common_types(limit=20)
-# import memdebug
-# memdebug.start(8002)
-
- locals().clear()
-
- while True:
- sleep(2)
- if self.do_restart:
- self.log.info(_("restarting pyLoad"))
- self.restart()
- if self.do_kill:
- self.shutdown()
- self.log.info(_("pyLoad quits"))
- self.removeLogger()
- _exit(0) #@TODO thrift blocks shutdown
-
- self.threadManager.work()
- self.scheduler.work()
-
- def setupDB(self):
- self.db = DatabaseBackend(self) # the backend
- self.db.setup()
-
- self.files = FileHandler(self)
- self.db.manager = self.files #ugly?
-
- def init_webserver(self):
- if self.config['webinterface']['activated']:
- self.webserver = WebServer(self)
- self.webserver.start()
-
- def init_logger(self, level):
- console = logging.StreamHandler(sys.stdout)
- frm = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", "%d.%m.%Y %H:%M:%S")
- console.setFormatter(frm)
- self.log = logging.getLogger("log") # settable in config
-
- if self.config['log']['file_log']:
- if self.config['log']['log_rotate']:
- file_handler = logging.handlers.RotatingFileHandler(join(self.config['log']['log_folder'], 'log.txt'),
- maxBytes=self.config['log']['log_size'] * 1024,
- backupCount=int(self.config['log']['log_count']),
- encoding="utf8")
- else:
- file_handler = logging.FileHandler(join(self.config['log']['log_folder'], 'log.txt'), encoding="utf8")
-
- file_handler.setFormatter(frm)
- self.log.addHandler(file_handler)
-
- self.log.addHandler(console) #if console logging
- self.log.setLevel(level)
-
- def removeLogger(self):
- for h in list(self.log.handlers):
- self.log.removeHandler(h)
- h.close()
-
- def check_install(self, check_name, legend, python=True, essential=False):
- """check wether needed tools are installed"""
- try:
- if python:
- find_module(check_name)
- else:
- pipe = subprocess.PIPE
- subprocess.Popen(check_name, stdout=pipe, stderr=pipe)
-
- return True
- except:
- if essential:
- self.log.info(_("Install %s") % legend)
- exit()
-
- return False
-
- def check_file(self, check_names, description="", folder=False, empty=True, essential=False, quiet=False):
- """check wether needed files exists"""
- tmp_names = []
- if not type(check_names) == list:
- tmp_names.append(check_names)
- else:
- tmp_names.extend(check_names)
- file_created = True
- file_exists = True
- for tmp_name in tmp_names:
- if not exists(tmp_name):
- file_exists = False
- if empty:
- try:
- if folder:
- tmp_name = tmp_name.replace("/", sep)
- makedirs(tmp_name)
- else:
- open(tmp_name, "w")
- except:
- file_created = False
- else:
- file_created = False
-
- if not file_exists and not quiet:
- if file_created:
- #self.log.info( _("%s created") % description )
- pass
- else:
- if not empty:
- self.log.warning(
- _("could not find %(desc)s: %(name)s") % {"desc": description, "name": tmp_name})
- else:
- print _("could not create %(desc)s: %(name)s") % {"desc": description, "name": tmp_name}
- if essential:
- exit()
-
- def isClientConnected(self):
- return (self.lastClientConnected + 30) > time()
-
- def restart(self):
- self.shutdown()
- chdir(owd)
- # close some open fds
- for i in range(3, 50):
- try:
- close(i)
- except :
- pass
-
- execl(executable, executable, *sys.argv)
- _exit(0)
-
- def shutdown(self):
- self.log.info(_("shutting down..."))
- try:
- if self.config['webinterface']['activated'] and hasattr(self, "webserver"):
- self.webserver.quit()
-
- for thread in self.threadManager.threads:
- thread.put("quit")
- pyfiles = self.files.cache.values()
-
- for pyfile in pyfiles:
- pyfile.abortDownload()
-
- self.hookManager.coreExiting()
-
- except:
- if self.debug:
- print_exc()
- self.log.info(_("error while shutting down"))
-
- finally:
- self.files.syncSave()
- self.shuttedDown = True
-
- self.deletePidFile()
-
-
- def path(self, *args):
- return join(pypath, *args)
-
-
-def deamon():
- try:
- pid = os.fork()
- if pid > 0:
- sys.exit(0)
- except OSError, e:
- print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
- sys.exit(1)
-
- # decouple from parent environment
- os.setsid()
- os.umask(0)
-
- # do second fork
- try:
- pid = os.fork()
- if pid > 0:
- # exit from second parent, print eventual PID before
- print "Daemon PID %d" % pid
- sys.exit(0)
- except OSError, e:
- print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
- sys.exit(1)
-
- # Iterate through and close some file descriptors.
- for fd in range(0, 3):
- try:
- os.close(fd)
- except OSError: # ERROR, fd wasn't open to begin with (ignored)
- pass
-
- os.open(os.devnull, os.O_RDWR) # standard input (0)
- os.dup2(0, 1) # standard output (1)
- os.dup2(0, 2)
-
- pyload_core = Core()
- pyload_core.start()
-
-
-def main():
- if "--daemon" in sys.argv:
- deamon()
- else:
- pyload_core = Core()
- try:
- pyload_core.start()
- except KeyboardInterrupt:
- pyload_core.shutdown()
- pyload_core.log.info(_("killed pyLoad from Terminal"))
- pyload_core.removeLogger()
- _exit(1)
-
-# And so it begins...
-if __name__ == "__main__":
- main()
diff --git a/module/HookManager.py b/module/HookManager.py
deleted file mode 100644
index 6fd1162a7..000000000
--- a/module/HookManager.py
+++ /dev/null
@@ -1,305 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN, mkaay
- @interface-version: 0.1
-"""
-import __builtin__
-
-import traceback
-from thread import start_new_thread
-from threading import RLock
-
-from types import MethodType
-
-from module.threads.PluginThread import HookThread
-from module.plugins.PluginManager import literal_eval
-from utils import lock
-
-class HookManager:
- """Manages hooks, delegates and handles Events.
-
- Every plugin can define events, \
- but some very usefull events are called by the Core.
- Contrary to overwriting hook methods you can use event listener,
- which provides additional entry point in the control flow.
- Only do very short tasks or use threads.
-
- **Known Events:**
- Most hook methods exists as events. These are the additional known events.
-
- ===================== ============== ==================================
- Name Arguments Description
- ===================== ============== ==================================
- downloadPreparing fid A download was just queued and will be prepared now.
- downloadStarts fid A plugin will immediately starts the download afterwards.
- linksAdded links, pid Someone just added links, you are able to modify the links.
- allDownloadsProcessed Every link was handled, pyload would idle afterwards.
- allDownloadsFinished Every download in queue is finished.
- unrarFinished folder, fname An Unrar job finished
- configChanged The config was changed via the api.
- pluginConfigChanged The plugin config changed, due to api or internal process.
- ===================== ============== ==================================
-
- | Notes:
- | allDownloadsProcessed is *always* called before allDownloadsFinished.
- | configChanged is *always* called before pluginConfigChanged.
-
-
- """
-
- def __init__(self, core):
- self.core = core
- self.config = self.core.config
-
- __builtin__.hookManager = self #needed to let hooks register themself
-
- self.log = self.core.log
- self.plugins = []
- self.pluginMap = {}
- self.methods = {} #dict of names and list of methods usable by rpc
-
- self.events = {} # contains events
-
- #registering callback for config event
- self.config.pluginCB = MethodType(self.dispatchEvent, "pluginConfigChanged", basestring)
-
- self.addEvent("pluginConfigChanged", self.manageHooks)
-
- self.lock = RLock()
- self.createIndex()
-
- def try_catch(func):
- def new(*args):
- try:
- return func(*args)
- except Exception, e:
- args[0].log.error(_("Error executing hooks: %s") % str(e))
- if args[0].core.debug:
- traceback.print_exc()
-
- return new
-
-
- def addRPC(self, plugin, func, doc):
- plugin = plugin.rpartition(".")[2]
- doc = doc.strip() if doc else ""
-
- if plugin in self.methods:
- self.methods[plugin][func] = doc
- else:
- self.methods[plugin] = {func: doc}
-
- def callRPC(self, plugin, func, args, parse):
- if not args: args = tuple()
- if parse:
- args = tuple([literal_eval(x) for x in args])
-
- plugin = self.pluginMap[plugin]
- f = getattr(plugin, func)
- return f(*args)
-
-
- def createIndex(self):
- plugins = []
-
- active = []
- deactive = []
-
- for pluginname in self.core.pluginManager.hookPlugins:
- try:
- #hookClass = getattr(plugin, plugin.__name__)
-
- if self.config.getPlugin(pluginname, "activated"):
- pluginClass = self.core.pluginManager.loadClass("hooks", pluginname)
- if not pluginClass: continue
-
- plugin = pluginClass(self.core, self)
- plugins.append(plugin)
- self.pluginMap[pluginClass.__name__] = plugin
- if plugin.isActivated():
- active.append(pluginClass.__name__)
- else:
- deactive.append(pluginname)
-
-
- except:
- self.log.warning(_("Failed activating %(name)s") % {"name": pluginname})
- if self.core.debug:
- traceback.print_exc()
-
- self.log.info(_("Activated plugins: %s") % ", ".join(sorted(active)))
- self.log.info(_("Deactivate plugins: %s") % ", ".join(sorted(deactive)))
-
- self.plugins = plugins
-
- def manageHooks(self, plugin, name, value):
- if name == "activated" and value:
- self.activateHook(plugin)
- elif name == "activated" and not value:
- self.deactivateHook(plugin)
-
- def activateHook(self, plugin):
-
- #check if already loaded
- for inst in self.plugins:
- if inst.__name__ == plugin:
- return
-
- pluginClass = self.core.pluginManager.loadClass("hooks", plugin)
-
- if not pluginClass: return
-
- self.log.debug("Plugin loaded: %s" % plugin)
-
- plugin = pluginClass(self.core, self)
- self.plugins.append(plugin)
- self.pluginMap[pluginClass.__name__] = plugin
-
- # call core Ready
- start_new_thread(plugin.coreReady, tuple())
-
- def deactivateHook(self, plugin):
-
- hook = None
- for inst in self.plugins:
- if inst.__name__ == plugin:
- hook = inst
-
- if not hook: return
-
- self.log.debug("Plugin unloaded: %s" % plugin)
-
- hook.unload()
-
- #remove periodic call
- self.log.debug("Removed callback %s" % self.core.scheduler.removeJob(hook.cb))
- self.plugins.remove(hook)
- del self.pluginMap[hook.__name__]
-
-
- @try_catch
- def coreReady(self):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.coreReady()
-
- self.dispatchEvent("coreReady")
-
- @try_catch
- def coreExiting(self):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.coreExiting()
-
- self.dispatchEvent("coreExiting")
-
- @lock
- def downloadPreparing(self, pyfile):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.downloadPreparing(pyfile)
-
- self.dispatchEvent("downloadPreparing", pyfile)
-
- @lock
- def downloadFinished(self, pyfile):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.downloadFinished(pyfile)
-
- self.dispatchEvent("downloadFinished", pyfile)
-
- @lock
- @try_catch
- def downloadFailed(self, pyfile):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.downloadFailed(pyfile)
-
- self.dispatchEvent("downloadFailed", pyfile)
-
- @lock
- def packageFinished(self, package):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.packageFinished(package)
-
- self.dispatchEvent("packageFinished", package)
-
- @lock
- def beforeReconnecting(self, ip):
- for plugin in self.plugins:
- plugin.beforeReconnecting(ip)
-
- self.dispatchEvent("beforeReconnecting", ip)
-
- @lock
- def afterReconnecting(self, ip):
- for plugin in self.plugins:
- if plugin.isActivated():
- plugin.afterReconnecting(ip)
-
- self.dispatchEvent("afterReconnecting", ip)
-
- def startThread(self, function, *args, **kwargs):
- t = HookThread(self.core.threadManager, function, args, kwargs)
-
- def activePlugins(self):
- """ returns all active plugins """
- return [x for x in self.plugins if x.isActivated()]
-
- def getAllInfo(self):
- """returns info stored by hook plugins"""
- info = {}
- for name, plugin in self.pluginMap.iteritems():
- if plugin.info:
- #copy and convert so str
- info[name] = dict([(x, str(y) if not isinstance(y, basestring) else y) for x, y in plugin.info.iteritems()])
- return info
-
-
- def getInfo(self, plugin):
- info = {}
- if plugin in self.pluginMap and self.pluginMap[plugin].info:
- info = dict([(x, str(y) if not isinstance(y, basestring) else y)
- for x, y in self.pluginMap[plugin].info.iteritems()])
-
- return info
-
- def addEvent(self, event, func):
- """Adds an event listener for event name"""
- if event in self.events:
- self.events[event].append(func)
- else:
- self.events[event] = [func]
-
- def removeEvent(self, event, func):
- """removes previously added event listener"""
- if event in self.events:
- self.events[event].remove(func)
-
- def dispatchEvent(self, event, *args):
- """dispatches event with args"""
- if event in self.events:
- for f in self.events[event]:
- try:
- f(*args)
- except Exception, e:
- self.log.warning("Error calling event handler %s: %s, %s, %s"
- % (event, f, args, str(e)))
- if self.core.debug:
- traceback.print_exc()
diff --git a/module/InitHomeDir.py b/module/InitHomeDir.py
deleted file mode 100644
index b8ea29180..000000000
--- a/module/InitHomeDir.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-
- This modules inits working directories and global variables, pydir and homedir
-"""
-
-from os import makedirs, path, chdir
-from os.path import join
-import sys
-from sys import argv, platform
-
-import __builtin__
-
-__builtin__.owd = path.abspath("") # original working directory
-__builtin__.pypath = path.abspath(path.join(__file__, "..", ".."))
-
-sys.path.append(join(pypath, "module", "lib"))
-
-homedir = ""
-
-if platform == 'nt':
- homedir = path.expanduser("~")
- if homedir == "~":
- import ctypes
-
- CSIDL_APPDATA = 26
- _SHGetFolderPath = ctypes.windll.shell32.SHGetFolderPathW
- _SHGetFolderPath.argtypes = [ctypes.wintypes.HWND,
- ctypes.c_int,
- ctypes.wintypes.HANDLE,
- ctypes.wintypes.DWORD, ctypes.wintypes.LPCWSTR]
-
- path_buf = ctypes.wintypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
- result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf)
- homedir = path_buf.value
-else:
- homedir = path.expanduser("~")
-
-__builtin__.homedir = homedir
-
-args = " ".join(argv[1:])
-
-# dirty method to set configdir from commandline arguments
-if "--configdir=" in args:
- for aa in argv:
- if aa.startswith("--configdir="):
- configdir = aa.replace("--configdir=", "", 1).strip()
-elif path.exists(path.join(pypath, "module", "config", "configdir")):
- f = open(path.join(pypath, "module", "config", "configdir"), "rb")
- c = f.read().strip()
- f.close()
- configdir = path.join(pypath, c)
-else:
- if platform in ("posix", "linux2"):
- configdir = path.join(homedir, ".pyload")
- else:
- configdir = path.join(homedir, "pyload")
-
-if not path.exists(configdir):
- makedirs(configdir, 0700)
-
-__builtin__.configdir = configdir
-chdir(configdir)
-
-#print "Using %s as working directory." % configdir
diff --git a/module/PullEvents.py b/module/PullEvents.py
deleted file mode 100644
index 3835a34ac..000000000
--- a/module/PullEvents.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: mkaay
-"""
-
-from time import time
-from module.utils import uniqify
-
-class PullManager:
- def __init__(self, core):
- self.core = core
- self.clients = []
-
- def newClient(self, uuid):
- self.clients.append(Client(uuid))
-
- def clean(self):
- for n, client in enumerate(self.clients):
- if client.lastActive + 30 < time():
- del self.clients[n]
-
- def getEvents(self, uuid):
- events = []
- validUuid = False
- for client in self.clients:
- if client.uuid == uuid:
- client.lastActive = time()
- validUuid = True
- while client.newEvents():
- events.append(client.popEvent().toList())
- break
- if not validUuid:
- self.newClient(uuid)
- events = [ReloadAllEvent("queue").toList(), ReloadAllEvent("collector").toList()]
- return uniqify(events)
-
- def addEvent(self, event):
- for client in self.clients:
- client.addEvent(event)
-
-class Client:
- def __init__(self, uuid):
- self.uuid = uuid
- self.lastActive = time()
- self.events = []
-
- def newEvents(self):
- return len(self.events) > 0
-
- def popEvent(self):
- if not len(self.events):
- return None
- return self.events.pop(0)
-
- def addEvent(self, event):
- self.events.append(event)
-
-class UpdateEvent:
- def __init__(self, itype, iid, destination):
- assert itype == "pack" or itype == "file"
- assert destination == "queue" or destination == "collector"
- self.type = itype
- self.id = iid
- self.destination = destination
-
- def toList(self):
- return ["update", self.destination, self.type, self.id]
-
-class RemoveEvent:
- def __init__(self, itype, iid, destination):
- assert itype == "pack" or itype == "file"
- assert destination == "queue" or destination == "collector"
- self.type = itype
- self.id = iid
- self.destination = destination
-
- def toList(self):
- return ["remove", self.destination, self.type, self.id]
-
-class InsertEvent:
- def __init__(self, itype, iid, after, destination):
- assert itype == "pack" or itype == "file"
- assert destination == "queue" or destination == "collector"
- self.type = itype
- self.id = iid
- self.after = after
- self.destination = destination
-
- def toList(self):
- return ["insert", self.destination, self.type, self.id, self.after]
-
-class ReloadAllEvent:
- def __init__(self, destination):
- assert destination == "queue" or destination == "collector"
- self.destination = destination
-
- def toList(self):
- return ["reload", self.destination]
-
-class AccountUpdateEvent:
- def toList(self):
- return ["account"]
-
-class ConfigUpdateEvent:
- def toList(self):
- return ["config"]
diff --git a/module/PyFile.py b/module/PyFile.py
deleted file mode 100644
index 69ccc4baf..000000000
--- a/module/PyFile.py
+++ /dev/null
@@ -1,284 +0,0 @@
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
- @author: mkaay
-"""
-
-from module.PullEvents import UpdateEvent
-from module.utils import formatSize, lock
-
-from time import sleep, time
-
-from threading import RLock
-
-statusMap = {
- "finished": 0,
- "offline": 1,
- "online": 2,
- "queued": 3,
- "skipped": 4,
- "waiting": 5,
- "temp. offline": 6,
- "starting": 7,
- "failed": 8,
- "aborted": 9,
- "decrypting": 10,
- "custom": 11,
- "downloading": 12,
- "processing": 13,
- "unknown": 14,
-}
-
-
-def setSize(self, value):
- self._size = int(value)
-
-class PyFile(object):
- """
- Represents a file object at runtime
- """
- __slots__ = ("m", "id", "url", "name", "size", "_size", "status", "pluginname", "packageid",
- "error", "order", "lock", "plugin", "waitUntil", "active", "abort", "statusname",
- "reconnected", "progress", "maxprogress", "pluginmodule", "pluginclass")
-
- def __init__(self, manager, id, url, name, size, status, error, pluginname, package, order):
- self.m = manager
-
- self.id = int(id)
- self.url = url
- self.name = name
- self.size = size
- self.status = status
- self.pluginname = pluginname
- self.packageid = package #should not be used, use package() instead
- self.error = error
- self.order = order
- # database information ends here
-
- self.lock = RLock()
-
- self.plugin = None
- #self.download = None
-
- self.waitUntil = 0 # time() + time to wait
-
- # status attributes
- self.active = False #obsolete?
- self.abort = False
- self.reconnected = False
-
- self.statusname = None
-
- self.progress = 0
- self.maxprogress = 100
-
- self.m.cache[int(id)] = self
-
-
- # will convert all sizes to ints
- size = property(lambda self: self._size, setSize)
-
- def __repr__(self):
- return "PyFile %s: %s@%s" % (self.id, self.name, self.pluginname)
-
- @lock
- def initPlugin(self):
- """ inits plugin instance """
- if not self.plugin:
- self.pluginmodule = self.m.core.pluginManager.getPlugin(self.pluginname)
- self.pluginclass = getattr(self.pluginmodule, self.m.core.pluginManager.getPluginName(self.pluginname))
- self.plugin = self.pluginclass(self)
-
- @lock
- def hasPlugin(self):
- """Thread safe way to determine this file has initialized plugin attribute
-
- :return:
- """
- return hasattr(self, "plugin") and self.plugin
-
- def package(self):
- """ return package instance"""
- return self.m.getPackage(self.packageid)
-
- def setStatus(self, status):
- self.status = statusMap[status]
- self.sync() #@TODO needed aslong no better job approving exists
-
- def setCustomStatus(self, msg, status="processing"):
- self.statusname = msg
- self.setStatus(status)
-
- def getStatusName(self):
- if self.status not in (13, 14) or not self.statusname:
- return self.m.statusMsg[self.status]
- else:
- return self.statusname
-
- def hasStatus(self, status):
- return statusMap[status] == self.status
-
- def sync(self):
- """sync PyFile instance with database"""
- self.m.updateLink(self)
-
- @lock
- def release(self):
- """sync and remove from cache"""
- # file has valid package
- if self.packageid > 0:
- self.sync()
-
- if hasattr(self, "plugin") and self.plugin:
- self.plugin.clean()
- del self.plugin
-
- self.m.releaseLink(self.id)
-
- def delete(self):
- """delete pyfile from database"""
- self.m.deleteLink(self.id)
-
- def toDict(self):
- """return dict with all information for interface"""
- return self.toDbDict()
-
- def toDbDict(self):
- """return data as dict for databse
-
- format:
-
- {
- id: {'url': url, 'name': name ... }
- }
-
- """
- return {
- self.id: {
- 'id': self.id,
- 'url': self.url,
- 'name': self.name,
- 'plugin': self.pluginname,
- 'size': self.getSize(),
- 'format_size': self.formatSize(),
- 'status': self.status,
- 'statusmsg': self.getStatusName(),
- 'package': self.packageid,
- 'error': self.error,
- 'order': self.order
- }
- }
-
- def abortDownload(self):
- """abort pyfile if possible"""
- while self.id in self.m.core.threadManager.processingIds():
- self.abort = True
- if self.plugin and self.plugin.req:
- self.plugin.req.abortDownloads()
- sleep(0.1)
-
- self.abort = False
- if self.hasPlugin() and self.plugin.req:
- self.plugin.req.abortDownloads()
-
- self.release()
-
- def finishIfDone(self):
- """set status to finish and release file if every thread is finished with it"""
-
- if self.id in self.m.core.threadManager.processingIds():
- return False
-
- self.setStatus("finished")
- self.release()
- self.m.checkAllLinksFinished()
- return True
-
- def checkIfProcessed(self):
- self.m.checkAllLinksProcessed(self.id)
-
- def formatWait(self):
- """ formats and return wait time in humanreadable format """
- seconds = self.waitUntil - time()
-
- if seconds < 0: return "00:00:00"
-
- hours, seconds = divmod(seconds, 3600)
- minutes, seconds = divmod(seconds, 60)
- return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
-
- def formatSize(self):
- """ formats size to readable format """
- return formatSize(self.getSize())
-
- def formatETA(self):
- """ formats eta to readable format """
- seconds = self.getETA()
-
- if seconds < 0: return "00:00:00"
-
- hours, seconds = divmod(seconds, 3600)
- minutes, seconds = divmod(seconds, 60)
- return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
-
- def getSpeed(self):
- """ calculates speed """
- try:
- return self.plugin.req.speed
- except:
- return 0
-
- def getETA(self):
- """ gets established time of arrival"""
- try:
- return self.getBytesLeft() / self.getSpeed()
- except:
- return 0
-
- def getBytesLeft(self):
- """ gets bytes left """
- try:
- return self.getSize() - self.plugin.req.arrived
- except:
- return 0
-
- def getPercent(self):
- """ get % of download """
- if self.status == 12:
- try:
- return self.plugin.req.percent
- except:
- return 0
- else:
- return self.progress
-
- def getSize(self):
- """ get size of download """
- try:
- if self.plugin.req.size:
- return self.plugin.req.size
- else:
- return self.size
- except:
- return self.size
-
- def notifyChange(self):
- e = UpdateEvent("file", self.id, "collector" if not self.package().queue else "queue")
- self.m.core.pullManager.addEvent(e)
-
- def setProgress(self, value):
- if not value == self.progress:
- self.progress = value
- self.notifyChange()
diff --git a/module/PyPackage.py b/module/PyPackage.py
deleted file mode 100644
index 7e6962d43..000000000
--- a/module/PyPackage.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
- @author: mkaay
-"""
-
-from module.PullEvents import UpdateEvent
-from module.utils import safe_filename
-
-class PyPackage:
- """
- Represents a package object at runtime
- """
- def __init__(self, manager, id, name, folder, site, password, queue, order):
- self.m = manager
- self.m.packageCache[int(id)] = self
-
- self.id = int(id)
- self.name = name
- self._folder = folder
- self.site = site
- self.password = password
- self.queue = queue
- self.order = order
- self.setFinished = False
-
- @property
- def folder(self):
- return safe_filename(self._folder)
-
- def toDict(self):
- """ Returns a dictionary representation of the data.
-
- :return: dict: {id: { attr: value }}
- """
- return {
- self.id: {
- 'id': self.id,
- 'name': self.name,
- 'folder': self.folder,
- 'site': self.site,
- 'password': self.password,
- 'queue': self.queue,
- 'order': self.order,
- 'links': {}
- }
- }
-
- def getChildren(self):
- """get information about contained links"""
- return self.m.getPackageData(self.id)["links"]
-
- def sync(self):
- """sync with db"""
- self.m.updatePackage(self)
-
- def release(self):
- """sync and delete from cache"""
- self.sync()
- self.m.releasePackage(self.id)
-
- def delete(self):
- self.m.deletePackage(self.id)
-
- def notifyChange(self):
- e = UpdateEvent("pack", self.id, "collector" if not self.queue else "queue")
- self.m.core.pullManager.addEvent(e)
diff --git a/module/ThreadManager.py b/module/ThreadManager.py
deleted file mode 100644
index bdc6ca6e2..000000000
--- a/module/ThreadManager.py
+++ /dev/null
@@ -1,317 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-from os.path import exists, join
-import re
-from subprocess import Popen
-from threading import Event, Lock
-from time import sleep, time
-from traceback import print_exc
-from random import choice
-
-import pycurl
-
-from module.threads import PluginThread
-from module.PyFile import PyFile
-from module.network.RequestFactory import getURL
-from module.utils import freeSpace, lock
-
-
-class ThreadManager:
- """manages the download threads, assign jobs, reconnect etc"""
-
-
- def __init__(self, core):
- """Constructor"""
- self.core = core
- self.log = core.log
-
- self.threads = [] # thread list
- self.localThreads = [] #hook+decrypter threads
-
- self.pause = True
-
- self.reconnecting = Event()
- self.reconnecting.clear()
- self.downloaded = 0 #number of files downloaded since last cleanup
-
- self.lock = Lock()
-
- # some operations require to fetch url info from hoster, so we caching them so it wont be done twice
- # contains a timestamp and will be purged after timeout
- self.infoCache = {}
-
- # pool of ids for online check
- self.resultIDs = 0
-
- # threads which are fetching hoster results
- self.infoResults = {}
- #timeout for cache purge
- self.timestamp = 0
-
- pycurl.global_init(pycurl.GLOBAL_DEFAULT)
-
- for i in range(0, self.core.config.get("download", "max_downloads")):
- self.createThread()
-
-
- def createThread(self):
- """create a download thread"""
-
- thread = PluginThread.DownloadThread(self)
- self.threads.append(thread)
-
- def createInfoThread(self, data, pid):
- """
- start a thread whichs fetches online status and other infos
- data = [ .. () .. ]
- """
- self.timestamp = time() + 5 * 60
-
- PluginThread.InfoThread(self, data, pid)
-
- @lock
- def createResultThread(self, data, add=False):
- """ creates a thread to fetch online status, returns result id """
- self.timestamp = time() + 5 * 60
-
- rid = self.resultIDs
- self.resultIDs += 1
-
- PluginThread.InfoThread(self, data, rid=rid, add=add)
-
- return rid
-
-
- @lock
- def getInfoResult(self, rid):
- """returns result and clears it"""
- self.timestamp = time() + 5 * 60
-
- if rid in self.infoResults:
- data = self.infoResults[rid]
- self.infoResults[rid] = {}
- return data
- else:
- return {}
-
- @lock
- def setInfoResults(self, rid, result):
- self.infoResults[rid].update(result)
-
- def getActiveFiles(self):
- active = [x.active for x in self.threads if x.active and isinstance(x.active, PyFile)]
-
- for t in self.localThreads:
- active.extend(t.getActiveFiles())
-
- return active
-
- def processingIds(self):
- """get a id list of all pyfiles processed"""
- return [x.id for x in self.getActiveFiles()]
-
-
- def work(self):
- """run all task which have to be done (this is for repetivive call by core)"""
- try:
- self.tryReconnect()
- except Exception, e:
- self.log.error(_("Reconnect Failed: %s") % str(e) )
- self.reconnecting.clear()
- if self.core.debug:
- print_exc()
- self.checkThreadCount()
-
- try:
- self.assignJob()
- except Exception, e:
- self.log.warning("Assign job error", e)
- if self.core.debug:
- print_exc()
-
- sleep(0.5)
- self.assignJob()
- #it may be failed non critical so we try it again
-
- if (self.infoCache or self.infoResults) and self.timestamp < time():
- self.infoCache.clear()
- self.infoResults.clear()
- self.log.debug("Cleared Result cache")
-
- #--------------------------------------------------------------------------
- def tryReconnect(self):
- """checks if reconnect needed"""
-
- if not (self.core.config["reconnect"]["activated"] and self.core.api.isTimeReconnect()):
- return False
-
- active = [x.active.plugin.wantReconnect and x.active.plugin.waiting for x in self.threads if x.active]
-
- if not (0 < active.count(True) == len(active)):
- return False
-
- if not exists(self.core.config['reconnect']['method']):
- if exists(join(pypath, self.core.config['reconnect']['method'])):
- self.core.config['reconnect']['method'] = join(pypath, self.core.config['reconnect']['method'])
- else:
- self.core.config["reconnect"]["activated"] = False
- self.log.warning(_("Reconnect script not found!"))
- return
-
- self.reconnecting.set()
-
- #Do reconnect
- self.log.info(_("Starting reconnect"))
-
- while [x.active.plugin.waiting for x in self.threads if x.active].count(True) != 0:
- sleep(0.25)
-
- ip = self.getIP()
-
- self.core.hookManager.beforeReconnecting(ip)
-
- self.log.debug("Old IP: %s" % ip)
-
- try:
- reconn = Popen(self.core.config['reconnect']['method'], bufsize=-1, shell=True)#, stdout=subprocess.PIPE)
- except:
- self.log.warning(_("Failed executing reconnect script!"))
- self.core.config["reconnect"]["activated"] = False
- self.reconnecting.clear()
- if self.core.debug:
- print_exc()
- return
-
- reconn.wait()
- sleep(1)
- ip = self.getIP()
- self.core.hookManager.afterReconnecting(ip)
-
- self.log.info(_("Reconnected, new IP: %s") % ip)
-
- self.reconnecting.clear()
-
- def getIP(self):
- """retrieve current ip"""
- services = [("http://automation.whatismyip.com/n09230945.asp", "(\S+)"),
- ("http://checkip.dyndns.org/",".*Current IP Address: (\S+)</body>.*")]
-
- ip = ""
- for i in range(10):
- try:
- sv = choice(services)
- ip = getURL(sv[0])
- ip = re.match(sv[1], ip).group(1)
- break
- except:
- ip = ""
- sleep(1)
-
- return ip
-
- #--------------------------------------------------------------------------
- def checkThreadCount(self):
- """checks if there are need for increasing or reducing thread count"""
-
- if len(self.threads) == self.core.config.get("download", "max_downloads"):
- return True
- elif len(self.threads) < self.core.config.get("download", "max_downloads"):
- self.createThread()
- else:
- free = [x for x in self.threads if not x.active]
- if free:
- free[0].put("quit")
-
-
- def cleanPycurl(self):
- """ make a global curl cleanup (currently ununused) """
- if self.processingIds():
- return False
- pycurl.global_cleanup()
- pycurl.global_init(pycurl.GLOBAL_DEFAULT)
- self.downloaded = 0
- self.log.debug("Cleaned up pycurl")
- return True
-
- #--------------------------------------------------------------------------
- def assignJob(self):
- """assing a job to a thread if possible"""
-
- if self.pause or not self.core.api.isTimeDownload(): return
-
- #if self.downloaded > 20:
- # if not self.cleanPyCurl(): return
-
- free = [x for x in self.threads if not x.active]
-
- inuse = set([(x.active.pluginname, self.getLimit(x)) for x in self.threads if x.active and x.active.hasPlugin() and x.active.plugin.account])
- inuse = map(lambda x: (x[0], x[1], len([y for y in self.threads if y.active and y.active.pluginname == x[0]])) ,inuse)
- onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]]
-
- occ = [x.active.pluginname for x in self.threads if x.active and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit
-
- occ.sort()
- occ = tuple(set(occ))
- job = self.core.files.getJob(occ)
- if job:
- try:
- job.initPlugin()
- except Exception, e:
- self.log.critical(str(e))
- print_exc()
- job.setStatus("failed")
- job.error = str(e)
- job.release()
- return
-
- if job.plugin.__type__ == "hoster":
- spaceLeft = freeSpace(self.core.config["general"]["download_folder"]) / 1024 / 1024
- if spaceLeft < self.core.config["general"]["min_free_space"]:
- self.log.warning(_("Not enough space left on device"))
- self.pause = True
-
- if free and not self.pause:
- thread = free[0]
- #self.downloaded += 1
-
- thread.put(job)
- else:
- #put job back
- if occ not in self.core.files.jobCache:
- self.core.files.jobCache[occ] = []
- self.core.files.jobCache[occ].append(job.id)
-
- #check for decrypt jobs
- job = self.core.files.getDecryptJob()
- if job:
- job.initPlugin()
- thread = PluginThread.DecrypterThread(self, job)
-
-
- else:
- thread = PluginThread.DecrypterThread(self, job)
-
- def getLimit(self, thread):
- limit = thread.active.plugin.account.getAccountData(thread.active.plugin.user)["options"].get("limitDL", ["0"])[0]
- return int(limit)
-
- def cleanup(self):
- """do global cleanup, should be called when finished with pycurl"""
- pycurl.global_cleanup()
diff --git a/module/cli/Cli.py b/module/cli/Cli.py
deleted file mode 100644
index 929cf9881..000000000
--- a/module/cli/Cli.py
+++ /dev/null
@@ -1,585 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-#Copyright (C) 2008-2014 RaNaN
-#
-#This program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 3 of the License,
-#or (at your option) any later version.
-#
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#See the GNU General Public License for more details.
-#
-#You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-###
-from __future__ import with_statement
-from getopt import GetoptError, getopt
-
-import module.common.pylgettext as gettext
-import os
-from os import _exit
-from os.path import join, exists, abspath, basename
-import sys
-from sys import exit
-from threading import Thread, Lock
-from time import sleep
-from traceback import print_exc
-
-import ConfigParser
-
-from codecs import getwriter
-
-if os.name == "nt":
- enc = "cp850"
-else:
- enc = "utf8"
-
-sys.stdout = getwriter(enc)(sys.stdout, errors="replace")
-
-from module import InitHomeDir
-from module.cli.printer import *
-from module.cli import AddPackage, ManageFiles
-
-from module.Api import Destination
-from module.utils import formatSize, decode
-from module.remote.thriftbackend.ThriftClient import ThriftClient, NoConnection, NoSSL, WrongLogin, ConnectionClosed
-from module.lib.Getch import Getch
-from module.lib.rename_process import renameProcess
-
-class Cli:
- def __init__(self, client, command):
- self.client = client
- self.command = command
-
- if not self.command:
- renameProcess('pyload-cli')
- self.getch = Getch()
- self.input = ""
- self.inputline = 0
- self.lastLowestLine = 0
- self.menuline = 0
-
- self.lock = Lock()
-
- #processor funcions, these will be changed dynamically depending on control flow
- self.headerHandler = self #the download status
- self.bodyHandler = self #the menu section
- self.inputHandler = self
-
- os.system("clear")
- println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
- println(2, "")
-
- self.thread = RefreshThread(self)
- self.thread.start()
-
- self.start()
- else:
- self.processCommand()
-
- def reset(self):
- """ reset to initial main menu """
- self.input = ""
- self.headerHandler = self.bodyHandler = self.inputHandler = self
-
- def start(self):
- """ main loop. handle input """
- while True:
- #inp = raw_input()
- inp = self.getch.impl()
- if ord(inp) == 3:
- os.system("clear")
- sys.exit() # ctrl + c
- elif ord(inp) == 13: #enter
- try:
- self.lock.acquire()
- self.inputHandler.onEnter(self.input)
-
- except Exception, e:
- println(2, red(e))
- finally:
- self.lock.release()
-
- elif ord(inp) == 127:
- self.input = self.input[:-1] #backspace
- try:
- self.lock.acquire()
- self.inputHandler.onBackSpace()
- finally:
- self.lock.release()
-
- elif ord(inp) == 27: #ugly symbol
- pass
- else:
- self.input += inp
- try:
- self.lock.acquire()
- self.inputHandler.onChar(inp)
- finally:
- self.lock.release()
-
- self.inputline = self.bodyHandler.renderBody(self.menuline)
- self.renderFooter(self.inputline)
-
-
- def refresh(self):
- """refresh screen"""
-
- println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
- println(2, "")
-
- self.lock.acquire()
-
- self.menuline = self.headerHandler.renderHeader(3) + 1
- println(self.menuline - 1, "")
- self.inputline = self.bodyHandler.renderBody(self.menuline)
- self.renderFooter(self.inputline)
-
- self.lock.release()
-
-
- def setInput(self, string=""):
- self.input = string
-
- def setHandler(self, klass):
- #create new handler with reference to cli
- self.bodyHandler = self.inputHandler = klass(self)
- self.input = ""
-
- def renderHeader(self, line):
- """ prints download status """
- #print updated information
- # print "\033[J" #clear screen
- # self.println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
- # self.println(2, "")
- # self.println(3, white(_("%s Downloads:") % (len(data))))
-
- data = self.client.statusDownloads()
- speed = 0
-
- println(line, white(_("%s Downloads:") % (len(data))))
- line += 1
-
- for download in data:
- if download.status == 12: # downloading
- percent = download.percent
- z = percent / 4
- speed += download.speed
- println(line, cyan(download.name))
- line += 1
- println(line,
- blue("[") + yellow(z * "#" + (25 - z) * " ") + blue("] ") + green(str(percent) + "%") + _(
- " Speed: ") + green(formatSize(download.speed) + "/s") + _(" Size: ") + green(
- download.format_size) + _(" Finished in: ") + green(download.format_eta) + _(
- " ID: ") + green(download.fid))
- line += 1
- if download.status == 5:
- println(line, cyan(download.name))
- line += 1
- println(line, _("waiting: ") + green(download.format_wait))
- line += 1
-
- println(line, "")
- line += 1
- status = self.client.statusServer()
- if status.pause:
- paused = _("Status:") + " " + red(_("paused"))
- else:
- paused = _("Status:") + " " + red(_("running"))
-
- println(line,"%s %s: %s %s: %s %s: %s" % (
- paused, _("total Speed"), red(formatSize(speed) + "/s"), _("Files in queue"), red(
- status.queue), _("Total"), red(status.total)))
-
- return line + 1
-
- def renderBody(self, line):
- """ prints initial menu """
- println(line, white(_("Menu:")))
- println(line + 1, "")
- println(line + 2, mag("1.") + _(" Add Links"))
- println(line + 3, mag("2.") + _(" Manage Queue"))
- println(line + 4, mag("3.") + _(" Manage Collector"))
- println(line + 5, mag("4.") + _(" (Un)Pause Server"))
- println(line + 6, mag("5.") + _(" Kill Server"))
- println(line + 7, mag("6.") + _(" Quit"))
-
- return line + 8
-
- def renderFooter(self, line):
- """ prints out the input line with input """
- println(line, "")
- line += 1
-
- println(line, white(" Input: ") + decode(self.input))
-
- #clear old output
- if line < self.lastLowestLine:
- for i in range(line + 1, self.lastLowestLine + 1):
- println(i, "")
-
- self.lastLowestLine = line
-
- #set cursor to position
- print "\033[" + str(self.inputline) + ";0H"
-
- def onChar(self, char):
- """ default no special handling for single chars """
- if char == "1":
- self.setHandler(AddPackage)
- elif char == "2":
- self.setHandler(ManageFiles)
- elif char == "3":
- self.setHandler(ManageFiles)
- self.bodyHandler.target = Destination.Collector
- elif char == "4":
- self.client.togglePause()
- self.setInput()
- elif char == "5":
- self.client.kill()
- self.client.close()
- sys.exit()
- elif char == "6":
- os.system('clear')
- sys.exit()
-
- def onEnter(self, inp):
- pass
-
- def onBackSpace(self):
- pass
-
- def processCommand(self):
- command = self.command[0]
- args = []
- if len(self.command) > 1:
- args = self.command[1:]
-
- if command == "status":
- files = self.client.statusDownloads()
-
- if not files:
- print "No downloads running."
-
- for download in files:
- if download.status == 12: # downloading
- print print_status(download)
- print "\tDownloading: %s @ %s/s\t %s (%s%%)" % (
- download.format_eta, formatSize(download.speed), formatSize(download.size - download.bleft),
- download.percent)
- elif download.status == 5:
- print print_status(download)
- print "\tWaiting: %s" % download.format_wait
- else:
- print print_status(download)
-
- elif command == "queue":
- print_packages(self.client.getQueueData())
-
- elif command == "collector":
- print_packages(self.client.getCollectorData())
-
- elif command == "add":
- if len(args) < 2:
- print _("Please use this syntax: add <Package name> <link> <link2> ...")
- return
-
- self.client.addPackage(args[0], args[1:], Destination.Queue)
-
- elif command == "add_coll":
- if len(args) < 2:
- print _("Please use this syntax: add <Package name> <link> <link2> ...")
- return
-
- self.client.addPackage(args[0], args[1:], Destination.Collector)
-
- elif command == "del_file":
- self.client.deleteFiles([int(x) for x in args])
- print "Files deleted."
-
- elif command == "del_package":
- self.client.deletePackages([int(x) for x in args])
- print "Packages deleted."
-
- elif command == "move":
- for pid in args:
- pack = self.client.getPackageInfo(int(pid))
- self.client.movePackage((pack.dest + 1) % 2, pack.pid)
-
- elif command == "check":
- print _("Checking %d links:") % len(args)
- print
- rid = self.client.checkOnlineStatus(args).rid
- self.printOnlineCheck(self.client, rid)
-
-
- elif command == "check_container":
- path = args[0]
- if not exists(join(owd, path)):
- print _("File does not exists.")
- return
-
- f = open(join(owd, path), "rb")
- content = f.read()
- f.close()
-
- rid = self.client.checkOnlineStatusContainer([], basename(f.name), content).rid
- self.printOnlineCheck(self.client, rid)
-
-
- elif command == "pause":
- self.client.pause()
-
- elif command == "unpause":
- self.client.unpause()
-
- elif command == "toggle":
- self.client.togglePause()
-
- elif command == "kill":
- self.client.kill()
- elif command == "restart_file":
- for x in args:
- self.client.restartFile(int(x))
- print "Files restarted."
- elif command == "restart_package":
- for pid in args:
- self.client.restartPackage(int(pid))
- print "Packages restarted."
-
- else:
- print_commands()
-
- def printOnlineCheck(self, client, rid):
- while True:
- sleep(1)
- result = client.pollResults(rid)
- for url, status in result.data.iteritems():
- if status.status == 2: check = "Online"
- elif status.status == 1: check = "Offline"
- else: check = "Unknown"
-
- print "%-45s %-12s\t %-15s\t %s" % (status.name, formatSize(status.size), status.plugin, check)
-
- if result.rid == -1: break
-
-
-class RefreshThread(Thread):
- def __init__(self, cli):
- Thread.__init__(self)
- self.setDaemon(True)
- self.cli = cli
-
- def run(self):
- while True:
- sleep(1)
- try:
- self.cli.refresh()
- except ConnectionClosed:
- os.system("clear")
- print _("pyLoad was terminated")
- _exit(0)
- except Exception, e:
- println(2, red(str(e)))
- self.cli.reset()
- print_exc()
-
-
-def print_help(config):
- print
- print "pyLoad CLI Copyright (c) 2008-2014 the pyLoad Team"
- print
- print "Usage: [python] pyload-cli.py [options] [command]"
- print
- print "<Commands>"
- print "See pyload-cli.py -c for a complete listing."
- print
- print "<Options>"
- print " -i, --interactive", " Start in interactive mode"
- print
- print " -u, --username=", " " * 2, "Specify Username"
- print " --pw=<password>", " " * 2, "Password"
- print " -a, --address=", " " * 3, "Specify address (current=%s)" % config["addr"]
- print " -p, --port", " " * 7, "Specify port (current=%s)" % config["port"]
- print
- print " -l, --language", " " * 3, "Set user interface language (current=%s)" % config["language"]
- print " -h, --help", " " * 7, "Display this help screen"
- print " -c, --commands", " " * 3, "List all available commands"
- print
-
-
-def print_packages(data):
- for pack in data:
- print "Package %s (#%s):" % (pack.name, pack.pid)
- for download in pack.links:
- print "\t" + print_file(download)
- print
-
-
-def print_file(download):
- return "#%(id)-6d %(name)-30s %(statusmsg)-10s %(plugin)-8s" % {
- "id": download.fid,
- "name": download.name,
- "statusmsg": download.statusmsg,
- "plugin": download.plugin
- }
-
-
-def print_status(download):
- return "#%(id)-6s %(name)-40s Status: %(statusmsg)-10s Size: %(size)s" % {
- "id": download.fid,
- "name": download.name,
- "statusmsg": download.statusmsg,
- "size": download.format_size
- }
-
-
-def print_commands():
- commands = [("status", _("Prints server status")),
- ("queue", _("Prints downloads in queue")),
- ("collector", _("Prints downloads in collector")),
- ("add <name> <link1> <link2>...", _("Adds package to queue")),
- ("add_coll <name> <link1> <link2>...", _("Adds package to collector")),
- ("del_file <fid> <fid2>...", _("Delete Files from Queue/Collector")),
- ("del_package <pid> <pid2>...", _("Delete Packages from Queue/Collector")),
- ("move <pid> <pid2>...", _("Move Packages from Queue to Collector or vice versa")),
- ("restart_file <fid> <fid2>...", _("Restart files")),
- ("restart_package <pid> <pid2>...", _("Restart packages")),
- ("check <container|url> ...", _("Check online status, works with local container")),
- ("check_container path", _("Checks online status of a container file")),
- ("pause", _("Pause the server")),
- ("unpause", _("continue downloads")),
- ("toggle", _("Toggle pause/unpause")),
- ("kill", _("kill server")), ]
-
- print _("List of commands:")
- print
- for c in commands:
- print "%-35s %s" % c
-
-
-def writeConfig(opts):
- try:
- with open(join(homedir, ".pyload-cli"), "w") as cfgfile:
- cfgfile.write("[cli]")
- for opt in opts:
- cfgfile.write("%s=%s\n" % (opt, opts[opt]))
- except:
- print _("Couldn't write user config file")
-
-
-def main():
- config = {"addr": "127.0.0.1", "port": "7227", "language": "en"}
- try:
- config["language"] = os.environ["LANG"][0:2]
- except:
- pass
-
- if (not exists(join(pypath, "locale", config["language"]))) or config["language"] == "":
- config["language"] = "en"
-
- configFile = ConfigParser.ConfigParser()
- configFile.read(join(homedir, ".pyload-cli"))
-
- if configFile.has_section("cli"):
- for opt in configFile.items("cli"):
- config[opt[0]] = opt[1]
-
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("Cli", join(pypath, "locale"),
- languages=[config["language"], "en"], fallback=True)
- translation.install(unicode=True)
-
- interactive = False
- command = None
- username = ""
- password = ""
-
- shortOptions = 'iu:p:a:hcl:'
- longOptions = ['interactive', "username=", "pw=", "address=", "port=", "help", "commands", "language="]
-
- try:
- opts, extraparams = getopt(sys.argv[1:], shortOptions, longOptions)
- for option, params in opts:
- if option in ("-i", "--interactive"):
- interactive = True
- elif option in ("-u", "--username"):
- username = params
- elif option in ("-a", "--address"):
- config["addr"] = params
- elif option in ("-p", "--port"):
- config["port"] = params
- elif option in ("-l", "--language"):
- config["language"] = params
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("Cli", join(pypath, "locale"),
- languages=[config["language"], "en"], fallback=True)
- translation.install(unicode=True)
- elif option in ("-h", "--help"):
- print_help(config)
- exit()
- elif option in ("--pw"):
- password = params
- elif option in ("-c", "--comands"):
- print_commands()
- exit()
-
- except GetoptError:
- print 'Unknown Argument(s) "%s"' % " ".join(sys.argv[1:])
- print_help(config)
- exit()
-
- if len(extraparams) >= 1:
- command = extraparams
-
- client = False
-
- if interactive:
- try:
- client = ThriftClient(config["addr"], int(config["port"]), username, password)
- except WrongLogin:
- pass
- except NoSSL:
- print _("You need py-openssl to connect to this pyLoad Core.")
- exit()
- except NoConnection:
- config["addr"] = False
- config["port"] = False
-
- if not client:
- if not config["addr"]: config["addr"] = raw_input(_("Address: "))
- if not config["port"]: config["port"] = raw_input(_("Port: "))
- if not username: username = raw_input(_("Username: "))
- if not password:
- from getpass import getpass
-
- password = getpass(_("Password: "))
-
- try:
- client = ThriftClient(config["addr"], int(config["port"]), username, password)
- except WrongLogin:
- print _("Login data is wrong.")
- except NoConnection:
- print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"],
- "port": config["port"]})
-
- else:
- try:
- client = ThriftClient(config["addr"], int(config["port"]), username, password)
- except WrongLogin:
- print _("Login data is wrong.")
- except NoConnection:
- print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"],
- "port": config["port"]})
- except NoSSL:
- print _("You need py-openssl to connect to this pyLoad core.")
-
- if interactive and command: print _("Interactive mode ignored since you passed some commands.")
-
- if client:
- writeConfig(config)
- cli = Cli(client, command)
diff --git a/module/cli/ManageFiles.py b/module/cli/ManageFiles.py
deleted file mode 100644
index 8f202c59d..000000000
--- a/module/cli/ManageFiles.py
+++ /dev/null
@@ -1,203 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-#Copyright (C) 2011-2014 RaNaN
-#
-#This program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 3 of the License,
-#or (at your option) any later version.
-#
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#See the GNU General Public License for more details.
-#
-#You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-###
-
-from itertools import islice
-from time import time
-
-from Handler import Handler
-from printer import *
-
-from module.Api import Destination, PackageData
-
-class ManageFiles(Handler):
- """ possibility to manage queue/collector """
-
- def init(self):
- self.target = Destination.Queue
- self.pos = 0 #position in queue
- self.package = -1 #choosen package
- self.mode = "" # move/delete/restart
-
- self.cache = None
- self.links = None
- self.time = 0
-
- def onChar(self, char):
- if char in ("m", "d", "r"):
- self.mode = char
- self.setInput()
- elif char == "p":
- self.pos = max(0, self.pos - 5)
- self.backspace()
- elif char == "n":
- self.pos += 5
- self.backspace()
-
- def onBackSpace(self):
- if not self.input and self.mode:
- self.mode = ""
- if not self.input and self.package > -1:
- self.package = -1
-
- def onEnter(self, input):
- if input == "0":
- self.cli.reset()
- elif self.package < 0 and self.mode:
- #mode select
- packs = self.parseInput(input)
- if self.mode == "m":
- [self.client.movePackage((self.target + 1) % 2, x) for x in packs]
- elif self.mode == "d":
- self.client.deletePackages(packs)
- elif self.mode == "r":
- [self.client.restartPackage(x) for x in packs]
-
- elif self.mode:
- #edit links
- links = self.parseInput(input, False)
-
- if self.mode == "d":
- self.client.deleteFiles(links)
- elif self.mode == "r":
- map(self.client.restartFile, links)
-
- else:
- #look into package
- try:
- self.package = int(input)
- except:
- pass
-
- self.cache = None
- self.links = None
- self.pos = 0
- self.mode = ""
- self.setInput()
-
-
- def renderBody(self, line):
- if self.package < 0:
- println(line, white(_("Manage Packages:")))
- else:
- println(line, white((_("Manage Links:"))))
- line += 1
-
- if self.mode:
- if self.mode == "m":
- println(line, _("What do you want to move?"))
- elif self.mode == "d":
- println(line, _("What do you want to delete?"))
- elif self.mode == "r":
- println(line, _("What do you want to restart?"))
-
- println(line + 1, "Enter single number, comma seperated numbers or ranges. eg. 1, 2, 3 or 1-3.")
- line += 2
- else:
- println(line, _("Choose what yout want to do or enter package number."))
- println(line + 1, ("%s - %%s, %s - %%s, %s - %%s" % (mag("d"), mag("m"), mag("r"))) % (
- _("delete"), _("move"), _("restart")))
- line += 2
-
- if self.package < 0:
- #print package info
- pack = self.getPackages()
- i = 0
- for value in islice(pack, self.pos, self.pos + 5):
- try:
- println(line, mag(str(value.pid)) + ": " + value.name)
- line += 1
- i += 1
- except Exception, e:
- pass
- for x in range(5 - i):
- println(line, "")
- line += 1
- else:
- #print links info
- pack = self.getLinks()
- i = 0
- for value in islice(pack.links, self.pos, self.pos + 5):
- try:
- println(line, mag(value.fid) + ": %s | %s | %s" % (
- value.name, value.statusmsg, value.plugin))
- line += 1
- i += 1
- except Exception, e:
- pass
- for x in range(5 - i):
- println(line, "")
- line += 1
-
- println(line, mag("p") + _(" - previous") + " | " + mag("n") + _(" - next"))
- println(line + 1, mag("0.") + _(" back to main menu"))
-
- return line + 2
-
-
- def getPackages(self):
- if self.cache and self.time + 2 < time():
- return self.cache
-
- if self.target == Destination.Queue:
- data = self.client.getQueue()
- else:
- data = self.client.getCollector()
-
-
- self.cache = data
- self.time = time()
-
- return data
-
- def getLinks(self):
- if self.links and self.time + 1 < time():
- return self.links
-
- try:
- data = self.client.getPackageData(self.package)
- except:
- data = PackageData(links=[])
-
- self.links = data
- self.time = time()
-
- return data
-
- def parseInput(self, inp, package=True):
- inp = inp.strip()
- if "-" in inp:
- l, n, h = inp.partition("-")
- l = int(l)
- h = int(h)
- r = range(l, h + 1)
-
- ret = []
- if package:
- for p in self.cache:
- if p.pid in r:
- ret.append(p.pid)
- else:
- for l in self.links.links:
- if l.lid in r:
- ret.append(l.lid)
-
- return ret
-
- else:
- return [int(x) for x in inp.split(",")]
diff --git a/module/common/APIExerciser.py b/module/common/APIExerciser.py
deleted file mode 100644
index 34b1529b5..000000000
--- a/module/common/APIExerciser.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import string
-from threading import Thread
-from random import choice, random, sample, randint
-from time import time, sleep
-from math import floor
-import gc
-
-from traceback import print_exc, format_exc
-
-from module.remote.thriftbackend.ThriftClient import ThriftClient, Destination
-
-def createURLs():
- """ create some urls, some may fail """
- urls = []
- for x in range(0, randint(20, 100)):
- name = "DEBUG_API"
- if randint(0, 5) == 5:
- name = "" #this link will fail
-
- urls.append(name + "".join(sample(string.ascii_letters, randint(10, 20))))
-
- return urls
-
-AVOID = (0, 3, 8)
-
-idPool = 0
-sumCalled = 0
-
-
-def startApiExerciser(core, n):
- for i in range(n):
- APIExerciser(core).start()
-
-class APIExerciser(Thread):
-
-
- def __init__(self, core, thrift=False, user=None, pw=None):
- global idPool
-
- Thread.__init__(self)
- self.setDaemon(True)
- self.core = core
- self.count = 0 #number of methods
- self.time = time()
-
- if thrift:
- self.api = ThriftClient(user=user, password=pw)
- else:
- self.api = core.api
-
-
- self.id = idPool
-
- idPool += 1
-
- #self.start()
-
- def run(self):
-
- self.core.log.info("API Excerciser started %d" % self.id)
-
- out = open("error.log", "ab")
- #core errors are not logged of course
- out.write("\n" + "Starting\n")
- out.flush()
-
- while True:
- try:
- self.testAPI()
- except Exception:
- self.core.log.error("Excerciser %d throw an execption" % self.id)
- print_exc()
- out.write(format_exc() + 2 * "\n")
- out.flush()
-
- if not self.count % 100:
- self.core.log.info("Exerciser %d tested %d api calls" % (self.id, self.count))
- if not self.count % 1000:
- out.flush()
-
- if not sumCalled % 1000: #not thread safe
- self.core.log.info("Exercisers tested %d api calls" % sumCalled)
- persec = sumCalled / (time() - self.time)
- self.core.log.info("Approx. %.2f calls per second." % persec)
- self.core.log.info("Approx. %.2f ms per call." % (1000 / persec))
- self.core.log.info("Collected garbage: %d" % gc.collect())
-
-
- #sleep(random() / 500)
-
- def testAPI(self):
- global sumCalled
-
- m = ["statusDownloads", "statusServer", "addPackage", "getPackageData", "getFileData", "deleteFiles",
- "deletePackages", "getQueue", "getCollector", "getQueueData", "getCollectorData", "isCaptchaWaiting",
- "getCaptchaTask", "stopAllDownloads", "getAllInfo", "getServices" , "getAccounts", "getAllUserData"]
-
- method = choice(m)
- #print "Testing:", method
-
- if hasattr(self, method):
- res = getattr(self, method)()
- else:
- res = getattr(self.api, method)()
-
- self.count += 1
- sumCalled += 1
-
- #print res
-
- def addPackage(self):
- name = "".join(sample(string.ascii_letters, 10))
- urls = createURLs()
-
- self.api.addPackage(name, urls, choice([Destination.Queue, Destination.Collector]))
-
-
- def deleteFiles(self):
- info = self.api.getQueueData()
- if not info: return
-
- pack = choice(info)
- fids = pack.links
-
- if len(fids):
- fids = [f.fid for f in sample(fids, randint(1, max(len(fids) / 2, 1)))]
- self.api.deleteFiles(fids)
-
-
- def deletePackages(self):
- info = choice([self.api.getQueue(), self.api.getCollector()])
- if not info: return
-
- pids = [p.pid for p in info]
- if len(pids):
- pids = sample(pids, randint(1, max(floor(len(pids) / 2.5), 1)))
- self.api.deletePackages(pids)
-
- def getFileData(self):
- info = self.api.getQueueData()
- if info:
- p = choice(info)
- if p.links:
- self.api.getFileData(choice(p.links).fid)
-
- def getPackageData(self):
- info = self.api.getQueue()
- if info:
- self.api.getPackageData(choice(info).pid)
-
- def getAccounts(self):
- self.api.getAccounts(False)
-
- def getCaptchaTask(self):
- self.api.getCaptchaTask(False)
diff --git a/module/common/pavement.py b/module/common/pavement.py
deleted file mode 100644
index 9d36e9c1d..000000000
--- a/module/common/pavement.py
+++ /dev/null
@@ -1,412 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from paver.easy import *
-from paver.setuputils import setup
-from paver.doctools import cog
-
-import os
-import sys
-import shutil
-import re
-from glob import glob
-from tempfile import mkdtemp
-from urllib import urlretrieve
-from subprocess import call, Popen, PIPE
-from zipfile import ZipFile
-
-PROJECT_DIR = path(__file__).dirname()
-sys.path.append(PROJECT_DIR)
-
-options = environment.options
-path('pyload').mkdir()
-
-extradeps = []
-if sys.version_info <= (2, 5):
- extradeps += 'simplejson'
-
-setup(
- name="pyload",
- version="0.4.10",
- description='Fast, lightweight and full featured download manager.',
- long_description=open(PROJECT_DIR / "README.md").read(),
- keywords = ('pyload', 'download-manager', 'one-click-hoster', 'download'),
- url="http://pyload.org",
- download_url='http://pyload.org/download',
- license='GPL v3',
- author="pyLoad Team",
- author_email="support@pyload.org",
- platforms = ('Any',),
- #package_dir={'pyload': 'src'},
- packages=['pyload'],
- #package_data=find_package_data(),
- #data_files=[],
- include_package_data=True,
- exclude_package_data={'pyload': ['docs*', 'scripts*', 'tests*']}, #exluced from build but not from sdist
- # 'bottle >= 0.10.0' not in list, because its small and contain little modifications
- install_requires=['thrift >= 0.8.0', 'jinja2', 'pycurl', 'Beaker', 'BeautifulSoup >= 3.2, < 3.3'] + extradeps,
- extras_require={
- 'SSL': ["pyOpenSSL"],
- 'DLC': ['pycrypto'],
- 'lightweight webserver': ['bjoern'],
- 'RSS plugins': ['feedparser'],
- },
- #setup_requires=["setuptools_hg"],
- entry_points={
- 'console_scripts': [
- 'pyLoadCore = pyLoadCore:main',
- 'pyLoadCli = pyLoadCli:main'
- ]},
- zip_safe=False,
- classifiers=[
- "Development Status :: 5 - Production/Stable",
- "Topic :: Internet :: WWW/HTTP",
- "Environment :: Console",
- "Environment :: Web Environment",
- "Intended Audience :: End Users/Desktop",
- "License :: OSI Approved :: GNU General Public License (GPL)",
- "Operating System :: OS Independent",
- "Programming Language :: Python :: 2"
- ]
-)
-
-options(
- sphinx=Bunch(
- builddir="_build",
- sourcedir=""
- ),
- get_source=Bunch(
- src="https://bitbucket.org/spoob/pyload/get/tip.zip",
- rev=None,
- clean=False
- ),
- thrift=Bunch(
- path="../thrift/trunk/compiler/cpp/thrift",
- gen=""
- ),
- virtualenv=Bunch(
- dir="env",
- python="python2",
- virtual="virtualenv2",
- ),
- cog=Bunch(
- pattern="*.py",
- )
-)
-
-# xgettext args
-xargs = ["--language=Python", "--add-comments=L10N",
- "--from-code=utf-8", "--copyright-holder=pyLoad Team", "--package-name=pyLoad",
- "--package-version=%s" % options.version, "--msgid-bugs-address='bugs@pyload.org'"]
-
-@task
-@needs('cog')
-def html():
- """Build html documentation"""
- module = path("docs") / "module"
- module.rmtree()
- call_task('paver.doctools.html')
-
-
-@task
-@cmdopts([
- ('src=', 's', 'Url to source'),
- ('rev=', 'r', "HG revision"),
- ("clean", 'c', 'Delete old source folder')
-])
-def get_source(options):
- """ Downloads pyload source from bitbucket tip or given rev"""
- if options.rev: options.url = "https://bitbucket.org/spoob/pyload/get/%s.zip" % options.rev
-
- pyload = path("pyload")
-
- if len(pyload.listdir()) and not options.clean:
- return
- elif pyload.exists():
- pyload.rmtree()
-
- urlretrieve(options.src, "pyload_src.zip")
- zip = ZipFile("pyload_src.zip")
- zip.extractall()
- path("pyload_src.zip").remove()
-
- folder = [x for x in path(".").dirs() if x.name.startswith("spoob-pyload-")][0]
- folder.move(pyload)
-
- change_mode(pyload, 0644)
- change_mode(pyload, 0755, folder=True)
-
- for file in pyload.files():
- if file.name.endswith(".py"):
- file.chmod(0755)
-
- (pyload / ".hgtags").remove()
- (pyload / ".gitignore").remove()
- #(pyload / "docs").rmtree()
-
- f = open(pyload / "__init__.py", "wb")
- f.close()
-
- #options.setup.packages = find_packages()
- #options.setup.package_data = find_package_data()
-
-
-@task
-@needs('clean', 'generate_setup', 'minilib', 'get_source', 'setuptools.command.sdist')
-def sdist():
- """ Build source code package with distutils """
-
-
-@task
-@cmdopts([
- ('path=', 'p', 'Thrift path'),
- ('gen=', 'g', "Extra --gen option")
-])
-def thrift(options):
- """ Generate Thrift stubs """
-
- print "add import for TApplicationException manually as long it is not fixed"
-
- outdir = path("module") / "remote" / "thriftbackend"
- (outdir / "gen-py").rmtree()
-
- cmd = [options.thrift.path, "-strict", "-o", outdir, "--gen", "py:slots, dynamic", outdir / "pyload.thrift"]
-
- if options.gen:
- cmd.insert(len(cmd) - 1, "--gen")
- cmd.insert(len(cmd) - 1, options.gen)
-
- print "running", cmd
-
- p = Popen(cmd)
- p.communicate()
-
- (outdir / "thriftgen").rmtree()
- (outdir / "gen-py").move(outdir / "thriftgen")
-
- #create light ttypes
- from module.remote.socketbackend.create_ttypes import main
- main()
-
-@task
-def compile_js():
- """ Compile .coffee files to javascript"""
-
- root = path("module") / "web" / "media" / "js"
- for f in root.glob("*.coffee"):
- print "generate", f
- coffee = Popen(["coffee", "-cbs"], stdin=open(f, "rb"), stdout=PIPE)
- yui = Popen(["yuicompressor", "--type", "js"], stdin=coffee.stdout, stdout=PIPE)
- coffee.stdout.close()
- content = yui.communicate()[0]
- with open(root / f.name.replace(".coffee", ".js"), "wb") as js:
- js.write("{% autoescape true %}\n")
- js.write(content)
- js.write("\n{% endautoescape %}")
-
-
-@task
-def generate_locale():
- """ Generates localization files """
-
- EXCLUDE = ["BeautifulSoup.py", "module/cli", "web/locale", "web/ajax", "web/cnl", "web/pyload",
- "setup.py"]
- makepot("core", path("module"), EXCLUDE, "./pyload.py\n")
-
- makepot("cli", path("module") / "cli", [], includes="./pyload-cli.py\n")
- makepot("setup", "", [], includes="./module/setup.py\n")
-
- EXCLUDE = ["ServerThread.py", "web/media/default"]
-
- # strings from js files
- strings = set()
-
- for fi in path("module/web").walkfiles():
- if not fi.name.endswith(".js") and not fi.endswith(".coffee"): continue
- with open(fi, "rb") as c:
- content = c.read()
-
- strings.update(re.findall(r"_\s*\(\s*\"([^\"]+)", content))
- strings.update(re.findall(r"_\s*\(\s*\'([^\']+)", content))
-
- trans = path("module") / "web" / "translations.js"
-
- with open(trans, "wb") as js:
- for s in strings:
- js.write('_("%s")\n' % s)
-
- makepot("django", path("module/web"), EXCLUDE, "./%s\n" % trans.relpath(), [".py", ".html"], ["--language=Python"])
-
- trans.remove()
-
- path("includes.txt").remove()
-
- print "Locale generated"
-
-
-@task
-@cmdopts([
- ('key=', 'k', 'api key')
-])
-def upload_translations(options):
- """ Uploads the locale files to translation server """
- tmp = path(mkdtemp())
-
- shutil.copy('locale/crowdin.yaml', tmp)
- os.mkdir(tmp / 'pyLoad')
- for f in glob('locale/*.pot'):
- if os.path.isfile(f):
- shutil.copy(f, tmp / 'pyLoad')
-
- config = tmp / 'crowdin.yaml'
- content = open(config, 'rb').read()
- content = content.format(key=options.key, tmp=tmp)
- f = open(config, 'wb')
- f.write(content)
- f.close()
-
- call(['crowdin-cli', '-c', config, 'upload', 'source'])
-
- shutil.rmtree(tmp)
-
- print "Translations uploaded"
-
-
-@task
-@cmdopts([
- ('key=', 'k', 'api key')
-])
-def download_translations(options):
- """ Downloads the translated files from translation server """
- tmp = path(mkdtemp())
-
- shutil.copy('locale/crowdin.yaml', tmp)
- os.mkdir(tmp / 'pyLoad')
- for f in glob('locale/*.pot'):
- if os.path.isfile(f):
- shutil.copy(f, tmp / 'pyLoad')
-
- config = tmp / 'crowdin.yaml'
- content = open(config, 'rb').read()
- content = content.format(key=options.key, tmp=tmp)
- f = open(config, 'wb')
- f.write(content)
- f.close()
-
- call(['crowdin-cli', '-c', config, 'download'])
-
- for language in (tmp / 'pyLoad').listdir():
- if not language.isdir():
- continue
-
- target = path('locale') / language.basename()
- print "Copy language %s" % target
- if target.exists():
- shutil.rmtree(target)
-
- shutil.copytree(language, target)
-
- shutil.rmtree(tmp)
-
-
-@task
-def compile_translations():
- """ Compile PO files to MO """
- for language in path('locale').listdir():
- if not language.isdir():
- continue
-
- for f in glob(language / 'LC_MESSAGES' / '*.po'):
- print "Compiling %s" % f
- call(['msgfmt', '-o', f.replace('.po', '.mo'), f])
-
-
-@task
-def tests():
- call(["nosetests2"])
-
-@task
-def virtualenv(options):
- """Setup virtual environment"""
- if path(options.dir).exists():
- return
-
- call([options.virtual, "--no-site-packages", "--python", options.python, options.dir])
- print "$ source %s/bin/activate" % options.dir
-
-
-@task
-def clean_env():
- """Deletes the virtual environment"""
- env = path(options.virtualenv.dir)
- if env.exists():
- env.rmtree()
-
-
-@task
-@needs('generate_setup', 'minilib', 'get_source', 'virtualenv')
-def env_install():
- """Install pyLoad into the virtualenv"""
- venv = options.virtualenv
- call([path(venv.dir) / "bin" / "easy_install", "."])
-
-
-@task
-def clean():
- """Cleans build directories"""
- path("build").rmtree()
- path("dist").rmtree()
-
-
-#helper functions
-
-def walk_trans(path, EXCLUDE, endings=[".py"]):
- result = ""
-
- for f in path.walkfiles():
- if [True for x in EXCLUDE if x in f.dirname().relpath()]: continue
- if f.name in EXCLUDE: continue
-
- for e in endings:
- if f.name.endswith(e):
- result += "./%s\n" % f.relpath()
- break
-
- return result
-
-
-def makepot(domain, p, excludes=[], includes="", endings=[".py"], xxargs=[]):
- print "Generate %s.pot" % domain
-
- f = open("includes.txt", "wb")
- if includes:
- f.write(includes)
-
- if p:
- f.write(walk_trans(path(p), excludes, endings))
-
- f.close()
-
- call(["xgettext", "--files-from=includes.txt", "--default-domain=%s" % domain] + xargs + xxargs)
-
- # replace charset und move file
- with open("%s.po" % domain, "rb") as f:
- content = f.read()
-
- path("%s.po" % domain).remove()
- content = content.replace("charset=CHARSET", "charset=UTF-8")
-
- with open("locale/%s.pot" % domain, "wb") as f:
- f.write(content)
-
-
-def change_owner(dir, uid, gid):
- for p in dir.walk():
- p.chown(uid, gid)
-
-
-def change_mode(dir, mode, folder=False):
- for p in dir.walk():
- if folder and p.isdir():
- p.chmod(mode)
- elif p.isfile() and not folder:
- p.chmod(mode)
diff --git a/module/common/test_api.py b/module/common/test_api.py
deleted file mode 100644
index f8901f731..000000000
--- a/module/common/test_api.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common import APIExerciser
-from nose.tools import nottest
-
-
-class TestApi:
-
- def __init__(self):
- self.api = APIExerciser.APIExerciser(None, True, "TestUser", "pwhere")
-
- def test_login(self):
- assert self.api.api.login("crapp", "wrong pw") is False
-
- #takes really long, only test when needed
- @nottest
- def test_random(self):
-
- for i in range(0, 100):
- self.api.testAPI()
diff --git a/module/database/DatabaseBackend.py b/module/database/DatabaseBackend.py
deleted file mode 100644
index df2660063..000000000
--- a/module/database/DatabaseBackend.py
+++ /dev/null
@@ -1,305 +0,0 @@
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
- @author: mkaay
-"""
-from threading import Thread
-from threading import Event
-from os import remove
-from os.path import exists
-from shutil import move
-
-from Queue import Queue
-from traceback import print_exc
-
-from module.utils import chmod
-
-try:
- from pysqlite2 import dbapi2 as sqlite3
-except:
- import sqlite3
-
-DB_VERSION = 4
-
-class style:
- db = None
-
- @classmethod
- def setDB(cls, db):
- cls.db = db
-
- @classmethod
- def inner(cls, f):
- @staticmethod
- def x(*args, **kwargs):
- if cls.db:
- return f(cls.db, *args, **kwargs)
- return x
-
- @classmethod
- def queue(cls, f):
- @staticmethod
- def x(*args, **kwargs):
- if cls.db:
- return cls.db.queue(f, *args, **kwargs)
- return x
-
- @classmethod
- def async(cls, f):
- @staticmethod
- def x(*args, **kwargs):
- if cls.db:
- return cls.db.async(f, *args, **kwargs)
- return x
-
-class DatabaseJob:
- def __init__(self, f, *args, **kwargs):
- self.done = Event()
-
- self.f = f
- self.args = args
- self.kwargs = kwargs
-
- self.result = None
- self.exception = False
-
-# import inspect
-# self.frame = inspect.currentframe()
-
- def __repr__(self):
- from os.path import basename
- frame = self.frame.f_back
- output = ""
- for i in range(5):
- output += "\t%s:%s, %s\n" % (basename(frame.f_code.co_filename), frame.f_lineno, frame.f_code.co_name)
- frame = frame.f_back
- del frame
- del self.frame
-
- return "DataBase Job %s:%s\n%sResult: %s" % (self.f.__name__, self.args[1:], output, self.result)
-
- def processJob(self):
- try:
- self.result = self.f(*self.args, **self.kwargs)
- except Exception, e:
- print_exc()
- try:
- print "Database Error @", self.f.__name__, self.args[1:], self.kwargs, e
- except:
- pass
-
- self.exception = e
- finally:
- self.done.set()
-
- def wait(self):
- self.done.wait()
-
-class DatabaseBackend(Thread):
- subs = []
- def __init__(self, core):
- Thread.__init__(self)
- self.setDaemon(True)
- self.core = core
-
- self.jobs = Queue()
-
- self.setuplock = Event()
-
- style.setDB(self)
-
- def setup(self):
- self.start()
- self.setuplock.wait()
-
- def run(self):
- """main loop, which executes commands"""
- convert = self._checkVersion() #returns None or current version
-
- self.conn = sqlite3.connect("files.db")
- chmod("files.db", 0600)
-
- self.c = self.conn.cursor() #compatibility
-
- if convert is not None:
- self._convertDB(convert)
-
- self._createTables()
- self._migrateUser()
-
- self.conn.commit()
-
- self.setuplock.set()
-
- while True:
- j = self.jobs.get()
- if j == "quit":
- self.c.close()
- self.conn.close()
- break
- j.processJob()
-
- @style.queue
- def shutdown(self):
- self.conn.commit()
- self.jobs.put("quit")
-
- def _checkVersion(self):
- """ check db version and delete it if needed"""
- if not exists("files.version"):
- f = open("files.version", "wb")
- f.write(str(DB_VERSION))
- f.close()
- return
-
- f = open("files.version", "rb")
- v = int(f.read().strip())
- f.close()
- if v < DB_VERSION:
- if v < 2:
- try:
- self.manager.core.log.warning(_("Filedatabase was deleted due to incompatible version."))
- except:
- print "Filedatabase was deleted due to incompatible version."
- remove("files.version")
- move("files.db", "files.backup.db")
- f = open("files.version", "wb")
- f.write(str(DB_VERSION))
- f.close()
- return v
-
- def _convertDB(self, v):
- try:
- getattr(self, "_convertV%i" % v)()
- except:
- try:
- self.core.log.error(_("Filedatabase could NOT be converted."))
- except:
- print "Filedatabase could NOT be converted."
-
- #convert scripts start-----------------------------------------------------
-
- def _convertV2(self):
- self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")')
- try:
- self.manager.core.log.info(_("Database was converted from v2 to v3."))
- except:
- print "Database was converted from v2 to v3."
- self._convertV3()
-
- def _convertV3(self):
- self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)')
- try:
- self.manager.core.log.info(_("Database was converted from v3 to v4."))
- except:
- print "Database was converted from v3 to v4."
-
- #convert scripts end-------------------------------------------------------
-
- def _createTables(self):
- """create tables for database"""
-
- self.c.execute('CREATE TABLE IF NOT EXISTS "packages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "folder" TEXT, "password" TEXT DEFAULT "", "site" TEXT DEFAULT "", "queue" INTEGER DEFAULT 0 NOT NULL, "packageorder" INTEGER DEFAULT 0 NOT NULL)')
- self.c.execute('CREATE TABLE IF NOT EXISTS "links" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "url" TEXT NOT NULL, "name" TEXT, "size" INTEGER DEFAULT 0 NOT NULL, "status" INTEGER DEFAULT 3 NOT NULL, "plugin" TEXT DEFAULT "BasePlugin" NOT NULL, "error" TEXT DEFAULT "", "linkorder" INTEGER DEFAULT 0 NOT NULL, "package" INTEGER DEFAULT 0 NOT NULL, FOREIGN KEY(package) REFERENCES packages(id))')
- self.c.execute('CREATE INDEX IF NOT EXISTS "pIdIndex" ON links(package)')
- self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")')
- self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)')
-
- self.c.execute('CREATE VIEW IF NOT EXISTS "pstats" AS \
- SELECT p.id AS id, SUM(l.size) AS sizetotal, COUNT(l.id) AS linkstotal, linksdone, sizedone\
- FROM packages p JOIN links l ON p.id = l.package LEFT OUTER JOIN\
- (SELECT p.id AS id, COUNT(*) AS linksdone, SUM(l.size) AS sizedone \
- FROM packages p JOIN links l ON p.id = l.package AND l.status in (0, 4, 13) GROUP BY p.id) s ON s.id = p.id \
- GROUP BY p.id')
-
- #try to lower ids
- self.c.execute('SELECT max(id) FROM LINKS')
- fid = self.c.fetchone()[0]
- if fid:
- fid = int(fid)
- else:
- fid = 0
- self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (fid, "links"))
-
-
- self.c.execute('SELECT max(id) FROM packages')
- pid = self.c.fetchone()[0]
- if pid:
- pid = int(pid)
- else:
- pid = 0
- self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (pid, "packages"))
-
- self.c.execute('VACUUM')
-
-
- def _migrateUser(self):
- if exists("pyload.db"):
- try:
- self.core.log.info(_("Converting old Django DB"))
- except:
- print "Converting old Django DB"
- conn = sqlite3.connect('pyload.db')
- c = conn.cursor()
- c.execute("SELECT username, password, email from auth_user WHERE is_superuser")
- users = []
- for r in c:
- pw = r[1].split("$")
- users.append((r[0], pw[1] + pw[2], r[2]))
- c.close()
- conn.close()
-
- self.c.executemany("INSERT INTO users(name, password, email) VALUES (?, ?, ?)", users)
- move("pyload.db", "pyload.old.db")
-
- def createCursor(self):
- return self.conn.cursor()
-
- @style.async
- def commit(self):
- self.conn.commit()
-
- @style.queue
- def syncSave(self):
- self.conn.commit()
-
- @style.async
- def rollback(self):
- self.conn.rollback()
-
- def async(self, f, *args, **kwargs):
- args = (self,) + args
- job = DatabaseJob(f, *args, **kwargs)
- self.jobs.put(job)
-
- def queue(self, f, *args, **kwargs):
- args = (self,) + args
- job = DatabaseJob(f, *args, **kwargs)
- self.jobs.put(job)
- job.wait()
- return job.result
-
- @classmethod
- def registerSub(cls, klass):
- cls.subs.append(klass)
-
- @classmethod
- def unregisterSub(cls, klass):
- cls.subs.remove(klass)
-
- def __getattr__(self, attr):
- for sub in DatabaseBackend.subs:
- if hasattr(sub, attr):
- return getattr(sub, attr)
diff --git a/module/database/FileDatabase.py b/module/database/FileDatabase.py
deleted file mode 100644
index f01d02769..000000000
--- a/module/database/FileDatabase.py
+++ /dev/null
@@ -1,891 +0,0 @@
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
- @author: mkaay
-"""
-
-
-from threading import RLock
-from time import time
-
-from module.utils import formatSize, lock
-from module.PullEvents import InsertEvent, ReloadAllEvent, RemoveEvent, UpdateEvent
-from module.PyPackage import PyPackage
-from module.PyFile import PyFile
-from module.database import style, DatabaseBackend
-
-try:
- from pysqlite2 import dbapi2 as sqlite3
-except:
- import sqlite3
-
-
-class FileHandler:
- """Handles all request made to obtain information,
- modify status or other request for links or packages"""
-
- def __init__(self, core):
- """Constructor"""
- self.core = core
-
- # translations
- self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("skipped"), _("waiting"), _("temp. offline"), _("starting"), _("failed"), _("aborted"), _("decrypting"), _("custom"), _("downloading"), _("processing"), _("unknown")]
-
- self.cache = {} #holds instances for files
- self.packageCache = {} # same for packages
- #@TODO: purge the cache
-
- self.jobCache = {}
-
- self.lock = RLock() #@TODO should be a Lock w/o R
- #self.lock._Verbose__verbose = True
-
- self.filecount = -1 # if an invalid value is set get current value from db
- self.queuecount = -1 #number of package to be loaded
- self.unchanged = False #determines if any changes was made since last call
-
- self.db = self.core.db
-
- def change(func):
- def new(*args):
- args[0].unchanged = False
- args[0].filecount = -1
- args[0].queuecount = -1
- args[0].jobCache = {}
- return func(*args)
- return new
-
- #--------------------------------------------------------------------------
- def save(self):
- """saves all data to backend"""
- self.db.commit()
-
- #--------------------------------------------------------------------------
- def syncSave(self):
- """saves all data to backend and waits until all data are written"""
- pyfiles = self.cache.values()
- for pyfile in pyfiles:
- pyfile.sync()
-
- pypacks = self.packageCache.values()
- for pypack in pypacks:
- pypack.sync()
-
- self.db.syncSave()
-
- @lock
- def getCompleteData(self, queue=1):
- """gets a complete data representation"""
-
- data = self.db.getAllLinks(queue)
- packs = self.db.getAllPackages(queue)
-
- data.update([(x.id, x.toDbDict()[x.id]) for x in self.cache.values()])
-
- for x in self.packageCache.itervalues():
- if x.queue != queue or x.id not in packs: continue
- packs[x.id].update(x.toDict()[x.id])
-
- for key, value in data.iteritems():
- if value["package"] in packs:
- packs[value["package"]]["links"][key] = value
-
- return packs
-
- @lock
- def getInfoData(self, queue=1):
- """gets a data representation without links"""
-
- packs = self.db.getAllPackages(queue)
- for x in self.packageCache.itervalues():
- if x.queue != queue or x.id not in packs: continue
- packs[x.id].update(x.toDict()[x.id])
-
- return packs
-
- @lock
- @change
- def addLinks(self, urls, package):
- """adds links"""
-
- self.core.hookManager.dispatchEvent("linksAdded", urls, package)
-
- data = self.core.pluginManager.parseUrls(urls)
-
- self.db.addLinks(data, package)
- self.core.threadManager.createInfoThread(data, package)
-
- #@TODO change from reloadAll event to package update event
- self.core.pullManager.addEvent(ReloadAllEvent("collector"))
-
- #--------------------------------------------------------------------------
- @lock
- @change
- def addPackage(self, name, folder, queue=0):
- """adds a package, default to link collector"""
- lastID = self.db.addPackage(name, folder, queue)
- p = self.db.getPackage(lastID)
- e = InsertEvent("pack", lastID, p.order, "collector" if not queue else "queue")
- self.core.pullManager.addEvent(e)
- return lastID
-
- #--------------------------------------------------------------------------
- @lock
- @change
- def deletePackage(self, id):
- """delete package and all contained links"""
-
- p = self.getPackage(id)
- if not p:
- if id in self.packageCache: del self.packageCache[id]
- return
-
- oldorder = p.order
- queue = p.queue
-
- e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
-
- pyfiles = self.cache.values()
-
- for pyfile in pyfiles:
- if pyfile.packageid == id:
- pyfile.abortDownload()
- pyfile.release()
-
- self.db.deletePackage(p)
- self.core.pullManager.addEvent(e)
- self.core.hookManager.dispatchEvent("packageDeleted", id)
-
- if id in self.packageCache:
- del self.packageCache[id]
-
- packs = self.packageCache.values()
- for pack in packs:
- if pack.queue == queue and pack.order > oldorder:
- pack.order -= 1
- pack.notifyChange()
-
- #--------------------------------------------------------------------------
- @lock
- @change
- def deleteLink(self, id):
- """deletes links"""
-
- f = self.getFile(id)
- if not f:
- return None
-
- pid = f.packageid
- e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue")
-
- oldorder = f.order
-
- if id in self.core.threadManager.processingIds():
- self.cache[id].abortDownload()
-
- if id in self.cache:
- del self.cache[id]
-
- self.db.deleteLink(f)
-
- self.core.pullManager.addEvent(e)
-
- p = self.getPackage(pid)
- if not len(p.getChildren()):
- p.delete()
-
- pyfiles = self.cache.values()
- for pyfile in pyfiles:
- if pyfile.packageid == pid and pyfile.order > oldorder:
- pyfile.order -= 1
- pyfile.notifyChange()
-
- #--------------------------------------------------------------------------
- def releaseLink(self, id):
- """removes pyfile from cache"""
- if id in self.cache:
- del self.cache[id]
-
- #--------------------------------------------------------------------------
- def releasePackage(self, id):
- """removes package from cache"""
- if id in self.packageCache:
- del self.packageCache[id]
-
- #--------------------------------------------------------------------------
- def updateLink(self, pyfile):
- """updates link"""
- self.db.updateLink(pyfile)
-
- e = UpdateEvent("file", pyfile.id, "collector" if not pyfile.package().queue else "queue")
- self.core.pullManager.addEvent(e)
-
- #--------------------------------------------------------------------------
- def updatePackage(self, pypack):
- """updates a package"""
- self.db.updatePackage(pypack)
-
- e = UpdateEvent("pack", pypack.id, "collector" if not pypack.queue else "queue")
- self.core.pullManager.addEvent(e)
-
- #--------------------------------------------------------------------------
- def getPackage(self, id):
- """return package instance"""
-
- if id in self.packageCache:
- return self.packageCache[id]
- else:
- return self.db.getPackage(id)
-
- #--------------------------------------------------------------------------
- def getPackageData(self, id):
- """returns dict with package information"""
- pack = self.getPackage(id)
-
- if not pack:
- return None
-
- pack = pack.toDict()[id]
-
- data = self.db.getPackageData(id)
-
- tmplist = []
-
- cache = self.cache.values()
- for x in cache:
- if int(x.toDbDict()[x.id]["package"]) == int(id):
- tmplist.append((x.id, x.toDbDict()[x.id]))
- data.update(tmplist)
-
- pack["links"] = data
-
- return pack
-
- #--------------------------------------------------------------------------
- def getFileData(self, id):
- """returns dict with file information"""
- if id in self.cache:
- return self.cache[id].toDbDict()
-
- return self.db.getLinkData(id)
-
- #--------------------------------------------------------------------------
- def getFile(self, id):
- """returns pyfile instance"""
- if id in self.cache:
- return self.cache[id]
- else:
- return self.db.getFile(id)
-
- #--------------------------------------------------------------------------
- @lock
- def getJob(self, occ):
- """get suitable job"""
-
- #@TODO clean mess
- #@TODO improve selection of valid jobs
-
- if occ in self.jobCache:
- if self.jobCache[occ]:
- id = self.jobCache[occ].pop()
- if id == "empty":
- pyfile = None
- self.jobCache[occ].append("empty")
- else:
- pyfile = self.getFile(id)
- else:
- jobs = self.db.getJob(occ)
- jobs.reverse()
- if not jobs:
- self.jobCache[occ].append("empty")
- pyfile = None
- else:
- self.jobCache[occ].extend(jobs)
- pyfile = self.getFile(self.jobCache[occ].pop())
-
- else:
- self.jobCache = {} #better not caching to much
- jobs = self.db.getJob(occ)
- jobs.reverse()
- self.jobCache[occ] = jobs
-
- if not jobs:
- self.jobCache[occ].append("empty")
- pyfile = None
- else:
- pyfile = self.getFile(self.jobCache[occ].pop())
-
- #@TODO: maybe the new job has to be approved...
-
-
- #pyfile = self.getFile(self.jobCache[occ].pop())
- return pyfile
-
- @lock
- def getDecryptJob(self):
- """return job for decrypting"""
- if "decrypt" in self.jobCache:
- return None
-
- plugins = self.core.pluginManager.crypterPlugins.keys() + self.core.pluginManager.containerPlugins.keys()
- plugins = str(tuple(plugins))
-
- jobs = self.db.getPluginJob(plugins)
- if jobs:
- return self.getFile(jobs[0])
- else:
- self.jobCache["decrypt"] = "empty"
- return None
-
- def getFileCount(self):
- """returns number of files"""
-
- if self.filecount == -1:
- self.filecount = self.db.filecount(1)
-
- return self.filecount
-
- def getQueueCount(self, force=False):
- """number of files that have to be processed"""
- if self.queuecount == -1 or force:
- self.queuecount = self.db.queuecount(1)
-
- return self.queuecount
-
- def checkAllLinksFinished(self):
- """checks if all files are finished and dispatch event"""
-
- if not self.getQueueCount(True):
- self.core.hookManager.dispatchEvent("allDownloadsFinished")
- self.core.log.debug("All downloads finished")
- return True
-
- return False
-
- def checkAllLinksProcessed(self, fid):
- """checks if all files was processed and pyload would idle now, needs fid which will be ignored when counting"""
-
- # reset count so statistic will update (this is called when dl was processed)
- self.resetCount()
-
- if not self.db.processcount(1, fid):
- self.core.hookManager.dispatchEvent("allDownloadsProcessed")
- self.core.log.debug("All downloads processed")
- return True
-
- return False
-
- def resetCount(self):
- self.queuecount = -1
-
- @lock
- @change
- def restartPackage(self, id):
- """restart package"""
- pyfiles = self.cache.values()
- for pyfile in pyfiles:
- if pyfile.packageid == id:
- self.restartFile(pyfile.id)
-
- self.db.restartPackage(id)
-
- if id in self.packageCache:
- self.packageCache[id].setFinished = False
-
- e = UpdateEvent("pack", id, "collector" if not self.getPackage(id).queue else "queue")
- self.core.pullManager.addEvent(e)
-
- @lock
- @change
- def restartFile(self, id):
- """ restart file"""
- if id in self.cache:
- self.cache[id].status = 3
- self.cache[id].name = self.cache[id].url
- self.cache[id].error = ""
- self.cache[id].abortDownload()
-
-
- self.db.restartFile(id)
-
- e = UpdateEvent("file", id, "collector" if not self.getFile(id).package().queue else "queue")
- self.core.pullManager.addEvent(e)
-
- @lock
- @change
- def setPackageLocation(self, id, queue):
- """push package to queue"""
-
- p = self.db.getPackage(id)
- oldorder = p.order
-
- e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
- self.core.pullManager.addEvent(e)
-
- self.db.clearPackageOrder(p)
-
- p = self.db.getPackage(id)
-
- p.queue = queue
- self.db.updatePackage(p)
-
- self.db.reorderPackage(p, -1, True)
-
- packs = self.packageCache.values()
- for pack in packs:
- if pack.queue != queue and pack.order > oldorder:
- pack.order -= 1
- pack.notifyChange()
-
- self.db.commit()
- self.releasePackage(id)
- p = self.getPackage(id)
-
- e = InsertEvent("pack", id, p.order, "collector" if not p.queue else "queue")
- self.core.pullManager.addEvent(e)
-
- @lock
- @change
- def reorderPackage(self, id, position):
- p = self.getPackage(id)
-
- e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
- self.core.pullManager.addEvent(e)
- self.db.reorderPackage(p, position)
-
- packs = self.packageCache.values()
- for pack in packs:
- if pack.queue != p.queue or pack.order < 0 or pack == p: continue
- if p.order > position:
- if pack.order >= position and pack.order < p.order:
- pack.order += 1
- pack.notifyChange()
- elif p.order < position:
- if pack.order <= position and pack.order > p.order:
- pack.order -= 1
- pack.notifyChange()
-
- p.order = position
- self.db.commit()
-
- e = InsertEvent("pack", id, position, "collector" if not p.queue else "queue")
- self.core.pullManager.addEvent(e)
-
- @lock
- @change
- def reorderFile(self, id, position):
- f = self.getFileData(id)
- f = f[id]
-
- e = RemoveEvent("file", id, "collector" if not self.getPackage(f["package"]).queue else "queue")
- self.core.pullManager.addEvent(e)
-
- self.db.reorderLink(f, position)
-
- pyfiles = self.cache.values()
- for pyfile in pyfiles:
- if pyfile.packageid != f["package"] or pyfile.order < 0: continue
- if f["order"] > position:
- if pyfile.order >= position and pyfile.order < f["order"]:
- pyfile.order += 1
- pyfile.notifyChange()
- elif f["order"] < position:
- if pyfile.order <= position and pyfile.order > f["order"]:
- pyfile.order -= 1
- pyfile.notifyChange()
-
- if id in self.cache:
- self.cache[id].order = position
-
- self.db.commit()
-
- e = InsertEvent("file", id, position, "collector" if not self.getPackage(f["package"]).queue else "queue")
- self.core.pullManager.addEvent(e)
-
- @change
- def updateFileInfo(self, data, pid):
- """ updates file info (name, size, status, url)"""
- ids = self.db.updateLinkInfo(data)
- e = UpdateEvent("pack", pid, "collector" if not self.getPackage(pid).queue else "queue")
- self.core.pullManager.addEvent(e)
-
- def checkPackageFinished(self, pyfile):
- """ checks if package is finished and calls hookmanager """
-
- ids = self.db.getUnfinished(pyfile.packageid)
- if not ids or (pyfile.id in ids and len(ids) == 1):
- if not pyfile.package().setFinished:
- self.core.log.info(_("Package finished: %s") % pyfile.package().name)
- self.core.hookManager.packageFinished(pyfile.package())
- pyfile.package().setFinished = True
-
-
- def reCheckPackage(self, pid):
- """ recheck links in package """
- data = self.db.getPackageData(pid)
-
- urls = []
-
- for pyfile in data.itervalues():
- if pyfile["status"] not in (0, 12, 13):
- urls.append((pyfile["url"], pyfile["plugin"]))
-
- self.core.threadManager.createInfoThread(urls, pid)
-
- @lock
- @change
- def deleteFinishedLinks(self):
- """ deletes finished links and packages, return deleted packages """
-
- old_packs = self.getInfoData(0)
- old_packs.update(self.getInfoData(1))
-
- self.db.deleteFinished()
-
- new_packs = self.db.getAllPackages(0)
- new_packs.update(self.db.getAllPackages(1))
- #get new packages only from db
-
- deleted = []
- for id in old_packs.iterkeys():
- if id not in new_packs:
- deleted.append(id)
- self.deletePackage(int(id))
-
- return deleted
-
- @lock
- @change
- def restartFailed(self):
- """ restart all failed links """
- self.db.restartFailed()
-
-class FileMethods:
- @style.queue
- def filecount(self, queue):
- """returns number of files in queue"""
- self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=?", (queue,))
- return self.c.fetchone()[0]
-
- @style.queue
- def queuecount(self, queue):
- """ number of files in queue not finished yet"""
- self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status NOT IN (0, 4)", (queue,))
- return self.c.fetchone()[0]
-
- @style.queue
- def processcount(self, queue, fid):
- """ number of files which have to be proccessed """
- self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status IN (2, 3, 5, 7, 12) AND l.id != ?", (queue, str(fid)))
- return self.c.fetchone()[0]
-
- @style.inner
- def _nextPackageOrder(self, queue=0):
- self.c.execute('SELECT MAX(packageorder) FROM packages WHERE queue=?', (queue,))
- max = self.c.fetchone()[0]
- if max is not None:
- return max + 1
- else:
- return 0
-
- @style.inner
- def _nextFileOrder(self, package):
- self.c.execute('SELECT MAX(linkorder) FROM links WHERE package=?', (package,))
- max = self.c.fetchone()[0]
- if max is not None:
- return max + 1
- else:
- return 0
-
- @style.queue
- def addLink(self, url, name, plugin, package):
- order = self._nextFileOrder(package)
- self.c.execute('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', (url, name, plugin, package, order))
- return self.c.lastrowid
-
- @style.queue
- def addLinks(self, links, package):
- """ links is a list of tupels (url, plugin)"""
- order = self._nextFileOrder(package)
- orders = [order + x for x in range(len(links))]
- links = [(x[0], x[0], x[1], package, o) for x, o in zip(links, orders)]
- self.c.executemany('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', links)
-
- @style.queue
- def addPackage(self, name, folder, queue):
- order = self._nextPackageOrder(queue)
- self.c.execute('INSERT INTO packages(name, folder, queue, packageorder) VALUES(?,?,?,?)', (name, folder, queue, order))
- return self.c.lastrowid
-
- @style.queue
- def deletePackage(self, p):
-
- self.c.execute('DELETE FROM links WHERE package=?', (str(p.id),))
- self.c.execute('DELETE FROM packages WHERE id=?', (str(p.id),))
- self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', (p.order, p.queue))
-
- @style.queue
- def deleteLink(self, f):
-
- self.c.execute('DELETE FROM links WHERE id=?', (str(f.id),))
- self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', (f.order, str(f.packageid)))
-
-
- @style.queue
- def getAllLinks(self, q):
- """return information about all links in queue q
-
- q0 queue
- q1 collector
-
- format:
-
- {
- id: {'name': name, ... 'package': id }, ...
- }
-
- """
- self.c.execute('SELECT l.id, l.url, l.name, l.size, l.status, l.error, l.plugin, l.package, l.linkorder FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? ORDER BY l.linkorder', (q,))
- data = {}
- for r in self.c:
- data[r[0]] = {
- 'id': r[0],
- 'url': r[1],
- 'name': r[2],
- 'size': r[3],
- 'format_size': formatSize(r[3]),
- 'status': r[4],
- 'statusmsg': self.manager.statusMsg[r[4]],
- 'error': r[5],
- 'plugin': r[6],
- 'package': r[7],
- 'order': r[8],
- }
-
- return data
-
- @style.queue
- def getAllPackages(self, q):
- """return information about packages in queue q
- (only useful in get all data)
-
- q0 queue
- q1 collector
-
- format:
-
- {
- id: {'name': name ... 'links': {}}, ...
- }
- """
- self.c.execute('SELECT p.id, p.name, p.folder, p.site, p.password, p.queue, p.packageorder, s.sizetotal, s.sizedone, s.linksdone, s.linkstotal \
- FROM packages p JOIN pstats s ON p.id = s.id \
- WHERE p.queue=? ORDER BY p.packageorder', str(q))
-
- data = {}
- for r in self.c:
- data[r[0]] = {
- 'id': r[0],
- 'name': r[1],
- 'folder': r[2],
- 'site': r[3],
- 'password': r[4],
- 'queue': r[5],
- 'order': r[6],
- 'sizetotal': int(r[7]),
- 'sizedone': r[8] if r[8] else 0, #these can be None
- 'linksdone': r[9] if r[9] else 0,
- 'linkstotal': r[10],
- 'links': {}
- }
-
- return data
-
- @style.queue
- def getLinkData(self, id):
- """get link information as dict"""
- self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?', (str(id),))
- data = {}
- r = self.c.fetchone()
- if not r:
- return None
- data[r[0]] = {
- 'id': r[0],
- 'url': r[1],
- 'name': r[2],
- 'size': r[3],
- 'format_size': formatSize(r[3]),
- 'status': r[4],
- 'statusmsg': self.manager.statusMsg[r[4]],
- 'error': r[5],
- 'plugin': r[6],
- 'package': r[7],
- 'order': r[8],
- }
-
- return data
-
- @style.queue
- def getPackageData(self, id):
- """get data about links for a package"""
- self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE package=? ORDER BY linkorder', (str(id),))
-
- data = {}
- for r in self.c:
- data[r[0]] = {
- 'id': r[0],
- 'url': r[1],
- 'name': r[2],
- 'size': r[3],
- 'format_size': formatSize(r[3]),
- 'status': r[4],
- 'statusmsg': self.manager.statusMsg[r[4]],
- 'error': r[5],
- 'plugin': r[6],
- 'package': r[7],
- 'order': r[8],
- }
-
- return data
-
-
- @style.async
- def updateLink(self, f):
- self.c.execute('UPDATE links SET url=?, name=?, size=?, status=?, error=?, package=? WHERE id=?', (f.url, f.name, f.size, f.status, f.error, str(f.packageid), str(f.id)))
-
- @style.queue
- def updatePackage(self, p):
- self.c.execute('UPDATE packages SET name=?, folder=?, site=?, password=?, queue=? WHERE id=?', (p.name, p.folder, p.site, p.password, p.queue, str(p.id)))
-
- @style.queue
- def updateLinkInfo(self, data):
- """ data is list of tupels (name, size, status, url) """
- self.c.executemany('UPDATE links SET name=?, size=?, status=? WHERE url=? AND status IN (1, 2, 3, 14)', data)
- ids = []
- self.c.execute('SELECT id FROM links WHERE url IN (\'%s\')' % "','".join([x[3] for x in data]))
- for r in self.c:
- ids.append(int(r[0]))
- return ids
-
- @style.queue
- def reorderPackage(self, p, position, noMove=False):
- if position == -1:
- position = self._nextPackageOrder(p.queue)
- if not noMove:
- if p.order > position:
- self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND packageorder < ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue))
- elif p.order < position:
- self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder <= ? AND packageorder > ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue))
-
- self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (position, str(p.id)))
-
- @style.queue
- def reorderLink(self, f, position):
- """ reorder link with f as dict for pyfile """
- if f["order"] > position:
- self.c.execute('UPDATE links SET linkorder=linkorder+1 WHERE linkorder >= ? AND linkorder < ? AND package=?', (position, f["order"], f["package"]))
- elif f["order"] < position:
- self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder <= ? AND linkorder > ? AND package=?', (position, f["order"], f["package"]))
-
- self.c.execute('UPDATE links SET linkorder=? WHERE id=?', (position, f["id"]))
-
- @style.queue
- def clearPackageOrder(self, p):
- self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (-1, str(p.id)))
- self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=? AND id != ?', (p.order, p.queue, str(p.id)))
-
- @style.async
- def restartFile(self, id):
- self.c.execute('UPDATE links SET status=3, error="" WHERE id=?', (str(id),))
-
- @style.async
- def restartPackage(self, id):
- self.c.execute('UPDATE links SET status=3 WHERE package=?', (str(id),))
-
- @style.queue
- def getPackage(self, id):
- """return package instance from id"""
- self.c.execute("SELECT name, folder, site, password, queue, packageorder FROM packages WHERE id=?", (str(id),))
- r = self.c.fetchone()
- if not r: return None
- return PyPackage(self.manager, id, * r)
-
- #--------------------------------------------------------------------------
- @style.queue
- def getFile(self, id):
- """return link instance from id"""
- self.c.execute("SELECT url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?", (str(id),))
- r = self.c.fetchone()
- if not r: return None
- return PyFile(self.manager, id, * r)
-
-
- @style.queue
- def getJob(self, occ):
- """return pyfile ids, which are suitable for download and dont use a occupied plugin"""
-
- #@TODO improve this hardcoded method
- pre = "('DLC', 'LinkList', 'SerienjunkiesOrg', 'CCF', 'RSDF')" #plugins which are processed in collector
-
- cmd = "("
- for i, item in enumerate(occ):
- if i: cmd += ", "
- cmd += "'%s'" % item
-
- cmd += ")"
-
- cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE ((p.queue=1 AND l.plugin NOT IN %s) OR l.plugin IN %s) AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % (cmd, pre)
-
- self.c.execute(cmd) # very bad!
-
- return [x[0] for x in self.c]
-
- @style.queue
- def getPluginJob(self, plugins):
- """returns pyfile ids with suited plugins"""
- cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE l.plugin IN %s AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % plugins
-
- self.c.execute(cmd) # very bad!
-
- return [x[0] for x in self.c]
-
- @style.queue
- def getUnfinished(self, pid):
- """return list of max length 3 ids with pyfiles in package not finished or processed"""
-
- self.c.execute("SELECT id FROM links WHERE package=? AND status NOT IN (0, 4, 13) LIMIT 3", (str(pid),))
- return [r[0] for r in self.c]
-
- @style.queue
- def deleteFinished(self):
- self.c.execute("DELETE FROM links WHERE status IN (0, 4)")
- self.c.execute("DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE packages.id=links.package)")
-
- @style.queue
- def restartFailed(self):
- self.c.execute("UPDATE links SET status=3, error='' WHERE status IN (6, 8, 9)")
-
- @style.queue
- def findDuplicates(self, id, folder, filename):
- """ checks if filename exists with different id and same package """
- self.c.execute("SELECT l.plugin FROM links as l INNER JOIN packages as p ON l.package=p.id AND p.folder=? WHERE l.id!=? AND l.status=0 AND l.name=?", (folder, id, filename))
- return self.c.fetchone()
-
- @style.queue
- def purgeLinks(self):
- self.c.execute("DELETE FROM links;")
- self.c.execute("DELETE FROM packages;")
-
-DatabaseBackend.registerSub(FileMethods)
diff --git a/module/database/StorageDatabase.py b/module/database/StorageDatabase.py
deleted file mode 100644
index 074d97d3e..000000000
--- a/module/database/StorageDatabase.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: mkaay
-"""
-
-from module.database import style
-from module.database import DatabaseBackend
-
-class StorageMethods:
- @style.queue
- def setStorage(db, identifier, key, value):
- db.c.execute("SELECT id FROM storage WHERE identifier=? AND key=?", (identifier, key))
- if db.c.fetchone() is not None:
- db.c.execute("UPDATE storage SET value=? WHERE identifier=? AND key=?", (value, identifier, key))
- else:
- db.c.execute("INSERT INTO storage (identifier, key, value) VALUES (?, ?, ?)", (identifier, key, value))
-
- @style.queue
- def getStorage(db, identifier, key=None):
- if key is not None:
- db.c.execute("SELECT value FROM storage WHERE identifier=? AND key=?", (identifier, key))
- row = db.c.fetchone()
- if row is not None:
- return row[0]
- else:
- db.c.execute("SELECT key, value FROM storage WHERE identifier=?", (identifier,))
- d = {}
- for row in db.c:
- d[row[0]] = row[1]
- return d
-
- @style.queue
- def delStorage(db, identifier, key):
- db.c.execute("DELETE FROM storage WHERE identifier=? AND key=?", (identifier, key))
-
-DatabaseBackend.registerSub(StorageMethods)
diff --git a/module/network/HTTPChunk.py b/module/network/HTTPChunk.py
deleted file mode 100644
index 719c3ed0b..000000000
--- a/module/network/HTTPChunk.py
+++ /dev/null
@@ -1,292 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-from os import remove, stat, fsync
-from os.path import exists
-from time import sleep
-from re import search
-from module.utils import fs_encode
-import codecs
-import pycurl
-
-from HTTPRequest import HTTPRequest
-
-class WrongFormat(Exception):
- pass
-
-
-class ChunkInfo:
- def __init__(self, name):
- self.name = unicode(name)
- self.size = 0
- self.resume = False
- self.chunks = []
-
- def __repr__(self):
- ret = "ChunkInfo: %s, %s\n" % (self.name, self.size)
- for i, c in enumerate(self.chunks):
- ret += "%s# %s\n" % (i, c[1])
-
- return ret
-
- def setSize(self, size):
- self.size = int(size)
-
- def addChunk(self, name, range):
- self.chunks.append((name, range))
-
- def clear(self):
- self.chunks = []
-
- def createChunks(self, chunks):
- self.clear()
- chunk_size = self.size / chunks
-
- current = 0
- for i in range(chunks):
- end = self.size - 1 if (i == chunks - 1) else current + chunk_size
- self.addChunk("%s.chunk%s" % (self.name, i), (current, end))
- current += chunk_size + 1
-
-
- def save(self):
- fs_name = fs_encode("%s.chunks" % self.name)
- fh = codecs.open(fs_name, "w", "utf_8")
- fh.write("name:%s\n" % self.name)
- fh.write("size:%s\n" % self.size)
- for i, c in enumerate(self.chunks):
- fh.write("#%d:\n" % i)
- fh.write("\tname:%s\n" % c[0])
- fh.write("\trange:%i-%i\n" % c[1])
- fh.close()
-
- @staticmethod
- def load(name):
- fs_name = fs_encode("%s.chunks" % name)
- if not exists(fs_name):
- raise IOError()
- fh = codecs.open(fs_name, "r", "utf_8")
- name = fh.readline()[:-1]
- size = fh.readline()[:-1]
- if name.startswith("name:") and size.startswith("size:"):
- name = name[5:]
- size = size[5:]
- else:
- fh.close()
- raise WrongFormat()
- ci = ChunkInfo(name)
- ci.loaded = True
- ci.setSize(size)
- while True:
- if not fh.readline(): #skip line
- break
- name = fh.readline()[1:-1]
- range = fh.readline()[1:-1]
- if name.startswith("name:") and range.startswith("range:"):
- name = name[5:]
- range = range[6:].split("-")
- else:
- raise WrongFormat()
-
- ci.addChunk(name, (long(range[0]), long(range[1])))
- fh.close()
- return ci
-
- def remove(self):
- fs_name = fs_encode("%s.chunks" % self.name)
- if exists(fs_name): remove(fs_name)
-
- def getCount(self):
- return len(self.chunks)
-
- def getChunkName(self, index):
- return self.chunks[index][0]
-
- def getChunkRange(self, index):
- return self.chunks[index][1]
-
-
-class HTTPChunk(HTTPRequest):
- def __init__(self, id, parent, range=None, resume=False):
- self.id = id
- self.p = parent # HTTPDownload instance
- self.range = range # tuple (start, end)
- self.resume = resume
- self.log = parent.log
-
- self.size = range[1] - range[0] if range else -1
- self.arrived = 0
- self.lastURL = self.p.referer
-
- self.c = pycurl.Curl()
-
- self.header = ""
- self.headerParsed = False #indicates if the header has been processed
-
- self.fp = None #file handle
-
- self.initHandle()
- self.setInterface(self.p.options)
-
- self.BOMChecked = False # check and remove byte order mark
-
- self.rep = None
-
- self.sleep = 0.000
- self.lastSize = 0
-
- def __repr__(self):
- return "<HTTPChunk id=%d, size=%d, arrived=%d>" % (self.id, self.size, self.arrived)
-
- @property
- def cj(self):
- return self.p.cj
-
- def getHandle(self):
- """ returns a Curl handle ready to use for perform/multiperform """
-
- self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj)
- self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody)
- self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader)
-
- # request all bytes, since some servers in russia seems to have a defect arihmetic unit
-
- fs_name = fs_encode(self.p.info.getChunkName(self.id))
- if self.resume:
- self.fp = open(fs_name, "ab")
- self.arrived = self.fp.tell()
- if not self.arrived:
- self.arrived = stat(fs_name).st_size
-
- if self.range:
- #do nothing if chunk already finished
- if self.arrived + self.range[0] >= self.range[1]: return None
-
- if self.id == len(self.p.info.chunks) - 1: #as last chunk dont set end range, so we get everything
- range = "%i-" % (self.arrived + self.range[0])
- else:
- range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1))
-
- self.log.debug("Chunked resume with range %s" % range)
- self.c.setopt(pycurl.RANGE, range)
- else:
- self.log.debug("Resume File from %i" % self.arrived)
- self.c.setopt(pycurl.RESUME_FROM, self.arrived)
-
- else:
- if self.range:
- if self.id == len(self.p.info.chunks) - 1: # see above
- range = "%i-" % self.range[0]
- else:
- range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1))
-
- self.log.debug("Chunked with range %s" % range)
- self.c.setopt(pycurl.RANGE, range)
-
- self.fp = open(fs_name, "wb")
-
- return self.c
-
- def writeHeader(self, buf):
- self.header += buf
- #@TODO forward headers?, this is possibly unneeeded, when we just parse valid 200 headers
- # as first chunk, we will parse the headers
- if not self.range and self.header.endswith("\r\n\r\n"):
- self.parseHeader()
- elif not self.range and buf.startswith("150") and "data connection" in buf.lower(): #: ftp file size parsing
- size = search(r"(\d+) bytes", buf)
- if size:
- self.p.size = int(size.group(1))
- self.p.chunkSupport = True
-
- self.headerParsed = True
-
- def writeBody(self, buf):
- #ignore BOM, it confuses unrar
- if not self.BOMChecked:
- if [ord(b) for b in buf[:3]] == [239, 187, 191]:
- buf = buf[3:]
- self.BOMChecked = True
-
- size = len(buf)
-
- self.arrived += size
-
- self.fp.write(buf)
-
- if self.p.bucket:
- sleep(self.p.bucket.consumed(size))
- else:
- # Avoid small buffers, increasing sleep time slowly if buffer size gets smaller
- # otherwise reduce sleep time percentual (values are based on tests)
- # So in general cpu time is saved without reducing bandwith too much
-
- if size < self.lastSize:
- self.sleep += 0.002
- else:
- self.sleep *= 0.7
-
- self.lastSize = size
-
- sleep(self.sleep)
-
- if self.range and self.arrived > self.size:
- return 0 #close if we have enough data
-
-
- def parseHeader(self):
- """parse data from recieved header"""
- for orgline in self.decodeResponse(self.header).splitlines():
- line = orgline.strip().lower()
- if line.startswith("accept-ranges") and "bytes" in line:
- self.p.chunkSupport = True
-
- if line.startswith("content-disposition") and "filename=" in line:
- name = orgline.partition("filename=")[2]
- name = name.replace('"', "").replace("'", "").replace(";", "").strip()
- self.p.nameDisposition = name
- self.log.debug("Content-Disposition: %s" % name)
-
- if not self.resume and line.startswith("content-length"):
- self.p.size = int(line.split(":")[1])
-
- self.headerParsed = True
-
- def stop(self):
- """The download will not proceed after next call of writeBody"""
- self.range = [0, 0]
- self.size = 0
-
- def resetRange(self):
- """ Reset the range, so the download will load all data available """
- self.range = None
-
- def setRange(self, range):
- self.range = range
- self.size = range[1] - range[0]
-
- def flushFile(self):
- """ flush and close file """
- self.fp.flush()
- fsync(self.fp.fileno()) #make sure everything was written to disk
- self.fp.close() #needs to be closed, or merging chunks will fail
-
- def close(self):
- """ closes everything, unusable after this """
- if self.fp: self.fp.close()
- self.c.close()
- if hasattr(self, "p"): del self.p
diff --git a/module/network/HTTPDownload.py b/module/network/HTTPDownload.py
deleted file mode 100644
index 20ac00e48..000000000
--- a/module/network/HTTPDownload.py
+++ /dev/null
@@ -1,325 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-from os import remove, fsync
-from os.path import dirname
-from time import sleep, time
-from shutil import move
-from logging import getLogger
-
-import pycurl
-
-from HTTPChunk import ChunkInfo, HTTPChunk
-from HTTPRequest import BadHeader
-
-from module.plugins.Plugin import Abort
-from module.utils import safe_join, fs_encode
-
-class HTTPDownload:
- """ loads a url http + ftp """
-
- def __init__(self, url, filename, get={}, post={}, referer=None, cj=None, bucket=None,
- options={}, progressNotify=None, disposition=False):
- self.url = url
- self.filename = filename #complete file destination, not only name
- self.get = get
- self.post = post
- self.referer = referer
- self.cj = cj #cookiejar if cookies are needed
- self.bucket = bucket
- self.options = options
- self.disposition = disposition
- # all arguments
-
- self.abort = False
- self.size = 0
- self.nameDisposition = None #will be parsed from content disposition
-
- self.chunks = []
-
- self.log = getLogger("log")
-
- try:
- self.info = ChunkInfo.load(filename)
- self.info.resume = True #resume is only possible with valid info file
- self.size = self.info.size
- self.infoSaved = True
- except IOError:
- self.info = ChunkInfo(filename)
-
- self.chunkSupport = None
- self.m = pycurl.CurlMulti()
-
- #needed for speed calculation
- self.lastArrived = []
- self.speeds = []
- self.lastSpeeds = [0, 0]
-
- self.progressNotify = progressNotify
-
- @property
- def speed(self):
- last = [sum(x) for x in self.lastSpeeds if x]
- return (sum(self.speeds) + sum(last)) / (1 + len(last))
-
- @property
- def arrived(self):
- return sum([c.arrived for c in self.chunks])
-
- @property
- def percent(self):
- if not self.size: return 0
- return (self.arrived * 100) / self.size
-
- def _copyChunks(self):
- init = fs_encode(self.info.getChunkName(0)) #initial chunk name
-
- if self.info.getCount() > 1:
- fo = open(init, "rb+") #first chunkfile
- for i in range(1, self.info.getCount()):
- #input file
- fo.seek(
- self.info.getChunkRange(i - 1)[1] + 1) #seek to beginning of chunk, to get rid of overlapping chunks
- fname = fs_encode("%s.chunk%d" % (self.filename, i))
- fi = open(fname, "rb")
- buf = 32 * 1024
- while True: #copy in chunks, consumes less memory
- data = fi.read(buf)
- if not data:
- break
- fo.write(data)
- fi.close()
- if fo.tell() < self.info.getChunkRange(i)[1]:
- fo.close()
- remove(init)
- self.info.remove() #there are probably invalid chunks
- raise Exception("Downloaded content was smaller than expected. Try to reduce download connections.")
- remove(fname) #remove chunk
- fo.close()
-
- if self.nameDisposition and self.disposition:
- self.filename = safe_join(dirname(self.filename), self.nameDisposition)
-
- move(init, fs_encode(self.filename))
- self.info.remove() #remove info file
-
- def download(self, chunks=1, resume=False):
- """ returns new filename or None """
-
- chunks = max(1, chunks)
- resume = self.info.resume and resume
-
- try:
- self._download(chunks, resume)
- except pycurl.error, e:
- #code 33 - no resume
- code = e.args[0]
- if code == 33:
- # try again without resume
- self.log.debug("Errno 33 -> Restart without resume")
-
- #remove old handles
- for chunk in self.chunks:
- self.closeChunk(chunk)
-
- return self._download(chunks, False)
- else:
- raise
- finally:
- self.close()
-
- if self.nameDisposition and self.disposition: return self.nameDisposition
- return None
-
- def _download(self, chunks, resume):
- if not resume:
- self.info.clear()
- self.info.addChunk("%s.chunk0" % self.filename, (0, 0)) #create an initial entry
-
- self.chunks = []
-
- init = HTTPChunk(0, self, None, resume) #initial chunk that will load complete file (if needed)
-
- self.chunks.append(init)
- self.m.add_handle(init.getHandle())
-
- lastFinishCheck = 0
- lastTimeCheck = 0
- chunksDone = set() # list of curl handles that are finished
- chunksCreated = False
- done = False
- if self.info.getCount() > 1: # This is a resume, if we were chunked originally assume still can
- self.chunkSupport = True
-
- while 1:
- #need to create chunks
- if not chunksCreated and self.chunkSupport and self.size: #will be setted later by first chunk
-
- if not resume:
- self.info.setSize(self.size)
- self.info.createChunks(chunks)
- self.info.save()
-
- chunks = self.info.getCount()
-
- init.setRange(self.info.getChunkRange(0))
-
- for i in range(1, chunks):
- c = HTTPChunk(i, self, self.info.getChunkRange(i), resume)
-
- handle = c.getHandle()
- if handle:
- self.chunks.append(c)
- self.m.add_handle(handle)
- else:
- #close immediatly
- self.log.debug("Invalid curl handle -> closed")
- c.close()
-
- chunksCreated = True
-
- while 1:
- ret, num_handles = self.m.perform()
- if ret != pycurl.E_CALL_MULTI_PERFORM:
- break
-
- t = time()
-
- # reduce these calls
- while lastFinishCheck + 0.5 < t:
- # list of failed curl handles
- failed = []
- ex = None # save only last exception, we can only raise one anyway
-
- num_q, ok_list, err_list = self.m.info_read()
- for c in ok_list:
- chunk = self.findChunk(c)
- try: # check if the header implies success, else add it to failed list
- chunk.verifyHeader()
- except BadHeader, e:
- self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e)))
- failed.append(chunk)
- ex = e
- else:
- chunksDone.add(c)
-
- for c in err_list:
- curl, errno, msg = c
- chunk = self.findChunk(curl)
- #test if chunk was finished
- if errno != 23 or "0 !=" not in msg:
- failed.append(chunk)
- ex = pycurl.error(errno, msg)
- self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(ex)))
- continue
-
- try: # check if the header implies success, else add it to failed list
- chunk.verifyHeader()
- except BadHeader, e:
- self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e)))
- failed.append(chunk)
- ex = e
- else:
- chunksDone.add(curl)
- if not num_q: # no more infos to get
-
- # check if init is not finished so we reset download connections
- # note that other chunks are closed and downloaded with init too
- if failed and init not in failed and init.c not in chunksDone:
- self.log.error(_("Download chunks failed, fallback to single connection | %s" % (str(ex))))
-
- #list of chunks to clean and remove
- to_clean = filter(lambda x: x is not init, self.chunks)
- for chunk in to_clean:
- self.closeChunk(chunk)
- self.chunks.remove(chunk)
- remove(fs_encode(self.info.getChunkName(chunk.id)))
-
- #let first chunk load the rest and update the info file
- init.resetRange()
- self.info.clear()
- self.info.addChunk("%s.chunk0" % self.filename, (0, self.size))
- self.info.save()
- elif failed:
- raise ex
-
- lastFinishCheck = t
-
- if len(chunksDone) >= len(self.chunks):
- if len(chunksDone) > len(self.chunks):
- self.log.warning("Finished download chunks size incorrect, please report bug.")
- done = True #all chunks loaded
-
- break
-
- if done:
- break #all chunks loaded
-
- # calc speed once per second, averaging over 3 seconds
- if lastTimeCheck + 1 < t:
- diff = [c.arrived - (self.lastArrived[i] if len(self.lastArrived) > i else 0) for i, c in
- enumerate(self.chunks)]
-
- self.lastSpeeds[1] = self.lastSpeeds[0]
- self.lastSpeeds[0] = self.speeds
- self.speeds = [float(a) / (t - lastTimeCheck) for a in diff]
- self.lastArrived = [c.arrived for c in self.chunks]
- lastTimeCheck = t
- self.updateProgress()
-
- if self.abort:
- raise Abort()
-
- #sleep(0.003) #supress busy waiting - limits dl speed to (1 / x) * buffersize
- self.m.select(1)
-
- for chunk in self.chunks:
- chunk.flushFile() #make sure downloads are written to disk
-
- self._copyChunks()
-
- def updateProgress(self):
- if self.progressNotify:
- self.progressNotify(self.percent)
-
- def findChunk(self, handle):
- """ linear search to find a chunk (should be ok since chunk size is usually low) """
- for chunk in self.chunks:
- if chunk.c == handle: return chunk
-
- def closeChunk(self, chunk):
- try:
- self.m.remove_handle(chunk.c)
- except pycurl.error, e:
- self.log.debug("Error removing chunk: %s" % str(e))
- finally:
- chunk.close()
-
- def close(self):
- """ cleanup """
- for chunk in self.chunks:
- self.closeChunk(chunk)
-
- self.chunks = []
- if hasattr(self, "m"):
- self.m.close()
- del self.m
- if hasattr(self, "cj"):
- del self.cj
- if hasattr(self, "info"):
- del self.info
diff --git a/module/network/HTTPRequest.py b/module/network/HTTPRequest.py
deleted file mode 100644
index 67635f944..000000000
--- a/module/network/HTTPRequest.py
+++ /dev/null
@@ -1,303 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-import pycurl
-
-from codecs import getincrementaldecoder, lookup, BOM_UTF8
-from urllib import quote, urlencode
-from httplib import responses
-from logging import getLogger
-from cStringIO import StringIO
-
-from module.plugins.Plugin import Abort
-
-def myquote(url):
- return quote(url.encode('utf_8') if isinstance(url, unicode) else url, safe="%/:=&?~#+!$,;'@()*[]")
-
-def myurlencode(data):
- data = dict(data)
- return urlencode(dict((x.encode('utf_8') if isinstance(x, unicode) else x, \
- y.encode('utf_8') if isinstance(y, unicode) else y ) for x, y in data.iteritems()))
-
-bad_headers = range(400, 404) + range(405, 418) + range(500, 506)
-
-class BadHeader(Exception):
- def __init__(self, code, content=""):
- Exception.__init__(self, "Bad server response: %s %s" % (code, responses[int(code)]))
- self.code = code
- self.content = content
-
-
-class HTTPRequest:
- def __init__(self, cookies=None, options=None):
- self.c = pycurl.Curl()
- self.rep = StringIO()
-
- self.cj = cookies #cookiejar
-
- self.lastURL = None
- self.lastEffectiveURL = None
- self.abort = False
- self.code = 0 # last http code
-
- self.header = ""
-
- self.headers = [] #temporary request header
-
- self.initHandle()
- self.setInterface(options)
-
- self.c.setopt(pycurl.WRITEFUNCTION, self.write)
- self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader)
-
- self.log = getLogger("log")
-
-
- def initHandle(self):
- """ sets common options to curl handle """
- self.c.setopt(pycurl.FOLLOWLOCATION, 1)
- self.c.setopt(pycurl.MAXREDIRS, 5)
- self.c.setopt(pycurl.CONNECTTIMEOUT, 30)
- self.c.setopt(pycurl.NOSIGNAL, 1)
- self.c.setopt(pycurl.NOPROGRESS, 1)
- if hasattr(pycurl, "AUTOREFERER"):
- self.c.setopt(pycurl.AUTOREFERER, 1)
- self.c.setopt(pycurl.SSL_VERIFYPEER, 0)
- self.c.setopt(pycurl.LOW_SPEED_TIME, 30)
- self.c.setopt(pycurl.LOW_SPEED_LIMIT, 5)
-
- #self.c.setopt(pycurl.VERBOSE, 1)
-
- self.c.setopt(pycurl.USERAGENT,
- "Mozilla/5.0 (Windows NT 6.1; Win64; x64;en; rv:5.0) Gecko/20110619 Firefox/5.0")
- if pycurl.version_info()[7]:
- self.c.setopt(pycurl.ENCODING, "gzip, deflate")
- self.c.setopt(pycurl.HTTPHEADER, ["Accept: */*",
- "Accept-Language: en-US, en",
- "Accept-Charset: ISO-8859-1, utf-8;q=0.7,*;q=0.7",
- "Connection: keep-alive",
- "Keep-Alive: 300",
- "Expect:"])
-
- def setInterface(self, options):
-
- interface, proxy, ipv6 = options["interface"], options["proxies"], options["ipv6"]
-
- if interface and interface.lower() != "none":
- self.c.setopt(pycurl.INTERFACE, str(interface))
-
- if proxy:
- if proxy["type"] == "socks4":
- self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS4)
- elif proxy["type"] == "socks5":
- self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
- else:
- self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP)
-
- self.c.setopt(pycurl.PROXY, str(proxy["address"]))
- self.c.setopt(pycurl.PROXYPORT, proxy["port"])
-
- if proxy["username"]:
- self.c.setopt(pycurl.PROXYUSERPWD, str("%s:%s" % (proxy["username"], proxy["password"])))
-
- if ipv6:
- self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_WHATEVER)
- else:
- self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_V4)
-
- if "auth" in options:
- self.c.setopt(pycurl.USERPWD, str(options["auth"]))
-
- if "timeout" in options:
- self.c.setopt(pycurl.LOW_SPEED_TIME, options["timeout"])
-
-
- def addCookies(self):
- """ put cookies from curl handle to cj """
- if self.cj:
- self.cj.addCookies(self.c.getinfo(pycurl.INFO_COOKIELIST))
-
- def getCookies(self):
- """ add cookies from cj to curl handle """
- if self.cj:
- for c in self.cj.getCookies():
- self.c.setopt(pycurl.COOKIELIST, c)
- return
-
- def clearCookies(self):
- self.c.setopt(pycurl.COOKIELIST, "")
-
- def setRequestContext(self, url, get, post, referer, cookies, multipart=False):
- """ sets everything needed for the request """
-
- url = myquote(url)
-
- if get:
- get = urlencode(get)
- url = "%s?%s" % (url, get)
-
- self.c.setopt(pycurl.URL, url)
- self.c.lastUrl = url
-
- if post:
- self.c.setopt(pycurl.POST, 1)
- if not multipart:
- if type(post) == unicode:
- post = str(post) #unicode not allowed
- elif type(post) == str:
- pass
- else:
- post = myurlencode(post)
-
- self.c.setopt(pycurl.POSTFIELDS, post)
- else:
- post = [(x, y.encode('utf8') if type(y) == unicode else y ) for x, y in post.iteritems()]
- self.c.setopt(pycurl.HTTPPOST, post)
- else:
- self.c.setopt(pycurl.POST, 0)
-
- if referer and self.lastURL:
- self.c.setopt(pycurl.REFERER, str(self.lastURL))
-
- if cookies:
- self.c.setopt(pycurl.COOKIEFILE, "")
- self.c.setopt(pycurl.COOKIEJAR, "")
- self.getCookies()
-
-
- def load(self, url, get={}, post={}, referer=True, cookies=True, just_header=False, multipart=False, decode=False):
- """ load and returns a given page """
-
- self.setRequestContext(url, get, post, referer, cookies, multipart)
-
- self.header = ""
-
- self.c.setopt(pycurl.HTTPHEADER, self.headers)
-
- if just_header:
- self.c.setopt(pycurl.FOLLOWLOCATION, 0)
- self.c.setopt(pycurl.NOBODY, 1)
- if post:
- self.c.setopt(pycurl.POST, 1)
- else:
- self.c.setopt(pycurl.HTTPGET, 1)
- self.c.perform()
- rep = self.header
-
- self.c.setopt(pycurl.FOLLOWLOCATION, 1)
- self.c.setopt(pycurl.NOBODY, 0)
-
- else:
- self.c.perform()
- rep = self.getResponse()
-
- self.c.setopt(pycurl.POSTFIELDS, "")
- self.lastEffectiveURL = self.c.getinfo(pycurl.EFFECTIVE_URL)
- self.code = self.verifyHeader()
-
- self.addCookies()
-
- if decode:
- rep = self.decodeResponse(rep)
-
- return rep
-
- def verifyHeader(self):
- """ raise an exceptions on bad headers """
- code = int(self.c.getinfo(pycurl.RESPONSE_CODE))
- if code in bad_headers:
- #404 will NOT raise an exception
- raise BadHeader(code, self.getResponse())
- return code
-
- def checkHeader(self):
- """ check if header indicates failure"""
- return int(self.c.getinfo(pycurl.RESPONSE_CODE)) not in bad_headers
-
- def getResponse(self):
- """ retrieve response from string io """
- if self.rep is None: return ""
- value = self.rep.getvalue()
- self.rep.close()
- self.rep = StringIO()
- return value
-
- def decodeResponse(self, rep):
- """ decode with correct encoding, relies on header """
- header = self.header.splitlines()
- encoding = "utf8" # default encoding
-
- for line in header:
- line = line.lower().replace(" ", "")
- if not line.startswith("content-type:") or\
- ("text" not in line and "application" not in line):
- continue
-
- none, delemiter, charset = line.rpartition("charset=")
- if delemiter:
- charset = charset.split(";")
- if charset:
- encoding = charset[0]
-
- try:
- #self.log.debug("Decoded %s" % encoding )
- if lookup(encoding).name == 'utf-8' and rep.startswith(BOM_UTF8):
- encoding = 'utf-8-sig'
-
- decoder = getincrementaldecoder(encoding)("replace")
- rep = decoder.decode(rep, True)
-
- #TODO: html_unescape as default
-
- except LookupError:
- self.log.debug("No Decoder foung for %s" % encoding)
- except Exception:
- self.log.debug("Error when decoding string from %s." % encoding)
-
- return rep
-
- def write(self, buf):
- """ writes response """
- if self.rep.tell() > 1000000 or self.abort:
- rep = self.getResponse()
- if self.abort: raise Abort()
- f = open("response.dump", "wb")
- f.write(rep)
- f.close()
- raise Exception("Loaded Url exceeded limit")
-
- self.rep.write(buf)
-
- def writeHeader(self, buf):
- """ writes header """
- self.header += buf
-
- def putHeader(self, name, value):
- self.headers.append("%s: %s" % (name, value))
-
- def clearHeaders(self):
- self.headers = []
-
- def close(self):
- """ cleanup, unusable after this """
- self.rep.close()
- if hasattr(self, "cj"):
- del self.cj
- if hasattr(self, "c"):
- self.c.close()
- del self.c
diff --git a/module/network/XDCCRequest.py b/module/network/XDCCRequest.py
deleted file mode 100644
index 74769da96..000000000
--- a/module/network/XDCCRequest.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: jeix
-"""
-
-import socket
-import re
-
-from os import remove
-from os.path import exists
-
-from time import time
-
-import struct
-from select import select
-
-from module.plugins.Plugin import Abort
-
-
-class XDCCRequest:
- def __init__(self, timeout=30, proxies={}):
-
- self.proxies = proxies
- self.timeout = timeout
-
- self.filesize = 0
- self.recv = 0
- self.speed = 0
-
- self.abort = False
-
- def createSocket(self):
- # proxytype = None
- # proxy = None
- # if self.proxies.has_key("socks5"):
- # proxytype = socks.PROXY_TYPE_SOCKS5
- # proxy = self.proxies["socks5"]
- # elif self.proxies.has_key("socks4"):
- # proxytype = socks.PROXY_TYPE_SOCKS4
- # proxy = self.proxies["socks4"]
- # if proxytype:
- # sock = socks.socksocket()
- # t = _parse_proxy(proxy)
- # sock.setproxy(proxytype, addr=t[3].split(":")[0], port=int(t[3].split(":")[1]), username=t[1], password=t[2])
- # else:
- # sock = socket.socket()
- # return sock
-
- return socket.socket()
-
- def download(self, ip, port, filename, irc, progressNotify=None):
-
- ircbuffer = ""
- lastUpdate = time()
- cumRecvLen = 0
-
- dccsock = self.createSocket()
-
- dccsock.settimeout(self.timeout)
- dccsock.connect((ip, port))
-
- if exists(filename):
- i = 0
- nameParts = filename.rpartition(".")
- while True:
- newfilename = "%s-%d%s%s" % (nameParts[0], i, nameParts[1], nameParts[2])
- i += 1
-
- if not exists(newfilename):
- filename = newfilename
- break
-
- fh = open(filename, "wb")
-
- # recv loop for dcc socket
- while True:
- if self.abort:
- dccsock.close()
- fh.close()
- remove(filename)
- raise Abort()
-
- self._keepAlive(irc, ircbuffer)
-
- data = dccsock.recv(4096)
- dataLen = len(data)
- self.recv += dataLen
-
- cumRecvLen += dataLen
-
- now = time()
- timespan = now - lastUpdate
- if timespan > 1:
- self.speed = cumRecvLen / timespan
- cumRecvLen = 0
- lastUpdate = now
-
- if progressNotify:
- progressNotify(self.percent)
-
- if not data:
- break
-
- fh.write(data)
-
- # acknowledge data by sending number of recceived bytes
- dccsock.send(struct.pack('!I', self.recv))
-
- dccsock.close()
- fh.close()
-
- return filename
-
- def _keepAlive(self, sock, readbuffer):
- fdset = select([sock], [], [], 0)
- if sock not in fdset[0]:
- return
-
- readbuffer += sock.recv(1024)
- temp = readbuffer.split("\n")
- readbuffer = temp.pop()
-
- for line in temp:
- line = line.rstrip()
- first = line.split()
- if first[0] == "PING":
- sock.send("PONG %s\r\n" % first[1])
-
- def abortDownloads(self):
- self.abort = True
-
- @property
- def size(self):
- return self.filesize
-
- @property
- def arrived(self):
- return self.recv
-
- @property
- def percent(self):
- if not self.filesize: return 0
- return (self.recv * 100) / self.filesize
-
- def close(self):
- pass
diff --git a/module/plugins/Account.py b/module/plugins/Account.py
deleted file mode 100644
index bd7f97cba..000000000
--- a/module/plugins/Account.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from random import choice
-from time import time
-from traceback import print_exc
-from threading import RLock
-
-from module.plugins.Plugin import Base
-from module.utils import compare_time, parseFileSize, lock
-
-
-class WrongPassword(Exception):
- pass
-
-
-class Account(Base):
- """
- Base class for every Account plugin.
- Just overwrite `login` and cookies will be stored and account becomes accessible in\
- associated hoster plugin. Plugin should also provide `loadAccountInfo`
- """
- __name__ = "Account"
- __type__ = "account"
- __version__ = "0.3"
-
- __description__ = """Base account plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
- #: after that time (in minutes) pyload will relogin the account
- login_timeout = 10 * 60
- #: after that time (in minutes) account data will be reloaded
- info_threshold = 10 * 60
-
-
- def __init__(self, manager, accounts):
- Base.__init__(self, manager.core)
-
- self.manager = manager
- self.accounts = {}
- self.infos = {} # cache for account information
- self.lock = RLock()
-
- self.timestamps = {}
- self.setAccounts(accounts)
- self.init()
-
- def init(self):
- pass
-
- def login(self, user, data, req):
- """login into account, the cookies will be saved so user can be recognized
-
- :param user: loginname
- :param data: data dictionary
- :param req: `Request` instance
- """
- pass
-
- @lock
- def _login(self, user, data):
- # set timestamp for login
- self.timestamps[user] = time()
-
- req = self.getAccountRequest(user)
- try:
- self.login(user, data, req)
- except WrongPassword:
- self.logWarning(
- _("Could not login with account %(user)s | %(msg)s") % {"user": user
- , "msg": _("Wrong Password")})
- success = data['valid'] = False
- except Exception, e:
- self.logWarning(
- _("Could not login with account %(user)s | %(msg)s") % {"user": user
- , "msg": e})
- success = data['valid'] = False
- if self.core.debug:
- print_exc()
- else:
- success = True
- finally:
- if req:
- req.close()
- return success
-
- def relogin(self, user):
- req = self.getAccountRequest(user)
- if req:
- req.cj.clear()
- req.close()
- if user in self.infos:
- del self.infos[user] #delete old information
-
- return self._login(user, self.accounts[user])
-
- def setAccounts(self, accounts):
- self.accounts = accounts
- for user, data in self.accounts.iteritems():
- self._login(user, data)
- self.infos[user] = {}
-
- def updateAccounts(self, user, password=None, options={}):
- """ updates account and return true if anything changed """
-
- if user in self.accounts:
- self.accounts[user]['valid'] = True #do not remove or accounts will not login
- if password:
- self.accounts[user]['password'] = password
- self.relogin(user)
- return True
- if options:
- before = self.accounts[user]['options']
- self.accounts[user]['options'].update(options)
- return self.accounts[user]['options'] != before
- else:
- self.accounts[user] = {"password": password, "options": options, "valid": True}
- self._login(user, self.accounts[user])
- return True
-
- def removeAccount(self, user):
- if user in self.accounts:
- del self.accounts[user]
- if user in self.infos:
- del self.infos[user]
- if user in self.timestamps:
- del self.timestamps[user]
-
- @lock
- def getAccountInfo(self, name, force=False):
- """retrieve account infos for an user, do **not** overwrite this method!\\
- just use it to retrieve infos in hoster plugins. see `loadAccountInfo`
-
- :param name: username
- :param force: reloads cached account information
- :return: dictionary with information
- """
- data = Account.loadAccountInfo(self, name)
-
- if force or name not in self.infos:
- self.logDebug("Get Account Info for %s" % name)
- req = self.getAccountRequest(name)
-
- try:
- infos = self.loadAccountInfo(name, req)
- if not type(infos) == dict:
- raise Exception("Wrong return format")
- except Exception, e:
- infos = {"error": str(e)}
-
- if req: req.close()
-
- self.logDebug("Account Info: %s" % str(infos))
-
- infos['timestamp'] = time()
- self.infos[name] = infos
- elif "timestamp" in self.infos[name] and self.infos[name][
- "timestamp"] + self.info_threshold * 60 < time():
- self.logDebug("Reached timeout for account data")
- self.scheduleRefresh(name)
-
- data.update(self.infos[name])
- return data
-
- def isPremium(self, user):
- info = self.getAccountInfo(user)
- return info['premium']
-
- def loadAccountInfo(self, name, req=None):
- """this should be overwritten in account plugin,\
- and retrieving account information for user
-
- :param name:
- :param req: `Request` instance
- :return:
- """
- return {
- "validuntil": None, # -1 for unlimited
- "login": name,
- #"password": self.accounts[name]['password'], #@XXX: security
- "options": self.accounts[name]['options'],
- "valid": self.accounts[name]['valid'],
- "trafficleft": None, # in kb, -1 for unlimited
- "maxtraffic": None,
- "premium": True, #useful for free accounts
- "timestamp": 0, #time this info was retrieved
- "type": self.__name__,
- }
-
- def getAllAccounts(self, force=False):
- return [self.getAccountInfo(user, force) for user, data in self.accounts.iteritems()]
-
- def getAccountRequest(self, user=None):
- if not user:
- user, data = self.selectAccount()
- if not user:
- return None
-
- req = self.core.requestFactory.getRequest(self.__name__, user)
- return req
-
- def getAccountCookies(self, user=None):
- if not user:
- user, data = self.selectAccount()
- if not user:
- return None
-
- cj = self.core.requestFactory.getCookieJar(self.__name__, user)
- return cj
-
- def getAccountData(self, user):
- return self.accounts[user]
-
- def selectAccount(self):
- """ returns an valid account name and data"""
- usable = []
- for user, data in self.accounts.iteritems():
- if not data['valid']: continue
-
- if "time" in data['options'] and data['options']['time']:
- time_data = ""
- try:
- time_data = data['options']['time'][0]
- start, end = time_data.split("-")
- if not compare_time(start.split(":"), end.split(":")):
- continue
- except:
- self.logWarning(_("Your Time %s has wrong format, use: 1:22-3:44") % time_data)
-
- if user in self.infos:
- if "validuntil" in self.infos[user]:
- if self.infos[user]['validuntil'] > 0 and time() > self.infos[user]['validuntil']:
- continue
- if "trafficleft" in self.infos[user]:
- if self.infos[user]['trafficleft'] == 0:
- continue
-
- usable.append((user, data))
-
- if not usable: return None, None
- return choice(usable)
-
- def canUse(self):
- return False if self.selectAccount() == (None, None) else True
-
- def parseTraffic(self, string): #returns kbyte
- return parseFileSize(string) / 1024
-
- def wrongPassword(self):
- raise WrongPassword
-
- def empty(self, user):
- if user in self.infos:
- self.logWarning(_("Account %s has not enough traffic, checking again in 30min") % user)
-
- self.infos[user].update({"trafficleft": 0})
- self.scheduleRefresh(user, 30 * 60)
-
- def expired(self, user):
- if user in self.infos:
- self.logWarning(_("Account %s is expired, checking again in 1h") % user)
-
- self.infos[user].update({"validuntil": time() - 1})
- self.scheduleRefresh(user, 60 * 60)
-
- def scheduleRefresh(self, user, time=0, force=True):
- """ add task to refresh account info to sheduler """
- self.logDebug("Scheduled Account refresh for %s in %s seconds." % (user, time))
- self.core.scheduler.addJob(time, self.getAccountInfo, [user, force])
-
- @lock
- def checkLogin(self, user):
- """ checks if user is still logged in """
- if user in self.timestamps:
- if self.login_timeout > 0 and self.timestamps[user] + self.login_timeout * 60 < time():
- self.logDebug("Reached login timeout for %s" % user)
- return self.relogin(user)
- else:
- return True
- else:
- return False
diff --git a/module/plugins/AccountManager.py b/module/plugins/AccountManager.py
deleted file mode 100644
index 6c908738c..000000000
--- a/module/plugins/AccountManager.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from os.path import exists
-from shutil import copy
-
-from threading import Lock
-
-from module.PullEvents import AccountUpdateEvent
-from module.utils import chmod, lock
-
-ACC_VERSION = 1
-
-
-class AccountManager:
- """manages all accounts"""
-
- #--------------------------------------------------------------------------
- def __init__(self, core):
- """Constructor"""
-
- self.core = core
- self.lock = Lock()
-
- self.initPlugins()
- self.saveAccounts() # save to add categories to conf
-
- def initPlugins(self):
- self.accounts = {} # key = ( plugin )
- self.plugins = {}
-
- self.initAccountPlugins()
- self.loadAccounts()
-
- def getAccountPlugin(self, plugin):
- """get account instance for plugin or None if anonymous"""
- if plugin in self.accounts:
- if plugin not in self.plugins:
- try:
- self.plugins[plugin] = self.core.pluginManager.loadClass("accounts", plugin)(self, self.accounts[plugin])
- except TypeError: # The account class no longer exists (blacklisted plugin). Skipping the account to avoid crash
- return None
-
- return self.plugins[plugin]
- else:
- return None
-
- def getAccountPlugins(self):
- """ get all account instances"""
-
- plugins = []
- for plugin in self.accounts.keys():
- plugins.append(self.getAccountPlugin(plugin))
-
- return plugins
-
- #--------------------------------------------------------------------------
- def loadAccounts(self):
- """loads all accounts available"""
-
- if not exists("accounts.conf"):
- f = open("accounts.conf", "wb")
- f.write("version: " + str(ACC_VERSION))
- f.close()
-
- f = open("accounts.conf", "rb")
- content = f.readlines()
- version = content[0].split(":")[1].strip() if content else ""
- f.close()
-
- if not version or int(version) < ACC_VERSION:
- copy("accounts.conf", "accounts.backup")
- f = open("accounts.conf", "wb")
- f.write("version: " + str(ACC_VERSION))
- f.close()
- self.core.log.warning(_("Account settings deleted, due to new config format."))
- return
-
- plugin = ""
- name = ""
-
- for line in content[1:]:
- line = line.strip()
-
- if not line: continue
- if line.startswith("#"): continue
- if line.startswith("version"): continue
-
- if line.endswith(":") and line.count(":") == 1:
- plugin = line[:-1]
- self.accounts[plugin] = {}
-
- elif line.startswith("@"):
- try:
- option = line[1:].split()
- self.accounts[plugin][name]['options'][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:])
- except:
- pass
-
- elif ":" in line:
- name, sep, pw = line.partition(":")
- self.accounts[plugin][name] = {"password": pw, "options": {}, "valid": True}
-
- #--------------------------------------------------------------------------
- def saveAccounts(self):
- """save all account information"""
-
- f = open("accounts.conf", "wb")
- f.write("version: " + str(ACC_VERSION) + "\n")
-
- for plugin, accounts in self.accounts.iteritems():
- f.write("\n")
- f.write(plugin+":\n")
-
- for name,data in accounts.iteritems():
- f.write("\n\t%s:%s\n" % (name,data['password']) )
- if data['options']:
- for option, values in data['options'].iteritems():
- f.write("\t@%s %s\n" % (option, " ".join(values)))
-
- f.close()
- chmod(f.name, 0600)
-
- #--------------------------------------------------------------------------
- def initAccountPlugins(self):
- """init names"""
- for name in self.core.pluginManager.getAccountPlugins():
- self.accounts[name] = {}
-
- @lock
- def updateAccount(self, plugin , user, password=None, options={}):
- """add or update account"""
- if plugin in self.accounts:
- p = self.getAccountPlugin(plugin)
- updated = p.updateAccounts(user, password, options)
- #since accounts is a ref in plugin self.accounts doesnt need to be updated here
-
- self.saveAccounts()
- if updated: p.scheduleRefresh(user, force=False)
-
- @lock
- def removeAccount(self, plugin, user):
- """remove account"""
-
- if plugin in self.accounts:
- p = self.getAccountPlugin(plugin)
- p.removeAccount(user)
-
- self.saveAccounts()
-
- @lock
- def getAccountInfos(self, force=True, refresh=False):
- data = {}
-
- if refresh:
- self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos)
- force = False
-
- for p in self.accounts.keys():
- if self.accounts[p]:
- p = self.getAccountPlugin(p)
- if p:
- data[p.__name__] = p.getAllAccounts(force)
- else: # When an account has been skipped, p is None
- data[p] = []
- else:
- data[p] = []
- e = AccountUpdateEvent()
- self.core.pullManager.addEvent(e)
- return data
-
- def sendChange(self):
- e = AccountUpdateEvent()
- self.core.pullManager.addEvent(e)
diff --git a/module/plugins/Container.py b/module/plugins/Container.py
deleted file mode 100644
index 59efbd8dd..000000000
--- a/module/plugins/Container.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from os import remove
-from os.path import basename, exists
-
-from module.plugins.Crypter import Crypter
-from module.utils import safe_join
-
-
-class Container(Crypter):
- __name__ = "Container"
- __type__ = "container"
- __version__ = "0.1"
-
- __pattern__ = None
-
- __description__ = """Base container decrypter plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def preprocessing(self, thread):
- """prepare"""
-
- self.setup()
- self.thread = thread
-
- self.loadToDisk()
-
- self.decrypt(self.pyfile)
- self.deleteTmp()
-
- self.createPackages()
-
-
- def loadToDisk(self):
- """loads container to disk if its stored remotely and overwrite url,
- or check existent on several places at disk"""
-
- if self.pyfile.url.startswith("http"):
- self.pyfile.name = re.findall("([^\/=]+)", self.pyfile.url)[-1]
- content = self.load(self.pyfile.url)
- self.pyfile.url = safe_join(self.config['general']['download_folder'], self.pyfile.name)
- f = open(self.pyfile.url, "wb" )
- f.write(content)
- f.close()
-
- else:
- self.pyfile.name = basename(self.pyfile.url)
- if not exists(self.pyfile.url):
- if exists(safe_join(pypath, self.pyfile.url)):
- self.pyfile.url = safe_join(pypath, self.pyfile.url)
- else:
- self.fail(_("File not exists."))
-
-
- def deleteTmp(self):
- if self.pyfile.name.startswith("tmp_"):
- remove(self.pyfile.url)
diff --git a/module/plugins/Crypter.py b/module/plugins/Crypter.py
deleted file mode 100644
index b127777e7..000000000
--- a/module/plugins/Crypter.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Plugin import Plugin
-
-
-class Crypter(Plugin):
- __name__ = "Crypter"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = None
-
- __description__ = """Base decrypter plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def __init__(self, pyfile):
- Plugin.__init__(self, pyfile)
-
- #: Put all packages here. It's a list of tuples like: ( name, [list of links], folder )
- self.packages = []
-
- #: List of urls, pyLoad will generate packagenames
- self.urls = []
-
- self.multiDL = True
- self.limitDL = 0
-
-
- def preprocessing(self, thread):
- """prepare"""
- self.setup()
- self.thread = thread
-
- self.decrypt(self.pyfile)
-
- self.createPackages()
-
-
- def decrypt(self, pyfile):
- raise NotImplementedError
-
- def createPackages(self):
- """ create new packages from self.packages """
- for pack in self.packages:
-
- name, links, folder = pack
-
- self.logDebug("Parsed package %(name)s with %(len)d links" % {"name": name, "len": len(links)})
-
- links = [x.decode("utf-8") for x in links]
-
- pid = self.api.addPackage(name, links, self.pyfile.package().queue)
-
- if name != folder is not None:
- self.api.setPackageData(pid, {"folder": folder}) #: Due to not break API addPackage method right now
- self.logDebug("Set package %(name)s folder to %(folder)s" % {"name": name, "folder": folder})
-
- if self.pyfile.package().password:
- self.api.setPackageData(pid, {"password": self.pyfile.package().password})
-
- if self.urls:
- self.api.generateAndAddPackages(self.urls)
diff --git a/module/plugins/Hook.py b/module/plugins/Hook.py
deleted file mode 100644
index e72ab7ebb..000000000
--- a/module/plugins/Hook.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from traceback import print_exc
-
-from module.plugins.Plugin import Base
-
-
-class Expose(object):
- """ used for decoration to declare rpc services """
-
- def __new__(cls, f, *args, **kwargs):
- hookManager.addRPC(f.__module__, f.func_name, f.func_doc)
- return f
-
-
-def threaded(f):
-
- def run(*args,**kwargs):
- hookManager.startThread(f, *args, **kwargs)
- return run
-
-
-class Hook(Base):
- """
- Base class for hook plugins.
- """
- __name__ = "Hook"
- __type__ = "hook"
- __version__ = "0.2"
-
- __config__ = [("name", "type", "desc", "default")]
-
- __description__ = """Interface for hook"""
- __author_name__ = ("mkaay", "RaNaN")
- __author_mail__ = ("mkaay@mkaay.de", "RaNaN@pyload.org")
-
- #: automatically register event listeners for functions, attribute will be deleted dont use it yourself
- event_map = None
-
- # Alternative to event_map
- #: List of events the plugin can handle, name the functions exactly like eventname.
- event_list = None # dont make duplicate entries in event_map
-
- #: periodic call interval in secondc
- interval = 60
-
-
- def __init__(self, core, manager):
- Base.__init__(self, core)
-
- #: Provide information in dict here, usable by API `getInfo`
- self.info = None
-
- #: Callback of periodical job task, used by hookmanager
- self.cb = None
-
- #: `HookManager`
- self.manager = manager
-
- #register events
- if self.event_map:
- for event, funcs in self.event_map.iteritems():
- if type(funcs) in (list, tuple):
- for f in funcs:
- self.manager.addEvent(event, getattr(self,f))
- else:
- self.manager.addEvent(event, getattr(self,funcs))
-
- #delete for various reasons
- self.event_map = None
-
- if self.event_list:
- for f in self.event_list:
- self.manager.addEvent(f, getattr(self,f))
-
- self.event_list = None
-
- self.setup()
- self.initPeriodical()
-
-
- def initPeriodical(self):
- if self.interval >=1:
- self.cb = self.core.scheduler.addJob(0, self._periodical, threaded=False)
-
- def _periodical(self):
- try:
- if self.isActivated(): self.periodical()
- except Exception, e:
- self.logError(_("Error executing hooks: %s") % str(e))
- if self.core.debug:
- print_exc()
-
- self.cb = self.core.scheduler.addJob(self.interval, self._periodical, threaded=False)
-
-
- def __repr__(self):
- return "<Hook %s>" % self.__name__
-
- def setup(self):
- """ more init stuff if needed """
- pass
-
- def unload(self):
- """ called when hook was deactivated """
- pass
-
- def isActivated(self):
- """ checks if hook is activated"""
- return self.config.getPlugin(self.__name__, "activated")
-
-
- #event methods - overwrite these if needed
- def coreReady(self):
- pass
-
- def coreExiting(self):
- pass
-
- def downloadPreparing(self, pyfile):
- pass
-
- def downloadFinished(self, pyfile):
- pass
-
- def downloadFailed(self, pyfile):
- pass
-
- def packageFinished(self, pypack):
- pass
-
- def beforeReconnecting(self, ip):
- pass
-
- def afterReconnecting(self, ip):
- pass
-
- def periodical(self):
- pass
-
- def newCaptchaTask(self, task):
- """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """
- pass
-
- def captchaCorrect(self, task):
- pass
-
- def captchaInvalid(self, task):
- pass
diff --git a/module/plugins/Hoster.py b/module/plugins/Hoster.py
deleted file mode 100644
index bedfce129..000000000
--- a/module/plugins/Hoster.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Plugin import Plugin
-
-
-def getInfo(self):
- #result = [ .. (name, size, status, url) .. ]
- return
-
-
-class Hoster(Plugin):
- __name__ = "Hoster"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = None
-
- __description__ = """Base hoster plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/Plugin.py b/module/plugins/Plugin.py
deleted file mode 100644
index 03ff58418..000000000
--- a/module/plugins/Plugin.py
+++ /dev/null
@@ -1,629 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time, sleep
-from random import randint
-
-import os
-from os import remove, makedirs, chmod, stat
-from os.path import exists, join
-
-if os.name != "nt":
- from os import chown
- from pwd import getpwnam
- from grp import getgrnam
-
-from itertools import islice
-
-from module.utils import safe_join, safe_filename, fs_encode, fs_decode
-
-def chunks(iterable, size):
- it = iter(iterable)
- item = list(islice(it, size))
- while item:
- yield item
- item = list(islice(it, size))
-
-
-class Abort(Exception):
- """ raised when aborted """
-
-
-class Fail(Exception):
- """ raised when failed """
-
-
-class Reconnect(Exception):
- """ raised when reconnected """
-
-
-class Retry(Exception):
- """ raised when start again from beginning """
-
-
-class SkipDownload(Exception):
- """ raised when download should be skipped """
-
-
-class Base(object):
- """
- A Base class with log/config/db methods *all* plugin types can use
- """
-
- def __init__(self, core):
- #: Core instance
- self.core = core
- #: logging instance
- self.log = core.log
- #: core config
- self.config = core.config
-
- #log functions
- def logInfo(self, *args):
- self.log.info("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
-
- def logWarning(self, *args):
- self.log.warning("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
-
- def logError(self, *args):
- self.log.error("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
-
- def logDebug(self, *args):
- self.log.debug("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
-
-
- def setConf(self, option, value):
- """ see `setConfig` """
- self.config.setPlugin(self.__name__, option, value)
-
- def setConfig(self, option, value):
- """ Set config value for current plugin
-
- :param option:
- :param value:
- :return:
- """
- self.setConf(option, value)
-
- #: Deprecated method
- def getConf(self, option):
- """ see `getConfig` """
- return self.getConfig(option)
-
- def getConfig(self, option):
- """ Returns config value for current plugin
-
- :param option:
- :return:
- """
- return self.config.getPlugin(self.__name__, option)
-
- def setStorage(self, key, value):
- """ Saves a value persistently to the database """
- self.core.db.setStorage(self.__name__, key, value)
-
- def store(self, key, value):
- """ same as `setStorage` """
- self.core.db.setStorage(self.__name__, key, value)
-
- def getStorage(self, key=None, default=None):
- """ Retrieves saved value or dict of all saved entries if key is None """
- if key is not None:
- return self.core.db.getStorage(self.__name__, key) or default
- return self.core.db.getStorage(self.__name__, key)
-
- def retrieve(self, *args, **kwargs):
- """ same as `getStorage` """
- return self.getStorage(*args, **kwargs)
-
- def delStorage(self, key):
- """ Delete entry in db """
- self.core.db.delStorage(self.__name__, key)
-
-
-class Plugin(Base):
- """
- Base plugin for hoster/crypter.
- Overwrite `process` / `decrypt` in your subclassed plugin.
- """
- __name__ = "Plugin"
- __type__ = "hoster"
- __version__ = "0.5"
-
- __pattern__ = None
- __config__ = [("name", "type", "desc", "default")]
-
- __description__ = """Base plugin"""
- __author_name__ = ("RaNaN", "spoob", "mkaay")
- __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org", "mkaay@mkaay.de")
-
-
- def __init__(self, pyfile):
- Base.__init__(self, pyfile.m.core)
-
- #: engage wan reconnection
- self.wantReconnect = False
-
- #: enable simultaneous processing of multiple downloads
- self.multiDL = True
- self.limitDL = 0
-
- #: chunk limit
- self.chunkLimit = 1
- self.resumeDownload = False
-
- #: time() + wait in seconds
- self.waitUntil = 0
- self.waiting = False
-
- #: captcha reader instance
- self.ocr = None
-
- #: account handler instance, see :py:class:`Account`
- self.account = pyfile.m.core.accountManager.getAccountPlugin(self.__name__)
-
- #: premium status
- self.premium = False
- #: username/login
- self.user = None
-
- if self.account and not self.account.canUse():
- self.account = None
-
- if self.account:
- self.user, data = self.account.selectAccount()
- #: Browser instance, see `network.Browser`
- self.req = self.account.getAccountRequest(self.user)
- self.chunkLimit = -1 # chunk limit, -1 for unlimited
- #: enables resume (will be ignored if server dont accept chunks)
- self.resumeDownload = True
- self.multiDL = True #every hoster with account should provide multiple downloads
- #: premium status
- self.premium = self.account.isPremium(self.user)
- else:
- self.req = pyfile.m.core.requestFactory.getRequest(self.__name__)
-
- #: associated pyfile instance, see `PyFile`
- self.pyfile = pyfile
-
- self.thread = None # holds thread in future
-
- #: location where the last call to download was saved
- self.lastDownload = ""
- #: re match of the last call to `checkDownload`
- self.lastCheck = None
-
- #: js engine, see `JsEngine`
- self.js = self.core.js
-
- #: captcha task
- self.cTask = None
-
- #: amount of retries already made
- self.retries = 0
-
- #: some plugins store html code here
- self.html = None
-
- #: quick caller for API
- self.api = self.core.api
-
- self.init()
-
- def getChunkCount(self):
- if self.chunkLimit <= 0:
- return self.config['download']['chunks']
- return min(self.config['download']['chunks'], self.chunkLimit)
-
- def __call__(self):
- return self.__name__
-
- def init(self):
- """initialize the plugin (in addition to `__init__`)"""
- pass
-
- def setup(self):
- """ setup for enviroment and other things, called before downloading (possibly more than one time)"""
- pass
-
- def preprocessing(self, thread):
- """ handles important things to do before starting """
- self.thread = thread
-
- if self.account:
- self.account.checkLogin(self.user)
- else:
- self.req.clearCookies()
-
- self.setup()
-
- self.pyfile.setStatus("starting")
-
- return self.process(self.pyfile)
-
-
- def process(self, pyfile):
- """the 'main' method of every plugin, you **have to** overwrite it"""
- raise NotImplementedError
-
- def resetAccount(self):
- """ dont use account and retry download """
- self.account = None
- self.req = self.core.requestFactory.getRequest(self.__name__)
- self.retry()
-
- def checksum(self, local_file=None):
- """
- return codes:
- 0 - checksum ok
- 1 - checksum wrong
- 5 - can't get checksum
- 10 - not implemented
- 20 - unknown error
- """
- #@TODO checksum check hook
-
- return True, 10
-
-
- def setWait(self, seconds, reconnect=None):
- """Set a specific wait time later used with `wait`
-
- :param seconds: wait time in seconds
- :param reconnect: True if a reconnect would avoid wait time
- """
- if reconnect:
- self.wantReconnect = True
- self.pyfile.waitUntil = time() + int(seconds)
-
- def wait(self, seconds=None, reconnect=None):
- """ Waits the time previously set or use these from arguments. See `setWait`
- """
- if seconds:
- self.setWait(seconds, reconnect)
-
- self._wait()
-
- def _wait(self):
- self.waiting = True
- self.pyfile.setStatus("waiting")
-
- while self.pyfile.waitUntil > time():
- self.thread.m.reconnecting.wait(2)
-
- if self.pyfile.abort:
- raise Abort
- if self.thread.m.reconnecting.isSet():
- self.waiting = False
- self.wantReconnect = False
- raise Reconnect
-
- self.waiting = False
- self.pyfile.setStatus("starting")
-
- def fail(self, reason):
- """ fail and give reason """
- raise Fail(reason)
-
- def offline(self):
- """ fail and indicate file is offline """
- raise Fail("offline")
-
- def tempOffline(self):
- """ fail and indicates file ist temporary offline, the core may take consequences """
- raise Fail("temp. offline")
-
- def retry(self, max_tries=3, wait_time=1, reason=""):
- """Retries and begin again from the beginning
-
- :param max_tries: number of maximum retries
- :param wait_time: time to wait in seconds
- :param reason: reason for retrying, will be passed to fail if max_tries reached
- """
- if 0 < max_tries <= self.retries:
- if not reason: reason = "Max retries reached"
- raise Fail(reason)
-
- self.wantReconnect = False
- self.setWait(wait_time)
- self.wait()
-
- self.retries += 1
- raise Retry(reason)
-
- def invalidCaptcha(self):
- if self.cTask:
- self.cTask.invalid()
-
- def correctCaptcha(self):
- if self.cTask:
- self.cTask.correct()
-
- def decryptCaptcha(self, url, get={}, post={}, cookies=False, forceUser=False, imgtype='jpg',
- result_type='textual'):
- """ Loads a captcha and decrypts it with ocr, plugin, user input
-
- :param url: url of captcha image
- :param get: get part for request
- :param post: post part for request
- :param cookies: True if cookies should be enabled
- :param forceUser: if True, ocr is not used
- :param imgtype: Type of the Image
- :param result_type: 'textual' if text is written on the captcha\
- or 'positional' for captcha where the user have to click\
- on a specific region on the captcha
-
- :return: result of decrypting
- """
-
- img = self.load(url, get=get, post=post, cookies=cookies)
-
- id = ("%.2f" % time())[-6:].replace(".", "")
- temp_file = open(join("tmp", "tmpCaptcha_%s_%s.%s" % (self.__name__, id, imgtype)), "wb")
- temp_file.write(img)
- temp_file.close()
-
- has_plugin = self.__name__ in self.core.pluginManager.captchaPlugins
-
- if self.core.captcha:
- Ocr = self.core.pluginManager.loadClass("captcha", self.__name__)
- else:
- Ocr = None
-
- if Ocr and not forceUser:
- sleep(randint(3000, 5000) / 1000.0)
- if self.pyfile.abort: raise Abort
-
- ocr = Ocr()
- result = ocr.get_captcha(temp_file.name)
- else:
- captchaManager = self.core.captchaManager
- task = captchaManager.newTask(img, imgtype, temp_file.name, result_type)
- self.cTask = task
- captchaManager.handleCaptcha(task)
-
- while task.isWaiting():
- if self.pyfile.abort:
- captchaManager.removeTask(task)
- raise Abort
- sleep(1)
-
- captchaManager.removeTask(task)
-
- if task.error and has_plugin: #ignore default error message since the user could use OCR
- self.fail(_("Pil and tesseract not installed and no Client connected for captcha decrypting"))
- elif task.error:
- self.fail(task.error)
- elif not task.result:
- self.fail(_("No captcha result obtained in appropiate time by any of the plugins."))
-
- result = task.result
- self.logDebug("Received captcha result: %s" % str(result))
-
- if not self.core.debug:
- try:
- remove(temp_file.name)
- except:
- pass
-
- return result
-
-
- def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False):
- """Load content at url and returns it
-
- :param url:
- :param get:
- :param post:
- :param ref:
- :param cookies:
- :param just_header: if True only the header will be retrieved and returned as dict
- :param decode: Wether to decode the output according to http header, should be True in most cases
- :return: Loaded content
- """
- if self.pyfile.abort: raise Abort
- #utf8 vs decode -> please use decode attribute in all future plugins
- if type(url) == unicode: url = str(url)
-
- res = self.req.load(url, get, post, ref, cookies, just_header, decode=decode)
-
- if self.core.debug:
- from inspect import currentframe
-
- frame = currentframe()
- if not exists(join("tmp", self.__name__)):
- makedirs(join("tmp", self.__name__))
-
- f = open(
- join("tmp", self.__name__, "%s_line%s.dump.html" % (frame.f_back.f_code.co_name, frame.f_back.f_lineno))
- , "wb")
- del frame # delete the frame or it wont be cleaned
-
- try:
- tmp = res.encode("utf8")
- except:
- tmp = res
-
- f.write(tmp)
- f.close()
-
- if just_header:
- #parse header
- header = {"code": self.req.code}
- for line in res.splitlines():
- line = line.strip()
- if not line or ":" not in line: continue
-
- key, none, value = line.partition(":")
- key = key.lower().strip()
- value = value.strip()
-
- if key in header:
- if type(header[key]) == list:
- header[key].append(value)
- else:
- header[key] = [header[key], value]
- else:
- header[key] = value
- res = header
-
- return res
-
- def download(self, url, get={}, post={}, ref=True, cookies=True, disposition=False):
- """Downloads the content at url to download folder
-
- :param url:
- :param get:
- :param post:
- :param ref:
- :param cookies:
- :param disposition: if True and server provides content-disposition header\
- the filename will be changed if needed
- :return: The location where the file was saved
- """
-
- self.checkForSameFiles()
-
- self.pyfile.setStatus("downloading")
-
- download_folder = self.config['general']['download_folder']
-
- location = safe_join(download_folder, self.pyfile.package().folder)
-
- if not exists(location):
- makedirs(location, int(self.config['permission']['folder'], 8))
-
- if self.config['permission']['change_dl'] and os.name != "nt":
- try:
- uid = getpwnam(self.config['permission']['user'])[2]
- gid = getgrnam(self.config['permission']['group'])[2]
-
- chown(location, uid, gid)
- except Exception, e:
- self.logWarning(_("Setting User and Group failed: %s") % str(e))
-
- # convert back to unicode
- location = fs_decode(location)
- name = safe_filename(self.pyfile.name)
-
- filename = join(location, name)
-
- self.core.hookManager.dispatchEvent("downloadStarts", self.pyfile, url, filename)
-
- try:
- newname = self.req.httpDownload(url, filename, get=get, post=post, ref=ref, cookies=cookies,
- chunks=self.getChunkCount(), resume=self.resumeDownload,
- progressNotify=self.pyfile.setProgress, disposition=disposition)
- finally:
- self.pyfile.size = self.req.size
-
- if disposition and newname and newname != name: #triple check, just to be sure
- self.logInfo("%(name)s saved as %(newname)s" % {"name": name, "newname": newname})
- self.pyfile.name = newname
- filename = join(location, newname)
-
- fs_filename = fs_encode(filename)
-
- if self.config['permission']['change_file']:
- chmod(fs_filename, int(self.config['permission']['file'], 8))
-
- if self.config['permission']['change_dl'] and os.name != "nt":
- try:
- uid = getpwnam(self.config['permission']['user'])[2]
- gid = getgrnam(self.config['permission']['group'])[2]
-
- chown(fs_filename, uid, gid)
- except Exception, e:
- self.logWarning(_("Setting User and Group failed: %s") % str(e))
-
- self.lastDownload = filename
- return self.lastDownload
-
- def checkDownload(self, rules, api_size=0, max_size=50000, delete=True, read_size=0):
- """ checks the content of the last downloaded file, re match is saved to `lastCheck`
-
- :param rules: dict with names and rules to match (compiled regexp or strings)
- :param api_size: expected file size
- :param max_size: if the file is larger then it wont be checked
- :param delete: delete if matched
- :param read_size: amount of bytes to read from files larger then max_size
- :return: dictionary key of the first rule that matched
- """
- lastDownload = fs_encode(self.lastDownload)
- if not exists(lastDownload): return None
-
- size = stat(lastDownload)
- size = size.st_size
-
- if api_size and api_size <= size: return None
- elif size > max_size and not read_size: return None
- self.logDebug("Download Check triggered")
- f = open(lastDownload, "rb")
- content = f.read(read_size if read_size else -1)
- f.close()
- #produces encoding errors, better log to other file in the future?
- #self.logDebug("Content: %s" % content)
- for name, rule in rules.iteritems():
- if type(rule) in (str, unicode):
- if rule in content:
- if delete:
- remove(lastDownload)
- return name
- elif hasattr(rule, "search"):
- m = rule.search(content)
- if m:
- if delete:
- remove(lastDownload)
- self.lastCheck = m
- return name
-
-
- def getPassword(self):
- """ get the password the user provided in the package"""
- password = self.pyfile.package().password
- if not password: return ""
- return password
-
-
- def checkForSameFiles(self, starting=False):
- """ checks if same file was/is downloaded within same package
-
- :param starting: indicates that the current download is going to start
- :raises SkipDownload:
- """
-
- pack = self.pyfile.package()
-
- for pyfile in self.core.files.cache.values():
- if pyfile != self.pyfile and pyfile.name == self.pyfile.name and pyfile.package().folder == pack.folder:
- if pyfile.status in (0, 12): #finished or downloading
- raise SkipDownload(pyfile.pluginname)
- elif pyfile.status in (
- 5, 7) and starting: #a download is waiting/starting and was appenrently started before
- raise SkipDownload(pyfile.pluginname)
-
- download_folder = self.config['general']['download_folder']
- location = safe_join(download_folder, pack.folder, self.pyfile.name)
-
- if starting and self.config['download']['skip_existing'] and exists(location):
- size = os.stat(location).st_size
- if size >= self.pyfile.size:
- raise SkipDownload("File exists.")
-
- pyfile = self.core.db.findDuplicates(self.pyfile.id, self.pyfile.package().folder, self.pyfile.name)
- if pyfile:
- if exists(location):
- raise SkipDownload(pyfile[0])
-
- self.logDebug("File %s not skipped, because it does not exists." % self.pyfile.name)
-
- def clean(self):
- """ clean everything and remove references """
- if hasattr(self, "pyfile"):
- del self.pyfile
- if hasattr(self, "req"):
- self.req.close()
- del self.req
- if hasattr(self, "thread"):
- del self.thread
- if hasattr(self, "html"):
- del self.html
diff --git a/module/plugins/PluginManager.py b/module/plugins/PluginManager.py
deleted file mode 100644
index 32ea4d16b..000000000
--- a/module/plugins/PluginManager.py
+++ /dev/null
@@ -1,356 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import sys
-
-from itertools import chain
-from os import listdir, makedirs
-from os.path import isfile, join, exists, abspath
-from sys import version_info
-from traceback import print_exc
-
-from module.lib.SafeEval import const_eval as literal_eval
-
-from module.ConfigParser import IGNORE
-
-
-class PluginManager:
- ROOT = "module.plugins."
- USERROOT = "userplugins."
- TYPES = ("accounts", "container", "crypter", "hooks", "hoster", "internal", "ocr")
-
- PATTERN = re.compile(r'__pattern__.*=.*r("|\')([^"\']+)')
- VERSION = re.compile(r'__version__.*=.*("|\')([0-9.]+)')
- CONFIG = re.compile(r'__config__.*=.*\[([^\]]+)', re.MULTILINE)
- DESC = re.compile(r'__description__.?=.?("|"""|\')([^"\']+)')
-
-
- def __init__(self, core):
- self.core = core
-
- self.config = core.config
- self.log = core.log
-
- self.plugins = {}
- self.createIndex()
-
- #register for import hook
- sys.meta_path.append(self)
-
-
- def createIndex(self):
- """create information for all plugins available"""
-
- sys.path.append(abspath(""))
-
- if not exists("userplugins"):
- makedirs("userplugins")
- if not exists(join("userplugins", "__init__.py")):
- f = open(join("userplugins", "__init__.py"), "wb")
- f.close()
-
- self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True)
- self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True)
- self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True)
-
- self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr")
- self.plugins['accounts'] = self.accountPlugins = self.parse("accounts")
- self.plugins['hooks'] = self.hookPlugins = self.parse("hooks")
- self.plugins['internal'] = self.internalPlugins = self.parse("internal")
-
- self.log.debug("created index of plugins")
-
- def parse(self, folder, pattern=False, home={}):
- """
- returns dict with information
- home contains parsed plugins from module.
-
- {
- name : {path, version, config, (pattern, re), (plugin, class)}
- }
-
- """
- plugins = {}
- if home:
- pfolder = join("userplugins", folder)
- if not exists(pfolder):
- makedirs(pfolder)
- if not exists(join(pfolder, "__init__.py")):
- f = open(join(pfolder, "__init__.py"), "wb")
- f.close()
-
- else:
- pfolder = join(pypath, "module", "plugins", folder)
-
- for f in listdir(pfolder):
- if (isfile(join(pfolder, f)) and f.endswith(".py") or f.endswith("_25.pyc") or f.endswith(
- "_26.pyc") or f.endswith("_27.pyc")) and not f.startswith("_"):
- data = open(join(pfolder, f))
- content = data.read()
- data.close()
-
- if f.endswith("_25.pyc") and version_info[0:2] != (2, 5):
- continue
- elif f.endswith("_26.pyc") and version_info[0:2] != (2, 6):
- continue
- elif f.endswith("_27.pyc") and version_info[0:2] != (2, 7):
- continue
-
- name = f[:-3]
- if name[-1] == ".": name = name[:-4]
-
- version = self.VERSION.findall(content)
- if version:
- version = float(version[0][1])
- else:
- version = 0
-
- # home contains plugins from pyload root
- if home and name in home:
- if home[name]['v'] >= version:
- continue
-
- if name in IGNORE or (folder, name) in IGNORE:
- continue
-
- plugins[name] = {}
- plugins[name]['v'] = version
-
- module = f.replace(".pyc", "").replace(".py", "")
-
- # the plugin is loaded from user directory
- plugins[name]['user'] = True if home else False
- plugins[name]['name'] = module
-
- if pattern:
- pattern = self.PATTERN.findall(content)
-
- if pattern:
- pattern = pattern[0][1]
- else:
- pattern = "^unmachtable$"
-
- plugins[name]['pattern'] = pattern
-
- try:
- plugins[name]['re'] = re.compile(pattern)
- except:
- self.log.error(_("%s has a invalid pattern.") % name)
-
-
- # internals have no config
- if folder == "internal":
- self.config.deleteConfig(name)
- continue
-
- config = self.CONFIG.findall(content)
- if config:
- config = literal_eval(config[0].strip().replace("\n", "").replace("\r", ""))
- desc = self.DESC.findall(content)
- desc = desc[0][1] if desc else ""
-
- if type(config[0]) == tuple:
- config = [list(x) for x in config]
- else:
- config = [list(config)]
-
- if folder == "hooks":
- append = True
- for item in config:
- if item[0] == "activated": append = False
-
- # activated flag missing
- if append: config.append(["activated", "bool", "Activated", False])
-
- try:
- self.config.addPluginConfig(name, config, desc)
- except:
- self.log.error("Invalid config in %s: %s" % (name, config))
-
- elif folder == "hooks": #force config creation
- desc = self.DESC.findall(content)
- desc = desc[0][1] if desc else ""
- config = (["activated", "bool", "Activated", False],)
-
- try:
- self.config.addPluginConfig(name, config, desc)
- except:
- self.log.error("Invalid config in %s: %s" % (name, config))
-
- if not home:
- temp = self.parse(folder, pattern, plugins)
- plugins.update(temp)
-
- return plugins
-
-
- def parseUrls(self, urls):
- """parse plugins for given list of urls"""
-
- last = None
- res = [] # tupels of (url, plugin)
-
- for url in urls:
- if type(url) not in (str, unicode, buffer): continue
- found = False
-
- if last and last[1]['re'].match(url):
- res.append((url, last[0]))
- continue
-
- for name, value in chain(self.crypterPlugins.iteritems(), self.hosterPlugins.iteritems(),
- self.containerPlugins.iteritems()):
- if value['re'].match(url):
- res.append((url, name))
- last = (name, value)
- found = True
- break
-
- if not found:
- res.append((url, "BasePlugin"))
-
- return res
-
- def findPlugin(self, name, pluginlist=("hoster", "crypter", "container")):
- for ptype in pluginlist:
- if name in self.plugins[ptype]:
- return self.plugins[ptype][name], ptype
- return None, None
-
- def getPlugin(self, name, original=False):
- """return plugin module from hoster|decrypter|container"""
- plugin, type = self.findPlugin(name)
-
- if not plugin:
- self.log.warning("Plugin %s not found." % name)
- plugin = self.hosterPlugins['BasePlugin']
-
- if "new_module" in plugin and not original:
- return plugin['new_module']
-
- return self.loadModule(type, name)
-
- def getPluginName(self, name):
- """ used to obtain new name if other plugin was injected"""
- plugin, type = self.findPlugin(name)
-
- if "new_name" in plugin:
- return plugin['new_name']
-
- return name
-
- def loadModule(self, type, name):
- """ Returns loaded module for plugin
-
- :param type: plugin type, subfolder of module.plugins
- :param name:
- """
- plugins = self.plugins[type]
- if name in plugins:
- if "module" in plugins[name]: return plugins[name]['module']
- try:
- module = __import__(self.ROOT + "%s.%s" % (type, plugins[name]['name']), globals(), locals(),
- plugins[name]['name'])
- plugins[name]['module'] = module #cache import, maybe unneeded
- return module
- except Exception, e:
- self.log.error(_("Error importing %(name)s: %(msg)s") % {"name": name, "msg": str(e)})
- if self.core.debug:
- print_exc()
-
- def loadClass(self, type, name):
- """Returns the class of a plugin with the same name"""
- module = self.loadModule(type, name)
- if module: return getattr(module, name)
-
- def getAccountPlugins(self):
- """return list of account plugin names"""
- return self.accountPlugins.keys()
-
- def find_module(self, fullname, path=None):
- #redirecting imports if necesarry
- if fullname.startswith(self.ROOT) or fullname.startswith(self.USERROOT): #seperate pyload plugins
- if fullname.startswith(self.USERROOT): user = 1
- else: user = 0 #used as bool and int
-
- split = fullname.split(".")
- if len(split) != 4 - user: return
- type, name = split[2 - user:4 - user]
-
- if type in self.plugins and name in self.plugins[type]:
- #userplugin is a newer version
- if not user and self.plugins[type][name]['user']:
- return self
- #imported from userdir, but pyloads is newer
- if user and not self.plugins[type][name]['user']:
- return self
-
-
- def load_module(self, name, replace=True):
- if name not in sys.modules: #could be already in modules
- if replace:
- if self.ROOT in name:
- newname = name.replace(self.ROOT, self.USERROOT)
- else:
- newname = name.replace(self.USERROOT, self.ROOT)
- else: newname = name
-
- base, plugin = newname.rsplit(".", 1)
-
- self.log.debug("Redirected import %s -> %s" % (name, newname))
-
- module = __import__(newname, globals(), locals(), [plugin])
- #inject under new an old name
- sys.modules[name] = module
- sys.modules[newname] = module
-
- return sys.modules[name]
-
-
- def reloadPlugins(self, type_plugins):
- """ reload and reindex plugins """
- if not type_plugins:
- return None
-
- self.log.debug("Request reload of plugins: %s" % type_plugins)
-
- reloaded = []
-
- as_dict = {}
- for t,n in type_plugins:
- if t in ("hooks", "internal"): #: do not reload hooks or internals, because would cause to much side effects
- continue
- elif t in as_dict:
- as_dict[t].append(n)
- else:
- as_dict[t] = [n]
-
- for type in as_dict.iterkeys():
- for plugin in as_dict[type]:
- if plugin in self.plugins[type] and "module" in self.plugins[type][plugin]:
- self.log.debug("Reloading %s" % plugin)
- id = (type, plugin)
- try:
- reload(self.plugins[type][plugin]['module'])
- except Exception, e:
- self.log.error("Error when reloading %s" % id, str(e))
- continue
- else:
- reloaded.append(id)
-
- #index creation
- self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True)
- self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True)
- self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True)
- self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr")
- self.plugins['accounts'] = self.accountPlugins = self.parse("accounts")
-
- if "accounts" in as_dict: #: accounts needs to be reloaded
- self.core.accountManager.initPlugins()
- self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos)
-
- return reloaded #: return a list of the plugins successfully reloaded
-
- def reloadPlugin(self, type_plugin):
- """ reload and reindex ONE plugin """
- return True if self.reloadPlugins(type_plugin) else False
diff --git a/module/plugins/accounts/AlldebridCom.py b/module/plugins/accounts/AlldebridCom.py
deleted file mode 100644
index dbf4ad800..000000000
--- a/module/plugins/accounts/AlldebridCom.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import xml.dom.minidom as dom
-
-from time import time
-from urllib import urlencode
-
-from BeautifulSoup import BeautifulSoup
-
-from module.plugins.Account import Account
-
-
-class AlldebridCom(Account):
- __name__ = "AlldebridCom"
- __type__ = "account"
- __version__ = "0.22"
-
- __description__ = """AllDebrid.com account plugin"""
- __author_name__ = "Andy Voigt"
- __author_mail__ = "spamsales@online.de"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("http://www.alldebrid.com/account/")
- soup = BeautifulSoup(page)
- #Try to parse expiration date directly from the control panel page (better accuracy)
- try:
- time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string
- self.logDebug("Account expires in: %s" % time_text)
- p = re.compile('\d+')
- exp_data = p.findall(time_text)
- exp_time = time() + int(exp_data[0]) * 24 * 60 * 60 + int(
- exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60
- #Get expiration date from API
- except:
- data = self.getAccountData(user)
- page = req.load("http://www.alldebrid.com/api.php?action=info_user&login=%s&pw=%s" % (user,
- data['password']))
- self.logDebug(page)
- xml = dom.parseString(page)
- exp_time = time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60
- account_info = {"validuntil": exp_time, "trafficleft": -1}
- return account_info
-
- def login(self, user, data, req):
- urlparams = urlencode({'action': 'login', 'login_login': user, 'login_password': data['password']})
- page = req.load("http://www.alldebrid.com/register/?%s" % urlparams)
-
- if "This login doesn't exist" in page:
- self.wrongPassword()
-
- if "The password is not valid" in page:
- self.wrongPassword()
-
- if "Invalid captcha" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/BayfilesCom.py b/module/plugins/accounts/BayfilesCom.py
deleted file mode 100644
index 7c4708f7d..000000000
--- a/module/plugins/accounts/BayfilesCom.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class BayfilesCom(Account):
- __name__ = "BayfilesCom"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Bayfiles.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- for _ in xrange(2):
- response = json_loads(req.load("http://api.bayfiles.com/v1/account/info"))
- self.logDebug(response)
- if not response['error']:
- break
- self.logWarning(response['error'])
- self.relogin(user)
-
- return {"premium": bool(response['premium']), "trafficleft": -1,
- "validuntil": response['expires'] if response['expires'] >= int(time()) else -1}
-
- def login(self, user, data, req):
- response = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data['password'])))
- self.logDebug(response)
- if response['error']:
- self.logError(response['error'])
- self.wrongPassword()
diff --git a/module/plugins/accounts/BitshareCom.py b/module/plugins/accounts/BitshareCom.py
deleted file mode 100644
index 272bbeb6e..000000000
--- a/module/plugins/accounts/BitshareCom.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class BitshareCom(Account):
- __name__ = "BitshareCom"
- __type__ = "account"
- __version__ = "0.12"
-
- __description__ = """Bitshare account plugin"""
- __author_name__ = "Paul King"
- __author_mail__ = None
-
-
- def loadAccountInfo(self, user, req):
- page = req.load("http://bitshare.com/mysettings.html")
-
- if "\"http://bitshare.com/myupgrade.html\">Free" in page:
- return {"validuntil": -1, "trafficleft": -1, "premium": False}
-
- if not '<input type="checkbox" name="directdownload" checked="checked" />' in page:
- self.logWarning(_("Activate direct Download in your Bitshare Account"))
-
- return {"validuntil": -1, "trafficleft": -1, "premium": True}
-
- def login(self, user, data, req):
- page = req.load("http://bitshare.com/login.html",
- post={"user": user, "password": data['password'], "submit": "Login"}, cookies=True)
- if "login" in req.lastEffectiveURL:
- self.wrongPassword()
diff --git a/module/plugins/accounts/CramitIn.py b/module/plugins/accounts/CramitIn.py
deleted file mode 100644
index 34aa3ab40..000000000
--- a/module/plugins/accounts/CramitIn.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class CramitIn(XFSPAccount):
- __name__ = "CramitIn"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Cramit.in account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- MAIN_PAGE = "http://cramit.in/"
diff --git a/module/plugins/accounts/CyberlockerCh.py b/module/plugins/accounts/CyberlockerCh.py
deleted file mode 100644
index 729975fb0..000000000
--- a/module/plugins/accounts/CyberlockerCh.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-from module.plugins.internal.SimpleHoster import parseHtmlForm
-
-
-class CyberlockerCh(XFSPAccount):
- __name__ = "CyberlockerCh"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Cyberlocker.ch account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- MAIN_PAGE = "http://cyberlocker.ch/"
-
-
- def login(self, user, data, req):
- html = req.load(self.MAIN_PAGE + 'login.html', decode=True)
-
- action, inputs = parseHtmlForm('name="FL"', html)
- if not inputs:
- inputs = {"op": "login",
- "redirect": self.MAIN_PAGE}
-
- inputs.update({"login": user,
- "password": data['password']})
-
- # Without this a 403 Forbidden is returned
- req.http.lastURL = self.MAIN_PAGE + 'login.html'
- html = req.load(self.MAIN_PAGE, post=inputs, decode=True)
-
- if 'Incorrect Login or Password' in html or '>Error<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/CzshareCom.py b/module/plugins/accounts/CzshareCom.py
deleted file mode 100644
index 6f2ee641e..000000000
--- a/module/plugins/accounts/CzshareCom.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-import re
-
-from module.plugins.Account import Account
-
-
-class CzshareCom(Account):
- __name__ = "CzshareCom"
- __type__ = "account"
- __version__ = "0.14"
-
- __description__ = """Czshare.com account plugin, now Sdilej.cz"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- CREDIT_LEFT_PATTERN = r'<tr class="active">\s*<td>([0-9 ,]+) (KiB|MiB|GiB)</td>\s*<td>([^<]*)</td>\s*</tr>'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://sdilej.cz/prehled_kreditu/")
-
- m = re.search(self.CREDIT_LEFT_PATTERN, html)
- if m is None:
- return {"validuntil": 0, "trafficleft": 0}
- else:
- credits = float(m.group(1).replace(' ', '').replace(',', '.'))
- credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[m.group(2)]
- validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M'))
- return {"validuntil": validuntil, "trafficleft": credits}
-
- def login(self, user, data, req):
- html = req.load('https://sdilej.cz/index.php', post={
- "Prihlasit": "Prihlasit",
- "login-password": data['password'],
- "login-name": user
- })
-
- if '<div class="login' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/DebridItaliaCom.py b/module/plugins/accounts/DebridItaliaCom.py
deleted file mode 100644
index f4441c356..000000000
--- a/module/plugins/accounts/DebridItaliaCom.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import time
-
-from module.plugins.Account import Account
-
-
-class DebridItaliaCom(Account):
- __name__ = "DebridItaliaCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Debriditalia.com account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- WALID_UNTIL_PATTERN = r"Premium valid till: (?P<D>[^|]+) \|"
-
-
- def loadAccountInfo(self, user, req):
- if 'Account premium not activated' in self.html:
- return {"premium": False, "validuntil": None, "trafficleft": None}
-
- m = re.search(self.WALID_UNTIL_PATTERN, self.html)
- if m:
- validuntil = int(time.mktime(time.strptime(m.group('D'), "%d/%m/%Y %H:%M")))
- return {"premium": True, "validuntil": validuntil, "trafficleft": -1}
- else:
- self.logError('Unable to retrieve account information - Plugin may be out of date')
-
- def login(self, user, data, req):
- self.html = req.load("http://debriditalia.com/login.php",
- get={"u": user, "p": data['password']})
- if 'NO' in self.html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/DepositfilesCom.py b/module/plugins/accounts/DepositfilesCom.py
deleted file mode 100644
index 01f1906f4..000000000
--- a/module/plugins/accounts/DepositfilesCom.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import strptime, mktime
-
-from module.plugins.Account import Account
-
-
-class DepositfilesCom(Account):
- __name__ = "DepositfilesCom"
- __type__ = "account"
- __version__ = "0.3"
-
- __description__ = """Depositfiles.com account plugin"""
- __author_name__ = ("mkaay", "stickell", "Walter Purcaro")
- __author_mail__ = ("mkaay@mkaay.de", "l.stickell@yahoo.it", "vuolter@gmail.com")
-
-
- def loadAccountInfo(self, user, req):
- src = req.load("https://dfiles.eu/de/gold/")
- validuntil = re.search(r"Sie haben Gold Zugang bis: <b>(.*?)</b></div>", src).group(1)
-
- validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S")))
-
- return {"validuntil": validuntil, "trafficleft": -1}
-
- def login(self, user, data, req):
- src = req.load("https://dfiles.eu/de/login.php", get={"return": "/de/gold/payment.php"},
- post={"login": user, "password": data['password']})
- if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in src:
- self.wrongPassword()
diff --git a/module/plugins/accounts/EasybytezCom.py b/module/plugins/accounts/EasybytezCom.py
deleted file mode 100644
index 3b8517686..000000000
--- a/module/plugins/accounts/EasybytezCom.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import mktime, strptime, gmtime
-
-from module.plugins.Account import Account
-from module.plugins.internal.SimpleHoster import parseHtmlForm
-from module.utils import parseFileSize
-
-
-class EasybytezCom(Account):
- __name__ = "EasybytezCom"
- __type__ = "account"
- __version__ = "0.04"
-
- __description__ = """EasyBytez.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- VALID_UNTIL_PATTERN = r'Premium account expire:</TD><TD><b>([^<]+)</b>'
- TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.easybytez.com/?op=my_account", decode=True)
-
- validuntil = trafficleft = None
- premium = False
-
- m = re.search(self.VALID_UNTIL_PATTERN, html)
- if m:
- try:
- self.logDebug("Expire date: " + m.group(1))
- validuntil = mktime(strptime(m.group(1), "%d %B %Y"))
- except Exception, e:
- self.logError(e)
- if validuntil > mktime(gmtime()):
- premium = True
- trafficleft = -1
- else:
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- if m:
- trafficleft = m.group(1)
- if "Unlimited" in trafficleft:
- trafficleft = -1
- else:
- trafficleft = parseFileSize(trafficleft) / 1024
-
- return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- html = req.load('http://www.easybytez.com/login.html', decode=True)
- action, inputs = parseHtmlForm('name="FL"', html)
- inputs.update({"login": user,
- "password": data['password'],
- "redirect": "http://www.easybytez.com/"})
-
- html = req.load(action, post=inputs, decode=True)
-
- if 'Incorrect Login or Password' in html or '>Error<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/EgoFilesCom.py b/module/plugins/accounts/EgoFilesCom.py
deleted file mode 100644
index 41b58c4e7..000000000
--- a/module/plugins/accounts/EgoFilesCom.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import time
-
-from module.plugins.Account import Account
-from module.utils import parseFileSize
-
-
-class EgoFilesCom(Account):
- __name__ = "EgoFilesCom"
- __type__ = "account"
- __version__ = "0.2"
-
- __description__ = """Egofiles.com account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- PREMIUM_ACCOUNT_PATTERN = '<br/>\s*Premium: (?P<P>[^/]*) / Traffic left: (?P<T>[\d.]*) (?P<U>\w*)\s*\\n\s*<br/>'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://egofiles.com")
- if 'You are logged as a Free User' in html:
- return {"premium": False, "validuntil": None, "trafficleft": None}
-
- m = re.search(self.PREMIUM_ACCOUNT_PATTERN, html)
- if m:
- validuntil = int(time.mktime(time.strptime(m.group('P'), "%Y-%m-%d %H:%M:%S")))
- trafficleft = parseFileSize(m.group('T'), m.group('U')) / 1024
- return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
- else:
- self.logError('Unable to retrieve account information - Plugin may be out of date')
-
- def login(self, user, data, req):
- # Set English language
- req.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True)
-
- html = req.load("http://egofiles.com/ajax/register.php",
- post={"log": 1,
- "loginV": user,
- "passV": data['password']})
- if 'Login successful' not in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/EuroshareEu.py b/module/plugins/accounts/EuroshareEu.py
deleted file mode 100644
index f37693206..000000000
--- a/module/plugins/accounts/EuroshareEu.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-import re
-
-from module.plugins.Account import Account
-
-
-class EuroshareEu(Account):
- __name__ = "EuroshareEu"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Euroshare.eu account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- self.relogin(user)
- html = req.load("http://euroshare.eu/customer-zone/settings/")
-
- m = re.search('id="input_expire_date" value="(\d+\.\d+\.\d+ \d+:\d+)"', html)
- if m is None:
- premium, validuntil = False, -1
- else:
- premium = True
- validuntil = mktime(strptime(m.group(1), "%d.%m.%Y %H:%M"))
-
- return {"validuntil": validuntil, "trafficleft": -1, "premium": premium}
-
- def login(self, user, data, req):
-
- html = req.load('http://euroshare.eu/customer-zone/login/', post={
- "trvale": "1",
- "login": user,
- "password": data['password']
- }, decode=True)
-
- if u">Nesprávne prihlasovacie meno alebo heslo" in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/FastixRu.py b/module/plugins/accounts/FastixRu.py
deleted file mode 100644
index 7e46ccd05..000000000
--- a/module/plugins/accounts/FastixRu.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class FastixRu(Account):
- __name__ = "FastixRu"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """Fastix account plugin"""
- __author_name__ = "Massimo Rosamilia"
- __author_mail__ = "max@spiritix.eu"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("http://fastix.ru/api_v2/?apikey=%s&sub=getaccountdetails" % (data['api']))
- page = json_loads(page)
- points = page['points']
- kb = float(points)
- kb = kb * 1024 ** 2 / 1000
- if points > 0:
- account_info = {"validuntil": -1, "trafficleft": kb}
- else:
- account_info = {"validuntil": None, "trafficleft": None, "premium": False}
- return account_info
-
- def login(self, user, data, req):
- page = req.load("http://fastix.ru/api_v2/?sub=get_apikey&email=%s&password=%s" % (user, data['password']))
- api = json_loads(page)
- api = api['apikey']
- data['api'] = api
- if "error_code" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/FastshareCz.py b/module/plugins/accounts/FastshareCz.py
deleted file mode 100644
index a968be19e..000000000
--- a/module/plugins/accounts/FastshareCz.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Account import Account
-from module.utils import parseFileSize
-
-
-class FastshareCz(Account):
- __name__ = "FastshareCz"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Fastshare.cz account plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- CREDIT_PATTERN = r'(?:Kredit|Credit)\s*</td>\s*<td[^>]*>([\d. \w]+)&nbsp;'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.fastshare.cz/user", decode=True)
-
- m = re.search(self.CREDIT_PATTERN, html)
- if m:
- trafficleft = parseFileSize(m.group(1)) / 1024
- premium = True if trafficleft else False
- else:
- trafficleft = None
- premium = False
-
- return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- req.load('http://www.fastshare.cz/login') # Do not remove or it will not login
- html = req.load('http://www.fastshare.cz/sql.php', post={
- "heslo": data['password'],
- "login": user
- }, decode=True)
-
- if u'>Špatné uşivatelské jméno nebo heslo.<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/File4safeCom.py b/module/plugins/accounts/File4safeCom.py
deleted file mode 100644
index aa7894e98..000000000
--- a/module/plugins/accounts/File4safeCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class File4safeCom(XFSPAccount):
- __name__ = "File4safeCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """File4safe.com account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- MAIN_PAGE = "http://file4safe.com/"
-
- LOGIN_FAIL_PATTERN = r'input_login'
- PREMIUM_PATTERN = r'Extend Premium'
diff --git a/module/plugins/accounts/FilecloudIo.py b/module/plugins/accounts/FilecloudIo.py
deleted file mode 100644
index ec98cf9b2..000000000
--- a/module/plugins/accounts/FilecloudIo.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class FilecloudIo(Account):
- __name__ = "FilecloudIo"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """FilecloudIo account plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
- def loadAccountInfo(self, user, req):
- # It looks like the first API request always fails, so we retry 5 times, it should work on the second try
- for _ in xrange(5):
- rep = req.load("https://secure.filecloud.io/api-fetch_apikey.api",
- post={"username": user, "password": self.accounts[user]['password']})
- rep = json_loads(rep)
- if rep['status'] == 'ok':
- break
- elif rep['status'] == 'error' and rep['message'] == 'no such user or wrong password':
- self.logError("Wrong username or password")
- return {"valid": False, "premium": False}
- else:
- return {"premium": False}
-
- akey = rep['akey']
- self.accounts[user]['akey'] = akey # Saved for hoster plugin
- rep = req.load("http://api.filecloud.io/api-fetch_account_details.api",
- post={"akey": akey})
- rep = json_loads(rep)
-
- if rep['is_premium'] == 1:
- return {"validuntil": int(rep['premium_until']), "trafficleft": -1}
- else:
- return {"premium": False}
-
- def login(self, user, data, req):
- req.cj.setCookie("secure.filecloud.io", "lang", "en")
- html = req.load('https://secure.filecloud.io/user-login.html')
-
- if not hasattr(self, "form_data"):
- self.form_data = {}
-
- self.form_data['username'] = user
- self.form_data['password'] = data['password']
-
- html = req.load('https://secure.filecloud.io/user-login_p.html',
- post=self.form_data,
- multipart=True)
-
- self.logged_in = True if "you have successfully logged in - filecloud.io" in html else False
- self.form_data = {}
diff --git a/module/plugins/accounts/FilefactoryCom.py b/module/plugins/accounts/FilefactoryCom.py
deleted file mode 100644
index 84d80cab7..000000000
--- a/module/plugins/accounts/FilefactoryCom.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import mktime, strptime
-
-from pycurl import REFERER
-
-from module.plugins.Account import Account
-
-
-class FilefactoryCom(Account):
- __name__ = "FilefactoryCom"
- __type__ = "account"
- __version__ = "0.14"
-
- __description__ = """Filefactory.com account plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<d>\d{1,2})\w{1,2} (?P<m>\w{3}), (?P<y>\d{4})</strong>'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.filefactory.com/account/")
-
- m = re.search(self.VALID_UNTIL_PATTERN, html)
- if m:
- premium = True
- validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d> \g<m> \g<y>', m.group(0))
- validuntil = mktime(strptime(validuntil, "%d %b %Y"))
- else:
- premium = False
- validuntil = -1
-
- return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
-
- def login(self, user, data, req):
- req.http.c.setopt(REFERER, "http://www.filefactory.com/member/login.php")
-
- html = req.load("http://www.filefactory.com/member/signin.php", post={
- "loginEmail": user,
- "loginPassword": data['password'],
- "Submit": "Sign In"})
-
- if req.lastEffectiveURL != "http://www.filefactory.com/account/":
- self.wrongPassword()
diff --git a/module/plugins/accounts/FilejungleCom.py b/module/plugins/accounts/FilejungleCom.py
deleted file mode 100644
index 72e275d4f..000000000
--- a/module/plugins/accounts/FilejungleCom.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-
-
-class FilejungleCom(Account):
- __name__ = "FilejungleCom"
- __type__ = "account"
- __version__ = "0.11"
-
- __description__ = """Filejungle.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- login_timeout = 60
-
- URL = "http://filejungle.com/"
- TRAFFIC_LEFT_PATTERN = r'"/extend_premium\.php">Until (\d+ [A-Za-z]+ \d+)<br'
- LOGIN_FAILED_PATTERN = r'<span htmlfor="loginUser(Name|Password)" generated="true" class="fail_info">'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load(self.URL + "dashboard.php")
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- if m:
- premium = True
- validuntil = mktime(strptime(m.group(1), "%d %b %Y"))
- else:
- premium = False
- validuntil = -1
-
- return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
-
- def login(self, user, data, req):
- html = req.load(self.URL + "login.php", post={
- "loginUserName": user,
- "loginUserPassword": data['password'],
- "loginFormSubmit": "Login",
- "recaptcha_challenge_field": "",
- "recaptcha_response_field": "",
- "recaptcha_shortencode_field": ""})
-
- if re.search(self.LOGIN_FAILED_PATTERN, html):
- self.wrongPassword()
diff --git a/module/plugins/accounts/FilerNet.py b/module/plugins/accounts/FilerNet.py
deleted file mode 100644
index 2e50298d7..000000000
--- a/module/plugins/accounts/FilerNet.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import time
-
-from module.plugins.Account import Account
-from module.utils import parseFileSize
-
-
-class FilerNet(Account):
- __name__ = "FilerNet"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Filer.net account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- TOKEN_PATTERN = r'_csrf_token" value="([^"]+)" />'
- WALID_UNTIL_PATTERN = r"Der Premium-Zugang ist gÃŒltig bis (.+)\.\s*</td>"
- TRAFFIC_PATTERN = r'Traffic</th>\s*<td>([^<]+)</td>'
- FREE_PATTERN = r'Account Status</th>\s*<td>\s*Free'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("https://filer.net/profile")
-
- # Free user
- if re.search(self.FREE_PATTERN, html):
- return {"premium": False, "validuntil": None, "trafficleft": None}
-
- until = re.search(self.WALID_UNTIL_PATTERN, html)
- traffic = re.search(self.TRAFFIC_PATTERN, html)
- if until and traffic:
- validuntil = int(time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S")))
- trafficleft = parseFileSize(traffic.group(1)) / 1024
- return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
- else:
- self.logError('Unable to retrieve account information - Plugin may be out of date')
- return {"premium": False, "validuntil": None, "trafficleft": None}
-
- def login(self, user, data, req):
- html = req.load("https://filer.net/login")
- token = re.search(self.TOKEN_PATTERN, html).group(1)
- html = req.load("https://filer.net/login_check",
- post={"_username": user, "_password": data['password'],
- "_remember_me": "on", "_csrf_token": token, "_target_path": "https://filer.net/"})
- if 'Logout' not in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/FilerioCom.py b/module/plugins/accounts/FilerioCom.py
deleted file mode 100644
index 544a7f3a6..000000000
--- a/module/plugins/accounts/FilerioCom.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class FilerioCom(XFSPAccount):
- __name__ = "FilerioCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """FileRio.in account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- MAIN_PAGE = "http://filerio.in/"
diff --git a/module/plugins/accounts/FilesMailRu.py b/module/plugins/accounts/FilesMailRu.py
deleted file mode 100644
index 5ece67140..000000000
--- a/module/plugins/accounts/FilesMailRu.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class FilesMailRu(Account):
- __name__ = "FilesMailRu"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Filesmail.ru account plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def loadAccountInfo(self, user, req):
- return {"validuntil": None, "trafficleft": None}
-
- def login(self, user, data, req):
- user, domain = user.split("@")
-
- page = req.load("http://swa.mail.ru/cgi-bin/auth", None,
- {"Domain": domain, "Login": user, "Password": data['password'],
- "Page": "http://files.mail.ru/"}, cookies=True)
-
- if "НеверМПе ОЌя пПльзПвателя ОлО парПль" in page: # @TODO seems not to work
- self.wrongPassword()
diff --git a/module/plugins/accounts/FileserveCom.py b/module/plugins/accounts/FileserveCom.py
deleted file mode 100644
index 5be5e8d04..000000000
--- a/module/plugins/accounts/FileserveCom.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class FileserveCom(Account):
- __name__ = "FileserveCom"
- __type__ = "account"
- __version__ = "0.2"
-
- __description__ = """Fileserve.com account plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
-
- page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
- "submit": "Submit+Query"})
- res = json_loads(page)
-
- if res['type'] == "premium":
- validuntil = mktime(strptime(res['expireTime'], "%Y-%m-%d %H:%M:%S"))
- return {"trafficleft": res['traffic'], "validuntil": validuntil}
- else:
- return {"premium": False, "trafficleft": None, "validuntil": None}
-
- def login(self, user, data, req):
- page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
- "submit": "Submit+Query"})
- res = json_loads(page)
-
- if not res['type']:
- self.wrongPassword()
-
- #login at fileserv page
- req.load("http://www.fileserve.com/login.php",
- post={"loginUserName": user, "loginUserPassword": data['password'], "autoLogin": "checked",
- "loginFormSubmit": "Login"})
diff --git a/module/plugins/accounts/FourSharedCom.py b/module/plugins/accounts/FourSharedCom.py
deleted file mode 100644
index 206edca23..000000000
--- a/module/plugins/accounts/FourSharedCom.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class FourSharedCom(Account):
- __name__ = "FourSharedCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """FourShared.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- #fixme
- return {"validuntil": -1, "trafficleft": -1, "premium": False}
-
- def login(self, user, data, req):
- req.cj.setCookie("www.4shared.com", "4langcookie", "en")
- response = req.load('http://www.4shared.com/login',
- post={"login": user,
- "password": data['password'],
- "remember": "false",
- "doNotRedirect": "true"})
- self.logDebug(response)
- response = json_loads(response)
-
- if not "ok" in response or response['ok'] != True:
- if "rejectReason" in response and response['rejectReason'] != True:
- self.logError(response['rejectReason'])
- self.wrongPassword()
diff --git a/module/plugins/accounts/FreakshareCom.py b/module/plugins/accounts/FreakshareCom.py
deleted file mode 100644
index dfa5f4541..000000000
--- a/module/plugins/accounts/FreakshareCom.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import strptime, mktime
-
-from module.plugins.Account import Account
-
-
-class FreakshareCom(Account):
- __name__ = "FreakshareCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Freakshare.com account plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def loadAccountInfo(self, user, req):
- page = req.load("http://freakshare.com/")
-
- validuntil = r"ltig bis:</td>\s*<td><b>([0-9 \-:.]+)</b></td>"
- validuntil = re.search(validuntil, page, re.MULTILINE)
- validuntil = validuntil.group(1).strip()
- validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M"))
-
- traffic = r"Traffic verbleibend:</td>\s*<td>([^<]+)"
- traffic = re.search(traffic, page, re.MULTILINE)
- traffic = traffic.group(1).strip()
- traffic = self.parseTraffic(traffic)
-
- return {"validuntil": validuntil, "trafficleft": traffic}
-
- def login(self, user, data, req):
- page = req.load("http://freakshare.com/login.html", None,
- {"submit": "Login", "user": user, "pass": data['password']}, cookies=True)
-
- if "Falsche Logindaten!" in page or "Wrong Username or Password!" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/FreeWayMe.py b/module/plugins/accounts/FreeWayMe.py
deleted file mode 100644
index fe5a79949..000000000
--- a/module/plugins/accounts/FreeWayMe.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class FreeWayMe(Account):
- __name__ = "FreeWayMe"
- __type__ = "account"
- __version__ = "0.11"
-
- __description__ = """FreeWayMe account plugin"""
- __author_name__ = "Nicolas Giese"
- __author_mail__ = "james@free-way.me"
-
-
- def loadAccountInfo(self, user, req):
- status = self.getAccountStatus(user, req)
- if not status:
- return False
- self.logDebug(status)
-
- account_info = {"validuntil": -1, "premium": False}
- if status['premium'] == "Free":
- account_info['trafficleft'] = int(status['guthaben']) * 1024
- elif status['premium'] == "Spender":
- account_info['trafficleft'] = -1
- elif status['premium'] == "Flatrate":
- account_info = {"validuntil": int(status['Flatrate']),
- "trafficleft": -1,
- "premium": True}
-
- return account_info
-
- def getpw(self, user):
- return self.accounts[user]['password']
-
- def login(self, user, data, req):
- status = self.getAccountStatus(user, req)
-
- # Check if user and password are valid
- if not status:
- self.wrongPassword()
-
- def getAccountStatus(self, user, req):
- answer = req.load("https://www.free-way.me/ajax/jd.php",
- get={"id": 4, "user": user, "pass": self.accounts[user]['password']})
- self.logDebug("login: %s" % answer)
- if answer == "Invalid login":
- self.wrongPassword()
- return False
- return json_loads(answer)
diff --git a/module/plugins/accounts/FshareVn.py b/module/plugins/accounts/FshareVn.py
deleted file mode 100644
index 78714f238..000000000
--- a/module/plugins/accounts/FshareVn.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-from pycurl import REFERER
-import re
-
-from module.plugins.Account import Account
-
-
-class FshareVn(Account):
- __name__ = "FshareVn"
- __type__ = "account"
- __version__ = "0.07"
-
- __description__ = """Fshare.vn account plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- VALID_UNTIL_PATTERN = ur'<dt>Thời hạn dùng:</dt>\s*<dd>([^<]+)</dd>'
- LIFETIME_PATTERN = ur'<dt>Lần đăng nhập trước:</dt>\s*<dd>[^<]+</dd>'
- TRAFFIC_LEFT_PATTERN = ur'<dt>Tổng Dung Lượng Tài Khoản</dt>\s*<dd[^>]*>([0-9.]+) ([kKMG])B</dd>'
- DIRECT_DOWNLOAD_PATTERN = ur'<input type="checkbox"\s*([^=>]*)[^>]*/>Kích hoạt download trực tiếp</dt>'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.fshare.vn/account_info.php", decode=True)
-
- if re.search(self.LIFETIME_PATTERN, html):
- self.logDebug("Lifetime membership detected")
- trafficleft = self.getTrafficLeft()
- return {"validuntil": -1, "trafficleft": trafficleft, "premium": True}
-
- m = re.search(self.VALID_UNTIL_PATTERN, html)
- if m:
- premium = True
- validuntil = mktime(strptime(m.group(1), '%I:%M:%S %p %d-%m-%Y'))
- trafficleft = self.getTrafficLeft()
- else:
- premium = False
- validuntil = None
- trafficleft = None
-
- return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- req.http.c.setopt(REFERER, "https://www.fshare.vn/login.php")
-
- html = req.load('https://www.fshare.vn/login.php', post={
- "login_password": data['password'],
- "login_useremail": user,
- "url_refe": "http://www.fshare.vn/index.php"
- }, referer=True, decode=True)
-
- if not re.search(r'<img\s+alt="VIP"', html):
- self.wrongPassword()
-
- def getTrafficLeft(self):
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- return float(m.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[m.group(2)] if m else 0
diff --git a/module/plugins/accounts/Ftp.py b/module/plugins/accounts/Ftp.py
deleted file mode 100644
index 1319ea2a7..000000000
--- a/module/plugins/accounts/Ftp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class Ftp(Account):
- __name__ = "Ftp"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Ftp dummy account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- login_timeout = info_threshold = -1 #: Unlimited
diff --git a/module/plugins/accounts/HellshareCz.py b/module/plugins/accounts/HellshareCz.py
deleted file mode 100644
index 9207cddab..000000000
--- a/module/plugins/accounts/HellshareCz.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import time
-
-from module.plugins.Account import Account
-
-
-class HellshareCz(Account):
- __name__ = "HellshareCz"
- __type__ = "account"
- __version__ = "0.14"
-
- __description__ = """Hellshare.cz account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- CREDIT_LEFT_PATTERN = r'<div class="credit-link">\s*<table>\s*<tr>\s*<th>(\d+|\d\d\.\d\d\.)</th>'
-
-
- def loadAccountInfo(self, user, req):
- self.relogin(user)
- html = req.load("http://www.hellshare.com/")
-
- m = re.search(self.CREDIT_LEFT_PATTERN, html)
- if m is None:
- trafficleft = None
- validuntil = None
- premium = False
- else:
- credit = m.group(1)
- premium = True
- try:
- if "." in credit:
- #Time-based account
- vt = [int(x) for x in credit.split('.')[:2]]
- lt = time.localtime()
- year = lt.tm_year + int(vt[1] < lt.tm_mon or (vt[1] == lt.tm_mon and vt[0] < lt.tm_mday))
- validuntil = time.mktime(time.strptime("%s%d 23:59:59" % (credit, year), "%d.%m.%Y %H:%M:%S"))
- trafficleft = -1
- else:
- #Traffic-based account
- trafficleft = int(credit) * 1024
- validuntil = -1
- except Exception, e:
- self.logError('Unable to parse credit info', e)
- validuntil = -1
- trafficleft = -1
-
- return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- html = req.load('http://www.hellshare.com/')
- if req.lastEffectiveURL != 'http://www.hellshare.com/':
- #Switch to English
- self.logDebug('Switch lang - URL: %s' % req.lastEffectiveURL)
- json = req.load("%s?do=locRouter-show" % req.lastEffectiveURL)
- hash = re.search(r"(--[0-9a-f]+-)", json).group(1)
- self.logDebug('Switch lang - HASH: %s' % hash)
- html = req.load('http://www.hellshare.com/%s/' % hash)
-
- if re.search(self.CREDIT_LEFT_PATTERN, html):
- self.logDebug('Already logged in')
- return
-
- html = req.load('http://www.hellshare.com/login?do=loginForm-submit', post={
- "login": "Log in",
- "password": data['password'],
- "username": user,
- "perm_login": "on"
- })
-
- if "<p>You input a wrong user name or wrong password</p>" in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/HotfileCom.py b/module/plugins/accounts/HotfileCom.py
deleted file mode 100644
index cffbbab8f..000000000
--- a/module/plugins/accounts/HotfileCom.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import strptime, mktime
-import hashlib
-
-from module.plugins.Account import Account
-
-
-class HotfileCom(Account):
- __name__ = "HotfileCom"
- __type__ = "account"
- __version__ = "0.2"
-
- __description__ = """Hotfile.com account plugin"""
- __author_name__ = ("mkaay", "JoKoT3")
- __author_mail__ = ("mkaay@mkaay.de", "jokot3@gmail.com")
-
-
- def loadAccountInfo(self, user, req):
- resp = self.apiCall("getuserinfo", user=user)
- if resp.startswith("."):
- self.core.debug("HotfileCom API Error: %s" % resp)
- raise Exception
- info = {}
- for p in resp.split("&"):
- key, value = p.split("=")
- info[key] = value
-
- if info['is_premium'] == '1':
- info['premium_until'] = info['premium_until'].replace("T", " ")
- zone = info['premium_until'][19:]
- info['premium_until'] = info['premium_until'][:19]
- zone = int(zone[:3])
-
- validuntil = int(mktime(strptime(info['premium_until'], "%Y-%m-%d %H:%M:%S"))) + (zone * 60 * 60)
- tmp = {"validuntil": validuntil, "trafficleft": -1, "premium": True}
-
- elif info['is_premium'] == '0':
- tmp = {"premium": False}
-
- return tmp
-
- def apiCall(self, method, post={}, user=None):
- if user:
- data = self.getAccountData(user)
- else:
- user, data = self.selectAccount()
-
- req = self.getAccountRequest(user)
-
- digest = req.load("http://api.hotfile.com/", post={"action": "getdigest"})
- h = hashlib.md5()
- h.update(data['password'])
- hp = h.hexdigest()
- h = hashlib.md5()
- h.update(hp)
- h.update(digest)
- pwhash = h.hexdigest()
-
- post.update({"action": method})
- post.update({"username": user, "passwordmd5dig": pwhash, "digest": digest})
- resp = req.load("http://api.hotfile.com/", post=post)
- req.close()
- return resp
-
- def login(self, user, data, req):
- cj = self.getAccountCookies(user)
- cj.setCookie("hotfile.com", "lang", "en")
- req.load("http://hotfile.com/", cookies=True)
- page = req.load("http://hotfile.com/login.php", post={"returnto": "/", "user": user, "pass": data['password']},
- cookies=True)
-
- if "Bad username/password" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/Http.py b/module/plugins/accounts/Http.py
deleted file mode 100644
index 589a45617..000000000
--- a/module/plugins/accounts/Http.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class Http(Account):
- __name__ = "Http"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Http dummy account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- login_timeout = info_threshold = -1 #: Unlimited
diff --git a/module/plugins/accounts/LetitbitNet.py b/module/plugins/accounts/LetitbitNet.py
deleted file mode 100644
index c849f9d2d..000000000
--- a/module/plugins/accounts/LetitbitNet.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-# from module.common.json_layer import json_loads, json_dumps
-
-
-class LetitbitNet(Account):
- __name__ = "LetitbitNet"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Letitbit.net account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def loadAccountInfo(self, user, req):
- ## DISABLED BECAUSE IT GET 'key exausted' EVEN IF VALID ##
- # api_key = self.accounts[user]['password']
- # json_data = [api_key, ['key/info']]
- # api_rep = req.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
- # self.logDebug('API Key Info: ' + api_rep)
- # api_rep = json_loads(api_rep)
- #
- # if api_rep['status'] == 'FAIL':
- # self.logWarning(api_rep['data'])
- # return {'valid': False, 'premium': False}
-
- return {"premium": True}
-
- def login(self, user, data, req):
- # API_KEY is the username and the PREMIUM_KEY is the password
- self.logInfo('You must use your API KEY as username and the PREMIUM KEY as password.')
diff --git a/module/plugins/accounts/LinksnappyCom.py b/module/plugins/accounts/LinksnappyCom.py
deleted file mode 100644
index a03357e25..000000000
--- a/module/plugins/accounts/LinksnappyCom.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from hashlib import md5
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class LinksnappyCom(Account):
- __name__ = "LinksnappyCom"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """Linksnappy.com account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- r = req.load('http://gen.linksnappy.com/lseAPI.php',
- get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
- self.logDebug("JSON data: " + r)
- j = json_loads(r)
-
- if j['error']:
- return {"premium": False}
-
- validuntil = j['return']['expire']
- if validuntil == 'lifetime':
- validuntil = -1
- elif validuntil == 'expired':
- return {"premium": False}
- else:
- validuntil = float(validuntil)
-
- if 'trafficleft' not in j['return'] or isinstance(j['return']['trafficleft'], str):
- trafficleft = -1
- else:
- trafficleft = int(j['return']['trafficleft']) * 1024
-
- return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
-
- def login(self, user, data, req):
- r = req.load('http://gen.linksnappy.com/lseAPI.php',
- get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
-
- if 'Invalid Account Details' in r:
- self.wrongPassword()
diff --git a/module/plugins/accounts/MegaDebridEu.py b/module/plugins/accounts/MegaDebridEu.py
deleted file mode 100644
index 9c5603989..000000000
--- a/module/plugins/accounts/MegaDebridEu.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class MegaDebridEu(Account):
- __name__ = "MegaDebridEu"
- __type__ = "account"
- __version__ = "0.2"
-
- __description__ = """mega-debrid.eu account plugin"""
- __author_name__ = "D.Ducatel"
- __author_mail__ = "dducatel@je-geek.fr"
-
- # Define the base URL of MegaDebrid api
- API_URL = "https://www.mega-debrid.eu/api.php"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- jsonResponse = req.load(self.API_URL,
- get={'action': 'connectUser', 'login': user, 'password': data['password']})
- response = json_loads(jsonResponse)
-
- if response['response_code'] == "ok":
- return {"premium": True, "validuntil": float(response['vip_end']), "status": True}
- else:
- self.logError(response)
- return {"status": False, "premium": False}
-
- def login(self, user, data, req):
- jsonResponse = req.load(self.API_URL,
- get={'action': 'connectUser', 'login': user, 'password': data['password']})
- response = json_loads(jsonResponse)
- if response['response_code'] != "ok":
- self.wrongPassword()
diff --git a/module/plugins/accounts/MegasharesCom.py b/module/plugins/accounts/MegasharesCom.py
deleted file mode 100644
index 7c4777706..000000000
--- a/module/plugins/accounts/MegasharesCom.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-
-
-class MegasharesCom(Account):
- __name__ = "MegasharesCom"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """Megashares.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- VALID_UNTIL_PATTERN = r'<p class="premium_info_box">Period Ends: (\w{3} \d{1,2}, \d{4})</p>'
-
-
- def loadAccountInfo(self, user, req):
- #self.relogin(user)
- html = req.load("http://d01.megashares.com/myms.php", decode=True)
-
- premium = False if '>Premium Upgrade<' in html else True
-
- validuntil = trafficleft = -1
- try:
- timestr = re.search(self.VALID_UNTIL_PATTERN, html).group(1)
- self.logDebug(timestr)
- validuntil = mktime(strptime(timestr, "%b %d, %Y"))
- except Exception, e:
- self.logError(e)
-
- return {"validuntil": validuntil, "trafficleft": -1, "premium": premium}
-
- def login(self, user, data, req):
- html = req.load('http://d01.megashares.com/myms_login.php', post={
- "httpref": "",
- "myms_login": "Login",
- "mymslogin_name": user,
- "mymspassword": data['password']
- }, decode=True)
-
- if not '<span class="b ml">%s</span>' % user in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/MovReelCom.py b/module/plugins/accounts/MovReelCom.py
deleted file mode 100644
index 34862c4ef..000000000
--- a/module/plugins/accounts/MovReelCom.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class MovReelCom(XFSPAccount):
- __name__ = "MovReelCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Movreel.com account plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- login_timeout = 60
- info_threshold = 30
-
- MAIN_PAGE = "http://movreel.com/"
-
- TRAFFIC_LEFT_PATTERN = r'Traffic.*?<b>([^<]+)</b>'
- LOGIN_FAIL_PATTERN = r'<b[^>]*>Incorrect Login or Password</b><br>'
diff --git a/module/plugins/accounts/MultiDebridCom.py b/module/plugins/accounts/MultiDebridCom.py
deleted file mode 100644
index c731ce9ae..000000000
--- a/module/plugins/accounts/MultiDebridCom.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class MultiDebridCom(Account):
- __name__ = "MultiDebridCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Multi-debrid.com account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def loadAccountInfo(self, user, req):
- if 'days_left' in self.json_data:
- validuntil = int(time() + self.json_data['days_left'] * 24 * 60 * 60)
- return {"premium": True, "validuntil": validuntil, "trafficleft": -1}
- else:
- self.logError('Unable to get account information')
-
- def login(self, user, data, req):
- # Password to use is the API-Password written in http://multi-debrid.com/myaccount
- html = req.load("http://multi-debrid.com/api.php",
- get={"user": user, "pass": data['password']})
- self.logDebug('JSON data: ' + html)
- self.json_data = json_loads(html)
- if self.json_data['status'] != 'ok':
- self.logError('Invalid login. The password to use is the API-Password you find in your "My Account" page')
- self.wrongPassword()
diff --git a/module/plugins/accounts/MultishareCz.py b/module/plugins/accounts/MultishareCz.py
deleted file mode 100644
index fc13bac69..000000000
--- a/module/plugins/accounts/MultishareCz.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-#from time import mktime, strptime
-#from pycurl import REFERER
-import re
-from module.utils import parseFileSize
-
-
-class MultishareCz(Account):
- __name__ = "MultishareCz"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """Multishare.cz account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- TRAFFIC_LEFT_PATTERN = r'<span class="profil-zvyrazneni">Kredit:</span>\s*<strong>(?P<S>[0-9,]+)&nbsp;(?P<U>\w+)</strong>'
- ACCOUNT_INFO_PATTERN = r'<input type="hidden" id="(u_ID|u_hash)" name="[^"]*" value="([^"]+)">'
-
-
- def loadAccountInfo(self, user, req):
- #self.relogin(user)
- html = req.load("http://www.multishare.cz/profil/", decode=True)
-
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- trafficleft = parseFileSize(m.group('S'), m.group('U')) / 1024 if m else 0
- self.premium = True if trafficleft else False
-
- html = req.load("http://www.multishare.cz/", decode=True)
- mms_info = dict(re.findall(self.ACCOUNT_INFO_PATTERN, html))
-
- return dict(mms_info, **{"validuntil": -1, "trafficleft": trafficleft})
-
- def login(self, user, data, req):
- html = req.load('http://www.multishare.cz/html/prihlaseni_process.php', post={
- "akce": "Přihlásit",
- "heslo": data['password'],
- "jmeno": user
- }, decode=True)
-
- if '<div class="akce-chyba akce">' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/NetloadIn.py b/module/plugins/accounts/NetloadIn.py
deleted file mode 100755
index 12c5556fb..000000000
--- a/module/plugins/accounts/NetloadIn.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import time
-
-from module.plugins.Account import Account
-
-
-class NetloadIn(Account):
- __name__ = "NetloadIn"
- __type__ = "account"
- __version__ = "0.22"
-
- __description__ = """Netload.in account plugin"""
- __author_name__ = ("RaNaN", "CryNickSystems")
- __author_mail__ = ("RaNaN@pyload.org", "webmaster@pcProfil.de")
-
-
- def loadAccountInfo(self, user, req):
- page = req.load("http://netload.in/index.php?id=2&lang=de")
- left = r">(\d+) (Tag|Tage), (\d+) Stunden<"
- left = re.search(left, page)
- if left:
- validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60
- trafficleft = -1
- premium = True
- else:
- validuntil = None
- premium = False
- trafficleft = None
- return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- page = req.load("http://netload.in/index.php", None,
- {"txtuser": user, "txtpass": data['password'], "txtcheck": "login", "txtlogin": "Login"},
- cookies=True)
- if "password or it might be invalid!" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/OboomCom.py b/module/plugins/accounts/OboomCom.py
deleted file mode 100644
index a37759f9a..000000000
--- a/module/plugins/accounts/OboomCom.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import time
-
-from module.lib.beaker.crypto.pbkdf2 import PBKDF2
-
-from module.common.json_layer import json_loads
-from module.plugins.Account import Account
-
-
-class OboomCom(Account):
- __name__ = "OboomCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Oboom.com account plugin"""
- __author_name__ = "stanley"
- __author_mail__ = "stanley.foerster@gmail.com"
-
-
- def loadAccountData(self, user, req):
- passwd = self.getAccountData(user)['password']
- salt = passwd[::-1]
- pbkdf2 = PBKDF2(passwd, salt, 1000).hexread(16)
- result = json_loads(req.load("https://www.oboom.com/1.0/login", get={"auth": user, "pass": pbkdf2}))
- if not result[0] == 200:
- self.logWarning("Failed to log in: %s" % result[1])
- self.wrongPassword()
- return result[1]
-
- def loadAccountInfo(self, name, req):
- accountData = self.loadAccountData(name, req)
- userData = accountData['user']
-
- if "premium_unix" in userData:
- validUntilUtc = int(userData['premium_unix'])
- if validUntilUtc > int(time.time()):
- premium = True
- validUntil = validUntilUtc
- traffic = userData['traffic']
- trafficLeft = traffic['current']
- maxTraffic = traffic['max']
- session = accountData['session']
- return {"premium": premium,
- "validuntil": validUntil,
- "trafficleft": trafficLeft / 1024,
- "maxtraffic": maxTraffic / 1024,
- "session": session
- }
- return {"premium": False, "validuntil": -1}
-
- def login(self, user, data, req):
- self.loadAccountData(user, req)
diff --git a/module/plugins/accounts/OneFichierCom.py b/module/plugins/accounts/OneFichierCom.py
deleted file mode 100644
index 43dd1c2b6..000000000
--- a/module/plugins/accounts/OneFichierCom.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import strptime, mktime
-from pycurl import REFERER
-
-from module.plugins.Account import Account
-
-
-class OneFichierCom(Account):
- __name__ = "OneFichierCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """1fichier.com account plugin"""
- __author_name__ = "Elrick69"
- __author_mail__ = "elrick69[AT]rocketmail[DOT]com"
-
- VALID_UNTIL_PATTERN = r'You are a premium user until (?P<d>\d{2})/(?P<m>\d{2})/(?P<y>\d{4})'
-
-
- def loadAccountInfo(self, user, req):
-
- html = req.load("http://1fichier.com/console/abo.pl")
-
- m = re.search(self.VALID_UNTIL_PATTERN, html)
-
- if m:
- premium = True
- validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d>/\g<m>/\g<y>', m.group(0))
- validuntil = int(mktime(strptime(validuntil, "%d/%m/%Y")))
- else:
- premium = False
- validuntil = -1
-
- return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
-
- def login(self, user, data, req):
-
- req.http.c.setopt(REFERER, "http://1fichier.com/login.pl?lg=en")
-
- html = req.load("http://1fichier.com/login.pl?lg=en", post={
- "mail": user,
- "pass": data['password'],
- "Login": "Login"})
-
- if r'<div class="error_message">Invalid username or password.</div>' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/OverLoadMe.py b/module/plugins/accounts/OverLoadMe.py
deleted file mode 100644
index 34f684cb1..000000000
--- a/module/plugins/accounts/OverLoadMe.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class OverLoadMe(Account):
- __name__ = "OverLoadMe"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Over-Load.me account plugin"""
- __author_name__ = "marley"
- __author_mail__ = "marley@over-load.me"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("https://api.over-load.me/account.php", get={"user": user, "auth": data['password']}).strip()
- data = json_loads(page)
-
- # Check for premium
- if data['membership'] == "Free":
- return {"premium": False}
-
- account_info = {"validuntil": data['expirationunix'], "trafficleft": -1}
- return account_info
-
- def login(self, user, data, req):
- jsondata = req.load("https://api.over-load.me/account.php",
- get={"user": user, "auth": data['password']}).strip()
- data = json_loads(jsondata)
-
- if data['err'] == 1:
- self.wrongPassword()
diff --git a/module/plugins/accounts/Premium4Me.py b/module/plugins/accounts/Premium4Me.py
deleted file mode 100644
index 9f66af414..000000000
--- a/module/plugins/accounts/Premium4Me.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class Premium4Me(Account):
- __name__ = "Premium4Me"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Premium.to account plugin"""
- __author_name__ = ("RaNaN", "zoidberg", "stickell")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
- def loadAccountInfo(self, user, req):
- traffic = req.load("http://premium.to/api/traffic.php?authcode=%s" % self.authcode)
-
- account_info = {"trafficleft": int(traffic) / 1024,
- "validuntil": -1}
-
- return account_info
-
- def login(self, user, data, req):
- self.authcode = req.load("http://premium.to/api/getauthcode.php?username=%s&password=%s" % (
- user, data['password'])).strip()
-
- if "wrong username" in self.authcode:
- self.wrongPassword()
diff --git a/module/plugins/accounts/PremiumizeMe.py b/module/plugins/accounts/PremiumizeMe.py
deleted file mode 100644
index dcf8b8f20..000000000
--- a/module/plugins/accounts/PremiumizeMe.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-from module.common.json_layer import json_loads
-
-
-class PremiumizeMe(Account):
- __name__ = "PremiumizeMe"
- __type__ = "account"
- __version__ = "0.11"
-
- __description__ = """Premiumize.me account plugin"""
- __author_name__ = "Florian Franzen"
- __author_mail__ = "FlorianFranzen@gmail.com"
-
-
- def loadAccountInfo(self, user, req):
- # Get user data from premiumize.me
- status = self.getAccountStatus(user, req)
- self.logDebug(status)
-
- # Parse account info
- account_info = {"validuntil": float(status['result']['expires']),
- "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)}
-
- if status['result']['type'] == 'free':
- account_info['premium'] = False
-
- return account_info
-
- def login(self, user, data, req):
- # Get user data from premiumize.me
- status = self.getAccountStatus(user, req)
-
- # Check if user and password are valid
- if status['status'] != 200:
- self.wrongPassword()
-
- def getAccountStatus(self, user, req):
- # Use premiumize.me API v1 (see https://secure.premiumize.me/?show=api)
- # to retrieve account info and return the parsed json answer
- answer = req.load(
- "https://api.premiumize.me/pm-api/v1.php?method=accountstatus&params[login]=%s&params[pass]=%s" % (
- user, self.accounts[user]['password']))
- return json_loads(answer)
diff --git a/module/plugins/accounts/QuickshareCz.py b/module/plugins/accounts/QuickshareCz.py
deleted file mode 100644
index fcaf14e92..000000000
--- a/module/plugins/accounts/QuickshareCz.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Account import Account
-from module.utils import parseFileSize
-
-
-class QuickshareCz(Account):
- __name__ = "QuickshareCz"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Quickshare.cz account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.quickshare.cz/premium", decode=True)
-
- m = re.search(r'Stav kreditu: <strong>(.+?)</strong>', html)
- if m:
- trafficleft = parseFileSize(m.group(1)) / 1024
- premium = True if trafficleft else False
- else:
- trafficleft = None
- premium = False
-
- return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php', post={
- "akce": u'Přihlásit',
- "heslo": data['password'],
- "jmeno": user
- }, decode=True)
-
- if u'>TakovÜ uşivatel neexistuje.<' in html or u'>Špatné heslo.<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/RPNetBiz.py b/module/plugins/accounts/RPNetBiz.py
deleted file mode 100644
index 358f6ffca..000000000
--- a/module/plugins/accounts/RPNetBiz.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class RPNetBiz(Account):
- __name__ = "RPNetBiz"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """RPNet.biz account plugin"""
- __author_name__ = "Dman"
- __author_mail__ = "dmanugm@gmail.com"
-
-
- def loadAccountInfo(self, user, req):
- # Get account information from rpnet.biz
- response = self.getAccountStatus(user, req)
- try:
- if response['accountInfo']['isPremium']:
- # Parse account info. Change the trafficleft later to support per host info.
- account_info = {"validuntil": int(response['accountInfo']['premiumExpiry']),
- "trafficleft": -1, "premium": True}
- else:
- account_info = {"validuntil": None, "trafficleft": None, "premium": False}
-
- except KeyError:
- #handle wrong password exception
- account_info = {"validuntil": None, "trafficleft": None, "premium": False}
-
- return account_info
-
- def login(self, user, data, req):
- # Get account information from rpnet.biz
- response = self.getAccountStatus(user, req)
-
- # If we have an error in the response, we have wrong login information
- if 'error' in response:
- self.wrongPassword()
-
- def getAccountStatus(self, user, req):
- # Using the rpnet API, check if valid premium account
- response = req.load("https://premium.rpnet.biz/client_api.php",
- get={"username": user, "password": self.accounts[user]['password'],
- "action": "showAccountInformation"})
- self.logDebug("JSON data: %s" % response)
-
- return json_loads(response)
diff --git a/module/plugins/accounts/RapidgatorNet.py b/module/plugins/accounts/RapidgatorNet.py
deleted file mode 100644
index 849933a87..000000000
--- a/module/plugins/accounts/RapidgatorNet.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class RapidgatorNet(Account):
- __name__ = "RapidgatorNet"
- __type__ = "account"
- __version__ = "0.04"
-
- __description__ = """Rapidgator.net account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- API_URL = 'http://rapidgator.net/api/user'
-
-
- def loadAccountInfo(self, user, req):
- try:
- sid = self.getAccountData(user).get('SID')
- assert sid
-
- json = req.load("%s/info?sid=%s" % (self.API_URL, sid))
- self.logDebug("API:USERINFO", json)
- json = json_loads(json)
-
- if json['response_status'] == 200:
- if "reset_in" in json['response']:
- self.scheduleRefresh(user, json['response']['reset_in'])
-
- return {"validuntil": json['response']['expire_date'],
- "trafficleft": int(json['response']['traffic_left']) / 1024,
- "premium": True}
- else:
- self.logError(json['response_details'])
- except Exception, e:
- self.logError(e)
-
- return {"validuntil": None, "trafficleft": None, "premium": False}
-
- def login(self, user, data, req):
- try:
- json = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']})
- self.logDebug("API:LOGIN", json)
- json = json_loads(json)
-
- if json['response_status'] == 200:
- data['SID'] = str(json['response']['session_id'])
- return
- else:
- self.logError(json['response_details'])
- except Exception, e:
- self.logError(e)
-
- self.wrongPassword()
diff --git a/module/plugins/accounts/RapidshareCom.py b/module/plugins/accounts/RapidshareCom.py
deleted file mode 100644
index dc4f09ee1..000000000
--- a/module/plugins/accounts/RapidshareCom.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class RapidshareCom(Account):
- __name__ = "RapidshareCom"
- __type__ = "account"
- __version__ = "0.22"
-
- __description__ = """Rapidshare.com account plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
- api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user,
- "password": data['password'], "withcookie": 1}
- src = req.load(api_url_base, cookies=False, get=api_param_prem)
- if src.startswith("ERROR"):
- raise Exception(src)
- fields = src.split("\n")
- info = {}
- for t in fields:
- if not t.strip():
- continue
- k, v = t.split("=")
- info[k] = v
-
- validuntil = int(info['billeduntil'])
- premium = True if validuntil else False
-
- tmp = {"premium": premium, "validuntil": validuntil, "trafficleft": -1, "maxtraffic": -1}
-
- return tmp
-
- def login(self, user, data, req):
- api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
- api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user,
- "password": data['password'], "withcookie": 1}
- src = req.load(api_url_base, cookies=False, get=api_param_prem)
- if src.startswith("ERROR"):
- raise Exception(src + "### Note you have to use your account number for login, instead of name.")
- fields = src.split("\n")
- info = {}
- for t in fields:
- if not t.strip():
- continue
- k, v = t.split("=")
- info[k] = v
- cj = self.getAccountCookies(user)
- cj.setCookie("rapidshare.com", "enc", info['cookie'])
diff --git a/module/plugins/accounts/RarefileNet.py b/module/plugins/accounts/RarefileNet.py
deleted file mode 100644
index c8eae79a8..000000000
--- a/module/plugins/accounts/RarefileNet.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class RarefileNet(XFSPAccount):
- __name__ = "RarefileNet"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """RareFile.net account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- MAIN_PAGE = "http://rarefile.net/"
diff --git a/module/plugins/accounts/RealdebridCom.py b/module/plugins/accounts/RealdebridCom.py
deleted file mode 100644
index 9d1939c60..000000000
--- a/module/plugins/accounts/RealdebridCom.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import xml.dom.minidom as dom
-
-from module.plugins.Account import Account
-
-
-class RealdebridCom(Account):
- __name__ = "RealdebridCom"
- __type__ = "account"
- __version__ = "0.43"
-
- __description__ = """Real-Debrid.com account plugin"""
- __author_name__ = "Devirex Hazzard"
- __author_mail__ = "naibaf_11@yahoo.de"
-
-
- def loadAccountInfo(self, user, req):
- if self.pin_code:
- return {"premium": False}
- page = req.load("https://real-debrid.com/api/account.php")
- xml = dom.parseString(page)
- account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue),
- "trafficleft": -1}
-
- return account_info
-
- def login(self, user, data, req):
- self.pin_code = False
- page = req.load("https://real-debrid.com/ajax/login.php", get={"user": user, "pass": data['password']})
- if "Your login informations are incorrect" in page:
- self.wrongPassword()
- elif "PIN Code required" in page:
- self.logWarning('PIN code required. Please login to https://real-debrid.com using the PIN or disable the double authentication in your control panel on https://real-debrid.com.')
- self.pin_code = True
diff --git a/module/plugins/accounts/RehostTo.py b/module/plugins/accounts/RehostTo.py
deleted file mode 100644
index f15230f83..000000000
--- a/module/plugins/accounts/RehostTo.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class RehostTo(Account):
- __name__ = "RehostTo"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Rehost.to account plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password']))
- data = [x.split("=") for x in page.split(",")]
- ses = data[0][1]
- long_ses = data[1][1]
-
- page = req.load("http://rehost.to/api.php?cmd=get_premium_credits&long_ses=%s" % long_ses)
- traffic, valid = page.split(",")
-
- account_info = {"trafficleft": int(traffic) * 1024,
- "validuntil": int(valid),
- "long_ses": long_ses,
- "ses": ses}
-
- return account_info
-
- def login(self, user, data, req):
- page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password']))
-
- if "Login failed." in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/RyushareCom.py b/module/plugins/accounts/RyushareCom.py
deleted file mode 100644
index 7fb373ca7..000000000
--- a/module/plugins/accounts/RyushareCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class RyushareCom(XFSPAccount):
- __name__ = "RyushareCom"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Ryushare.com account plugin"""
- __author_name__ = ("zoidberg", "trance4us")
- __author_mail__ = ("zoidberg@mujmail.cz", "")
-
- MAIN_PAGE = "http://ryushare.com/"
-
-
- def login(self, user, data, req):
- req.lastURL = "http://ryushare.com/login.python"
- html = req.load("http://ryushare.com/login.python",
- post={"login": user, "password": data['password'], "op": "login"})
- if 'Incorrect Login or Password' in html or '>Error<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/ShareRapidCom.py b/module/plugins/accounts/ShareRapidCom.py
deleted file mode 100644
index 50077b1fb..000000000
--- a/module/plugins/accounts/ShareRapidCom.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import mktime, strptime
-from module.plugins.Account import Account
-
-
-class ShareRapidCom(Account):
- __name__ = "ShareRapidCom"
- __type__ = "account"
- __version__ = "0.34"
-
- __description__ = """MegaRapid.cz account plugin"""
- __author_name__ = ("MikyWoW", "zoidberg")
- __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz")
-
- login_timeout = 60
-
-
- def loadAccountInfo(self, user, req):
- src = req.load("http://megarapid.cz/mujucet/", decode=True)
-
- m = re.search(ur'<td>Max. počet paralelních stahování: </td><td>(\d+)', src)
- if m:
- data = self.getAccountData(user)
- data['options']['limitDL'] = [int(m.group(1))]
-
- m = re.search(ur'<td>Paušální stahování aktivní. Vyprší </td><td><strong>(.*?)</strong>', src)
- if m:
- validuntil = mktime(strptime(m.group(1), "%d.%m.%Y - %H:%M"))
- return {"premium": True, "trafficleft": -1, "validuntil": validuntil}
-
- m = re.search(r'<tr><td>Kredit</td><td>(.*?) GiB', src)
- if m:
- trafficleft = float(m.group(1)) * (1 << 20)
- return {"premium": True, "trafficleft": trafficleft, "validuntil": -1}
-
- return {"premium": False, "trafficleft": None, "validuntil": None}
-
- def login(self, user, data, req):
- htm = req.load("http://megarapid.cz/prihlaseni/", cookies=True)
- if "Heslo:" in htm:
- start = htm.index('id="inp_hash" name="hash" value="')
- htm = htm[start + 33:]
- hashes = htm[0:32]
- htm = req.load("http://megarapid.cz/prihlaseni/",
- post={"hash": hashes,
- "login": user,
- "pass1": data['password'],
- "remember": 0,
- "sbmt": u"Přihlásit"}, cookies=True)
diff --git a/module/plugins/accounts/ShareonlineBiz.py b/module/plugins/accounts/ShareonlineBiz.py
deleted file mode 100644
index b9ff0096c..000000000
--- a/module/plugins/accounts/ShareonlineBiz.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-
-
-class ShareonlineBiz(Account):
- __name__ = "ShareonlineBiz"
- __type__ = "account"
- __version__ = "0.24"
-
- __description__ = """Share-online.biz account plugin"""
- __author_name__ = ("mkaay", "zoidberg")
- __author_mail__ = ("mkaay@mkaay.de", "zoidberg@mujmail.cz")
-
-
- def getUserAPI(self, user, req):
- return req.load("http://api.share-online.biz/account.php",
- {"username": user, "password": self.accounts[user]['password'], "act": "userDetails"})
-
- def loadAccountInfo(self, user, req):
- src = self.getUserAPI(user, req)
-
- info = {}
- for line in src.splitlines():
- if "=" in line:
- key, value = line.split("=")
- info[key] = value
- self.logDebug(info)
-
- if "dl" in info and info['dl'].lower() != "not_available":
- req.cj.setCookie("share-online.biz", "dl", info['dl'])
- if "a" in info and info['a'].lower() != "not_available":
- req.cj.setCookie("share-online.biz", "a", info['a'])
-
- return {"validuntil": int(info['expire_date']) if "expire_date" in info else -1,
- "trafficleft": -1,
- "premium": True if ("dl" in info or "a" in info) and (info['group'] != "Sammler") else False}
-
- def login(self, user, data, req):
- src = self.getUserAPI(user, req)
- if "EXCEPTION" in src:
- self.wrongPassword()
diff --git a/module/plugins/accounts/SimplyPremiumCom.py b/module/plugins/accounts/SimplyPremiumCom.py
deleted file mode 100644
index b0a62f83b..000000000
--- a/module/plugins/accounts/SimplyPremiumCom.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.plugins.Account import Account
-
-
-class SimplyPremiumCom(Account):
- __name__ = "SimplyPremiumCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """Simply-Premium.com account plugin"""
- __author_name__ = "EvolutionClip"
- __author_mail__ = "evolutionclip@live.de"
-
-
- def loadAccountInfo(self, user, req):
- json_data = req.load('http://www.simply-premium.com/api/user.php?format=json')
- self.logDebug("JSON data: " + json_data)
- json_data = json_loads(json_data)
-
- if 'vip' in json_data['result'] and json_data['result']['vip'] == 0:
- return {"premium": False}
-
- #Time package
- validuntil = float(json_data['result']['timeend'])
- #Traffic package
- # {"trafficleft": int(traffic) / 1024, "validuntil": -1}
- #trafficleft = int(json_data['result']['traffic'] / 1024)
-
- #return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
- return {"premium": True, "validuntil": validuntil}
-
- def login(self, user, data, req):
- req.cj.setCookie("simply-premium.com", "lang", "EN")
-
- if data['password'] == '' or data['password'] == '0':
- post_data = {"key": user}
- else:
- post_data = {"login_name": user, "login_pass": data['password']}
-
- html = req.load("http://www.simply-premium.com/login.php", post=post_data)
-
- if 'logout' not in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/SimplydebridCom.py b/module/plugins/accounts/SimplydebridCom.py
deleted file mode 100644
index 70f2d39b9..000000000
--- a/module/plugins/accounts/SimplydebridCom.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-
-
-class SimplydebridCom(Account):
- __name__ = "SimplydebridCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Simply-Debrid.com account plugin"""
- __author_name__ = "Kagenoshin"
- __author_mail__ = "kagenoshin@gmx.ch"
-
-
- def loadAccountInfo(self, user, req):
- get_data = {'login': 2, 'u': self.loginname, 'p': self.password}
- response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True)
- data = [x.strip() for x in response.split(";")]
- if str(data[0]) != "1":
- return {"premium": False}
- else:
- return {"trafficleft": -1, "validuntil": mktime(strptime(str(data[2]), "%d/%m/%Y"))}
-
- def login(self, user, data, req):
- self.loginname = user
- self.password = data['password']
- get_data = {'login': 1, 'u': self.loginname, 'p': self.password}
- response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True)
- if response != "02: loggin success":
- self.wrongPassword()
diff --git a/module/plugins/accounts/StahnuTo.py b/module/plugins/accounts/StahnuTo.py
deleted file mode 100644
index 6d9c3e924..000000000
--- a/module/plugins/accounts/StahnuTo.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Account import Account
-from module.utils import parseFileSize
-
-
-class StahnuTo(Account):
- __name__ = "StahnuTo"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """StahnuTo account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://www.stahnu.to/")
-
- m = re.search(r'>VIP: (\d+.*)<', html)
- trafficleft = parseFileSize(m.group(1)) * 1024 if m else 0
-
- return {"premium": trafficleft > (512 * 1024), "trafficleft": trafficleft, "validuntil": -1}
-
- def login(self, user, data, req):
- html = req.load("http://www.stahnu.to/login.php", post={
- "username": user,
- "password": data['password'],
- "submit": "Login"})
-
- if not '<a href="logout.php">' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/TurbobitNet.py b/module/plugins/accounts/TurbobitNet.py
deleted file mode 100644
index a477b06c0..000000000
--- a/module/plugins/accounts/TurbobitNet.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-
-
-class TurbobitNet(Account):
- __name__ = "TurbobitNet"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """TurbobitNet account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- html = req.load("http://turbobit.net")
-
- m = re.search(r'<u>Turbo Access</u> to ([0-9.]+)', html)
- if m:
- premium = True
- validuntil = mktime(strptime(m.group(1), "%d.%m.%Y"))
- else:
- premium = False
- validuntil = -1
-
- return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
-
- def login(self, user, data, req):
- req.cj.setCookie("turbobit.net", "user_lang", "en")
-
- html = req.load("http://turbobit.net/user/login", post={
- "user[login]": user,
- "user[pass]": data['password'],
- "user[submit]": "Login"})
-
- if not '<div class="menu-item user-name">' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/UlozTo.py b/module/plugins/accounts/UlozTo.py
deleted file mode 100644
index 6f0d0ae7d..000000000
--- a/module/plugins/accounts/UlozTo.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Account import Account
-
-
-class UlozTo(Account):
- __name__ = "UlozTo"
- __type__ = "account"
- __version__ = "0.06"
-
- __description__ = """Uloz.to account plugin"""
- __author_name__ = ("zoidberg", "pulpe")
- __author_mail__ = "zoidberg@mujmail.cz"
-
- TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="/kredit" title="[^"]*?GB = ([0-9.]+) MB"'
-
-
- def loadAccountInfo(self, user, req):
- #this cookie gets lost somehow after each request
- self.phpsessid = req.cj.getCookie("ULOSESSID")
- html = req.load("http://www.ulozto.net/", decode=True)
- req.cj.setCookie("www.ulozto.net", "ULOSESSID", self.phpsessid)
-
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- trafficleft = int(float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048) if m else 0
- self.premium = True if trafficleft else False
-
- return {"validuntil": -1, "trafficleft": trafficleft}
-
- def login(self, user, data, req):
- login_page = req.load('http://www.ulozto.net/?do=web-login', decode=True)
- action = re.findall('<form action="(.+?)"', login_page)[1].replace('&amp;', '&')
- token = re.search('_token_" value="(.+?)"', login_page).group(1)
-
- html = req.load('http://www.ulozto.net'+action, post={
- "_token_": token,
- "login": "Submit",
- "password": data['password'],
- "username": user
- }, decode=True)
-
- if '<div class="flash error">' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/UnrestrictLi.py b/module/plugins/accounts/UnrestrictLi.py
deleted file mode 100644
index a65f19c5b..000000000
--- a/module/plugins/accounts/UnrestrictLi.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class UnrestrictLi(Account):
- __name__ = "UnrestrictLi"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Unrestrict.li account plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def loadAccountInfo(self, user, req):
- json_data = req.load('http://unrestrict.li/api/jdownloader/user.php?format=json')
- self.logDebug("JSON data: " + json_data)
- json_data = json_loads(json_data)
-
- if 'vip' in json_data['result'] and json_data['result']['vip'] == 0:
- return {"premium": False}
-
- validuntil = json_data['result']['expires']
- trafficleft = int(json_data['result']['traffic'] / 1024)
-
- return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
-
- def login(self, user, data, req):
- req.cj.setCookie("unrestrict.li", "lang", "EN")
- html = req.load("https://unrestrict.li/sign_in")
-
- if 'solvemedia' in html:
- self.logError("A Captcha is required. Go to http://unrestrict.li/sign_in and login, then retry")
- return
-
- post_data = {"username": user, "password": data['password'],
- "remember_me": "remember", "signin": "Sign in"}
- html = req.load("https://unrestrict.li/sign_in", post=post_data)
-
- if 'sign_out' not in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/UploadedTo.py b/module/plugins/accounts/UploadedTo.py
deleted file mode 100644
index 9db496bbc..000000000
--- a/module/plugins/accounts/UploadedTo.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import time
-
-from module.plugins.Account import Account
-
-
-class UploadedTo(Account):
- __name__ = "UploadedTo"
- __type__ = "account"
- __version__ = "0.26"
-
- __description__ = """Uploaded.to account plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def loadAccountInfo(self, user, req):
-
- req.load("http://uploaded.net/language/en")
- html = req.load("http://uploaded.net/me")
-
- premium = '<a href="register"><em>Premium</em>' in html or '<em>Premium</em></th>' in html
-
- if premium:
- raw_traffic = re.search(r'<th colspan="2"><b class="cB">([^<]+)', html).group(1).replace('.', '')
- raw_valid = re.search(r"<td>Duration:</td>\s*<th>([^<]+)", html, re.MULTILINE).group(1).strip()
-
- traffic = int(self.parseTraffic(raw_traffic))
-
- if raw_valid == "unlimited":
- validuntil = -1
- else:
- raw_valid = re.findall(r"(\d+) (Week|weeks|days|day|hours|hour)", raw_valid)
- validuntil = time()
- for n, u in raw_valid:
- validuntil += int(n) * 60 * 60 * {"Week": 168, "weeks": 168, "days": 24,
- "day": 24, "hours": 1, "hour": 1}[u]
-
- return {"validuntil": validuntil, "trafficleft": traffic, "maxtraffic": 50 * 1024 * 1024}
- else:
- return {"premium": False, "validuntil": -1}
-
- def login(self, user, data, req):
-
- req.load("http://uploaded.net/language/en")
- req.cj.setCookie("uploaded.net", "lang", "en")
-
- page = req.load("http://uploaded.net/io/login", post={"id": user, "pw": data['password'], "_": ""})
-
- if "User and password do not match!" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/UploadheroCom.py b/module/plugins/accounts/UploadheroCom.py
deleted file mode 100644
index 20f209268..000000000
--- a/module/plugins/accounts/UploadheroCom.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import datetime
-import time
-
-from module.plugins.Account import Account
-
-
-class UploadheroCom(Account):
- __name__ = "UploadheroCom"
- __type__ = "account"
- __version__ = "0.2"
-
- __description__ = """Uploadhero.co account plugin"""
- __author_name__ = "mcmyst"
- __author_mail__ = "mcmyst@hotmail.fr"
-
-
- def loadAccountInfo(self, user, req):
- premium_pattern = re.compile('Il vous reste <span class="bleu">([0-9]+)</span> jours premium.')
-
- data = self.getAccountData(user)
- page = req.load("http://uploadhero.co/my-account")
-
- if premium_pattern.search(page):
- end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1)))
- end_date = time.mktime(future.timetuple())
- account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True}
- else:
- account_info = {"validuntil": -1, "trafficleft": -1, "premium": False}
-
- return account_info
-
- def login(self, user, data, req):
- page = req.load("http://uploadhero.co/lib/connexion.php",
- post={"pseudo_login": user, "password_login": data['password']})
-
- if "mot de passe invalide" in page:
- self.wrongPassword()
diff --git a/module/plugins/accounts/UploadingCom.py b/module/plugins/accounts/UploadingCom.py
deleted file mode 100644
index 416a29b1e..000000000
--- a/module/plugins/accounts/UploadingCom.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time, strptime, mktime
-import re
-
-from module.plugins.Account import Account
-
-
-class UploadingCom(Account):
- __name__ = "UploadingCom"
- __type__ = "account"
- __version__ = "0.1"
-
- __description__ = """Uploading.com account plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def loadAccountInfo(self, user, req):
- src = req.load("http://uploading.com/")
- premium = True
- if "UPGRADE TO PREMIUM" in src:
- return {"validuntil": -1, "trafficleft": -1, "premium": False}
-
- m = re.search("Valid Until:(.*?)<", src)
- if m:
- validuntil = int(mktime(strptime(m.group(1).strip(), "%b %d, %Y")))
- else:
- validuntil = -1
-
- return {"validuntil": validuntil, "trafficleft": -1, "premium": True}
-
- def login(self, user, data, req):
- req.cj.setCookie("uploading.com", "lang", "1")
- req.cj.setCookie("uploading.com", "language", "1")
- req.cj.setCookie("uploading.com", "setlang", "en")
- req.cj.setCookie("uploading.com", "_lang", "en")
- req.load("http://uploading.com/")
- req.load("http://uploading.com/general/login_form/?JsHttpRequest=%s-xml" % long(time() * 1000),
- post={"email": user, "password": data['password'], "remember": "on"})
diff --git a/module/plugins/accounts/UptoboxCom.py b/module/plugins/accounts/UptoboxCom.py
deleted file mode 100644
index 60de213ae..000000000
--- a/module/plugins/accounts/UptoboxCom.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class UptoboxCom(XFSPAccount):
- __name__ = "UptoboxCom"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """DDLStorage.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- MAIN_PAGE = "http://uptobox.com/"
-
- VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire: ([^<]+)</strong>'
diff --git a/module/plugins/accounts/YibaishiwuCom.py b/module/plugins/accounts/YibaishiwuCom.py
deleted file mode 100644
index be62d3f40..000000000
--- a/module/plugins/accounts/YibaishiwuCom.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Account import Account
-
-
-class YibaishiwuCom(Account):
- __name__ = "YibaishiwuCom"
- __type__ = "account"
- __version__ = "0.01"
-
- __description__ = """115.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- ACCOUNT_INFO_PATTERN = r'var USER_PERMISSION = {(.*?)}'
-
-
- def loadAccountInfo(self, user, req):
- #self.relogin(user)
- html = req.load("http://115.com/", decode=True)
-
- m = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S)
- premium = True if (m and 'is_vip: 1' in m.group(1)) else False
- validuntil = trafficleft = (-1 if m else 0)
- return dict({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium})
-
- def login(self, user, data, req):
- html = req.load('http://passport.115.com/?ac=login', post={
- "back": "http://www.115.com/",
- "goto": "http://115.com/",
- "login[account]": user,
- "login[passwd]": data['password']
- }, decode=True)
-
- if not 'var USER_PERMISSION = {' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/ZeveraCom.py b/module/plugins/accounts/ZeveraCom.py
deleted file mode 100644
index db1ebd4ae..000000000
--- a/module/plugins/accounts/ZeveraCom.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-
-
-class ZeveraCom(Account):
- __name__ = "ZeveraCom"
- __type__ = "account"
- __version__ = "0.21"
-
- __description__ = """Zevera.com account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def loadAccountInfo(self, user, req):
- data = self.getAPIData(req)
- if data == "No traffic":
- account_info = {"trafficleft": 0, "validuntil": 0, "premium": False}
- else:
- account_info = {
- "trafficleft": int(data['availabletodaytraffic']) * 1024,
- "validuntil": mktime(strptime(data['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S")),
- "premium": True
- }
- return account_info
-
- def login(self, user, data, req):
- self.loginname = user
- self.password = data['password']
- if self.getAPIData(req) == "No traffic":
- self.wrongPassword()
-
- def getAPIData(self, req, just_header=False, **kwargs):
- get_data = {
- 'cmd': 'accountinfo',
- 'login': self.loginname,
- 'pass': self.password
- }
- get_data.update(kwargs)
-
- response = req.load("http://www.zevera.com/jDownloader.ashx", get=get_data,
- decode=True, just_header=just_header)
- self.logDebug(response)
-
- if ':' in response:
- if not just_header:
- response = response.replace(',', '\n')
- return dict((y.strip().lower(), z.strip()) for (y, z) in
- [x.split(':', 1) for x in response.splitlines() if ':' in x])
- else:
- return response
diff --git a/module/plugins/container/CCF.py b/module/plugins/container/CCF.py
deleted file mode 100644
index 959eeb1d0..000000000
--- a/module/plugins/container/CCF.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from os import makedirs
-from os.path import exists
-from urllib2 import build_opener
-
-from module.lib.MultipartPostHandler import MultipartPostHandler
-
-from module.plugins.Container import Container
-from module.utils import safe_join
-
-
-class CCF(Container):
- __name__ = "CCF"
- __version__ = "0.2"
-
- __pattern__ = r'.+\.ccf'
-
- __description__ = """CCF container decrypter plugin"""
- __author_name__ = "Willnix"
- __author_mail__ = "Willnix@pyload.org"
-
-
- def decrypt(self, pyfile):
-
- infile = pyfile.url.replace("\n", "")
-
- opener = build_opener(MultipartPostHandler)
- params = {"src": "ccf",
- "filename": "test.ccf",
- "upload": open(infile, "rb")}
- tempdlc_content = opener.open('http://service.jdownloader.net/dlcrypt/getDLC.php', params).read()
-
- download_folder = self.config['general']['download_folder']
-
- tempdlc_name = safe_join(download_folder, "tmp_%s.dlc" % pyfile.name)
- tempdlc = open(tempdlc_name, "w")
- tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.DOTALL).group(1))
- tempdlc.close()
-
- self.urls = [tempdlc_name]
diff --git a/module/plugins/container/LinkList.py b/module/plugins/container/LinkList.py
deleted file mode 100644
index 7e418bd67..000000000
--- a/module/plugins/container/LinkList.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import codecs
-
-from module.plugins.Container import Container
-from module.utils import fs_encode
-
-
-class LinkList(Container):
- __name__ = "LinkList"
- __version__ = "0.12"
-
- __pattern__ = r'.+\.txt'
- __config__ = [("clear", "bool", "Clear Linklist after adding", False),
- ("encoding", "string", "File encoding (default utf-8)", "")]
-
- __description__ = """Read link lists in txt format"""
- __author_name__ = ("spoob", "jeix")
- __author_mail__ = ("spoob@pyload.org", "jeix@hasnomail.com")
-
-
- def decrypt(self, pyfile):
- try:
- file_enc = codecs.lookup(self.getConfig("encoding")).name
- except:
- file_enc = "utf-8"
-
- print repr(pyfile.url)
- print pyfile.url
-
- file_name = fs_encode(pyfile.url)
-
- txt = codecs.open(file_name, 'r', file_enc)
- links = txt.readlines()
- curPack = "Parsed links from %s" % pyfile.name
-
- packages = {curPack:[],}
-
- for link in links:
- link = link.strip()
- if not link:
- continue
-
- if link.startswith(";"):
- continue
- if link.startswith("[") and link.endswith("]"):
- # new package
- curPack = link[1:-1]
- packages[curPack] = []
- continue
- packages[curPack].append(link)
- txt.close()
-
- # empty packages fix
-
- delete = []
-
- for key,value in packages.iteritems():
- if not value:
- delete.append(key)
-
- for key in delete:
- del packages[key]
-
- if self.getConfig("clear"):
- try:
- txt = open(file_name, 'wb')
- txt.close()
- except:
- self.logWarning(_("LinkList could not be cleared."))
-
- for name, links in packages.iteritems():
- self.packages.append((name, links, name))
diff --git a/module/plugins/container/RSDF.py b/module/plugins/container/RSDF.py
deleted file mode 100644
index c35efacc6..000000000
--- a/module/plugins/container/RSDF.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import base64
-import binascii
-import re
-
-from module.plugins.Container import Container
-
-
-class RSDF(Container):
- __name__ = "RSDF"
- __version__ = "0.22"
-
- __pattern__ = r'.+\.rsdf'
-
- __description__ = """RSDF container decrypter plugin"""
- __author_name__ = ("RaNaN", "spoob")
- __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org")
-
-
- def decrypt(self, pyfile):
-
- from Crypto.Cipher import AES
-
- infile = pyfile.url.replace("\n", "")
- Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')
-
- IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
- IV_Cipher = AES.new(Key, AES.MODE_ECB)
- IV = IV_Cipher.encrypt(IV)
-
- obj = AES.new(Key, AES.MODE_CFB, IV)
-
- rsdf = open(infile, 'r')
-
- data = rsdf.read()
- rsdf.close()
-
- if re.search(r"<title>404 - Not Found</title>", data) is None:
- data = binascii.unhexlify(''.join(data.split()))
- data = data.splitlines()
-
- for link in data:
- if not link:
- continue
- link = base64.b64decode(link)
- link = obj.decrypt(link)
- decryptedUrl = link.replace('CCF: ', '')
- self.urls.append(decryptedUrl)
-
- self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links)))
diff --git a/module/plugins/crypter/BitshareComFolder.py b/module/plugins/crypter/BitshareComFolder.py
deleted file mode 100644
index 219dabce8..000000000
--- a/module/plugins/crypter/BitshareComFolder.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class BitshareComFolder(SimpleCrypter):
- __name__ = "BitshareComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
-
- __description__ = """Bitshare.com folder decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<a href="(http://bitshare.com/files/.+)">.+</a></td>'
- TITLE_PATTERN = r'View public folder "(?P<title>.+)"</h1>'
diff --git a/module/plugins/crypter/C1neonCom.py b/module/plugins/crypter/C1neonCom.py
deleted file mode 100644
index 829ed63d6..000000000
--- a/module/plugins/crypter/C1neonCom.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class C1neonCom(DeadCrypter):
- __name__ = "C1neonCom"
- __type__ = "crypter"
- __version__ = "0.05"
-
- __pattern__ = r'http://(?:www\.)?c1neon.com/.*?'
-
- __description__ = """C1neon.com decrypter plugin"""
- __author_name__ = "godofdream"
- __author_mail__ = "soilfiction@gmail.com"
diff --git a/module/plugins/crypter/ChipDe.py b/module/plugins/crypter/ChipDe.py
deleted file mode 100644
index a75cc5e0e..000000000
--- a/module/plugins/crypter/ChipDe.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class ChipDe(Crypter):
- __name__ = "ChipDe"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html'
-
- __description__ = """Chip.de decrypter plugin"""
- __author_name__ = "4Christopher"
- __author_mail__ = "4Christopher@gmx.de"
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url)
- try:
- f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html)
- except:
- self.fail('Failed to find the URL')
- else:
- self.urls = [f.group(1)]
- self.logDebug('The file URL is %s' % self.urls[0])
diff --git a/module/plugins/crypter/CrockoComFolder.py b/module/plugins/crypter/CrockoComFolder.py
deleted file mode 100644
index 56abeac29..000000000
--- a/module/plugins/crypter/CrockoComFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class CrockoComFolder(SimpleCrypter):
- __name__ = "CrockoComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?crocko.com/f/.*'
-
- __description__ = """Crocko.com folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>'
diff --git a/module/plugins/crypter/CryptItCom.py b/module/plugins/crypter/CryptItCom.py
deleted file mode 100644
index 66c5e7ca7..000000000
--- a/module/plugins/crypter/CryptItCom.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class CryptItCom(DeadCrypter):
- __name__ = "CryptItCom"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+'
-
- __description__ = """Crypt-it.com decrypter plugin"""
- __author_name__ = "jeix"
- __author_mail__ = "jeix@hasnomail.de"
diff --git a/module/plugins/crypter/CzshareComFolder.py b/module/plugins/crypter/CzshareComFolder.py
deleted file mode 100644
index 64affc867..000000000
--- a/module/plugins/crypter/CzshareComFolder.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class CzshareComFolder(Crypter):
- __name__ = "CzshareComFolder"
- __type__ = "crypter"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*'
-
- __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>'
- LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>'
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if m is None:
- self.fail("Parse error (FOLDER)")
-
- self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/DDLMusicOrg.py b/module/plugins/crypter/DDLMusicOrg.py
deleted file mode 100644
index f5e7203d3..000000000
--- a/module/plugins/crypter/DDLMusicOrg.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import sleep
-
-from module.plugins.Crypter import Crypter
-
-
-class DDLMusicOrg(Crypter):
- __name__ = "DDLMusicOrg"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
-
- __description__ = """Ddl-music.org decrypter plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def setup(self):
- self.multiDL = False
-
- def decrypt(self, pyfile):
- html = self.req.load(pyfile.url, cookies=True)
-
- if re.search(r"Wer dies nicht rechnen kann", html) is not None:
- self.offline()
-
- math = re.search(r"(\d+) ([\+-]) (\d+) =\s+<inp", self.html)
- id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1)
- linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1)
-
- solve = ""
- if math.group(2) == "+":
- solve = int(math.group(1)) + int(math.group(3))
- else:
- solve = int(math.group(1)) - int(math.group(3))
- sleep(3)
- htmlwithlink = self.req.load(pyfile.url, cookies=True,
- post={"calc%s" % linknr: solve, "send%s" % linknr: "Send", "id": id,
- "linknr": linknr})
- m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink)
- if m:
- self.urls = [m.group(1)]
- else:
- self.retry()
diff --git a/module/plugins/crypter/DailymotionBatch.py b/module/plugins/crypter/DailymotionBatch.py
deleted file mode 100644
index e9a1bb98c..000000000
--- a/module/plugins/crypter/DailymotionBatch.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urlparse import urljoin
-
-from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
-from module.utils import safe_join
-
-
-class DailymotionBatch(Crypter):
- __name__ = "DailymotionBatch"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
-
- __description__ = """Dailymotion.com channel & playlist decrypter"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
- def api_response(self, ref, req=None):
- url = urljoin("https://api.dailymotion.com/", ref)
- page = self.load(url, get=req)
- return json_loads(page)
-
- def getPlaylistInfo(self, id):
- ref = "playlist/" + id
- req = {"fields": "name,owner.screenname"}
- playlist = self.api_response(ref, req)
-
- if "error" in playlist:
- return
-
- name = playlist['name']
- owner = playlist['owner.screenname']
- return name, owner
-
- def _getPlaylists(self, user_id, page=1):
- ref = "user/%s/playlists" % user_id
- req = {"fields": "id", "page": page, "limit": 100}
- user = self.api_response(ref, req)
-
- if "error" in user:
- return
-
- for playlist in user['list']:
- yield playlist['id']
-
- if user['has_more']:
- for item in self._getPlaylists(user_id, page + 1):
- yield item
-
- def getPlaylists(self, user_id):
- return [(id,) + self.getPlaylistInfo(id) for id in self._getPlaylists(user_id)]
-
- def _getVideos(self, id, page=1):
- ref = "playlist/%s/videos" % id
- req = {"fields": "url", "page": page, "limit": 100}
- playlist = self.api_response(ref, req)
-
- if "error" in playlist:
- return
-
- for video in playlist['list']:
- yield video['url']
-
- if playlist['has_more']:
- for item in self._getVideos(id, page + 1):
- yield item
-
- def getVideos(self, playlist_id):
- return list(self._getVideos(playlist_id))[::-1]
-
- def decrypt(self, pyfile):
- m = re.match(self.__pattern__, pyfile.url)
- m_id = m.group("ID")
- m_type = m.group("TYPE")
-
- if m_type == "playlist":
- self.logDebug("Url recognized as Playlist")
- p_info = self.getPlaylistInfo(m_id)
- playlists = [(m_id,) + p_info] if p_info else None
- else:
- self.logDebug("Url recognized as Channel")
- playlists = self.getPlaylists(m_id)
- self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), m_id))
-
- if not playlists:
- self.fail("No playlist available")
-
- for p_id, p_name, p_owner in playlists:
- p_videos = self.getVideos(p_id)
- p_folder = safe_join(self.config['general']['download_folder'], p_owner, p_name)
- self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name))
- self.packages.append((p_name, p_videos, p_folder)) #: folder is NOT recognized by pyload 0.4.9!
diff --git a/module/plugins/crypter/DataHuFolder.py b/module/plugins/crypter/DataHuFolder.py
deleted file mode 100644
index 4f6116100..000000000
--- a/module/plugins/crypter/DataHuFolder.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class DataHuFolder(SimpleCrypter):
- __name__ = "DataHuFolder"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+'
-
- __description__ = """Data.hu folder decrypter plugin"""
- __author_name__ = ("crash", "stickell")
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>"
- TITLE_PATTERN = ur'<title>(?P<title>.+) Let\xf6lt\xe9se</title>'
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
-
- if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected
- password = self.getPassword()
- if password is '':
- self.fail("No password specified, please set right password on Add package form and retry")
- self.logDebug('The folder is password protected', 'Using password: ' + password)
- self.html = self.load(pyfile.url, post={'mappa_pass': password}, decode=True)
- if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password
- self.fail("Incorrect password, please set right password on Add package form and retry")
-
- package_name, folder_name = self.getPackageNameAndFolder()
-
- package_links = re.findall(self.LINK_PATTERN, self.html)
- self.logDebug('Package has %d links' % len(package_links))
-
- if package_links:
- self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/DdlstorageComFolder.py b/module/plugins/crypter/DdlstorageComFolder.py
deleted file mode 100644
index 3b1dc6dd6..000000000
--- a/module/plugins/crypter/DdlstorageComFolder.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo
-
-
-class DdlstorageComFolder(DeadCrypter):
- __name__ = "DdlstorageComFolder"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+'
-
- __description__ = """DDLStorage.com folder decrypter plugin"""
- __author_name__ = ("godofdream", "stickell")
- __author_mail__ = ("soilfiction@gmail.com", "l.stickell@yahoo.it")
-
-
-getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/module/plugins/crypter/DepositfilesComFolder.py b/module/plugins/crypter/DepositfilesComFolder.py
deleted file mode 100644
index b7c273f0b..000000000
--- a/module/plugins/crypter/DepositfilesComFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class DepositfilesComFolder(SimpleCrypter):
- __name__ = "DepositfilesComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+'
-
- __description__ = """Depositfiles.com folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">'
diff --git a/module/plugins/crypter/Dereferer.py b/module/plugins/crypter/Dereferer.py
deleted file mode 100644
index 21529ddfd..000000000
--- a/module/plugins/crypter/Dereferer.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.Crypter import Crypter
-
-
-class Dereferer(Crypter):
- __name__ = "Dereferer"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)'
-
- __description__ = """Crypter for dereferers"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def decrypt(self, pyfile):
- link = re.match(self.__pattern__, pyfile.url).group('url')
- self.urls = [unquote(link).rstrip('+')]
diff --git a/module/plugins/crypter/DlProtectCom.py b/module/plugins/crypter/DlProtectCom.py
deleted file mode 100644
index 4c958437a..000000000
--- a/module/plugins/crypter/DlProtectCom.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from base64 import urlsafe_b64encode
-from time import time
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class DlProtectCom(SimpleCrypter):
- __name__ = "DlProtectCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)'
-
- __description__ = """Dl-protect.com decrypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found'
-
-
- def getLinks(self):
- # Direct link with redirect
- if not re.match(r"http://(?:www\.)?dl-protect\.com", self.req.http.lastEffectiveURL):
- return [self.req.http.lastEffectiveURL]
-
- #id = re.match(self.__pattern__, self.pyfile.url).group("ID")
- key = re.search(r'name="id_key" value="(.+?)"', self.html).group(1)
-
- post_req = {"id_key": key, "submitform": ""}
-
- if self.OFFLINE_PATTERN in self.html:
- self.offline()
- elif ">Please click on continue to see the content" in self.html:
- post_req.update({"submitform": "Continue"})
- else:
- mstime = int(round(time() * 1000))
- b64time = "_" + urlsafe_b64encode(str(mstime)).replace("=", "%3D")
-
- post_req.update({"i": b64time, "submitform": "Decrypt+link"})
-
- if ">Password :" in self.html:
- post_req['pwd'] = self.getPassword()
-
- if ">Security Code" in self.html:
- captcha_id = re.search(r'/captcha\.php\?uid=(.+?)"', self.html).group(1)
- captcha_url = "http://www.dl-protect.com/captcha.php?uid=" + captcha_id
- captcha_code = self.decryptCaptcha(captcha_url, imgtype="gif")
-
- post_req['secure'] = captcha_code
-
- self.html = self.load(self.pyfile.url, post=post_req)
-
- for errmsg in (">The password is incorrect", ">The security code is incorrect"):
- if errmsg in self.html:
- self.fail(errmsg[1:])
-
- pattern = r'<a href="([^/].+?)" target="_blank">'
- return re.findall(pattern, self.html)
diff --git a/module/plugins/crypter/DontKnowMe.py b/module/plugins/crypter/DontKnowMe.py
deleted file mode 100644
index 23fbb8d52..000000000
--- a/module/plugins/crypter/DontKnowMe.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.Crypter import Crypter
-
-
-class DontKnowMe(Crypter):
- __name__ = "DontKnowMe"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$'
-
- __description__ = """DontKnow.me decrypter plugin"""
- __author_name__ = "selaux"
- __author_mail__ = None
-
- LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$'
-
-
- def decrypt(self, pyfile):
- link = re.findall(self.LINK_PATTERN, pyfile.url)[0]
- self.urls = [unquote(link)]
diff --git a/module/plugins/crypter/DuckCryptInfo.py b/module/plugins/crypter/DuckCryptInfo.py
deleted file mode 100644
index e7a5a59e9..000000000
--- a/module/plugins/crypter/DuckCryptInfo.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.lib.BeautifulSoup import BeautifulSoup
-
-from module.plugins.Crypter import Crypter
-
-
-class DuckCryptInfo(Crypter):
- __name__ = "DuckCryptInfo"
- __type__ = "crypter"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)'
-
- __description__ = """DuckCrypt.info decrypter plugin"""
- __author_name__ = "godofdream"
- __author_mail__ = "soilfiction@gmail.com"
-
- TIMER_PATTERN = r'<span id="timer">(.*)</span>'
-
-
- def decrypt(self, pyfile):
- url = pyfile.url
- # seems we don't need to wait
- #src = self.req.load(str(url))
- #m = re.search(self.TIMER_PATTERN, src)
- #if m:
- # self.logDebug("Sleeping for" % m.group(1))
- # self.setWait(int(m.group(1)) ,False)
- m = re.match(self.__pattern__, url)
- if m is None:
- self.fail('Weird error in link')
- if str(m.group(1)) == "link":
- self.handleLink(url)
- else:
- self.handleFolder(m)
-
- def handleFolder(self, m):
- src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2)))
- m = re.match(self.__pattern__, src)
- self.logDebug("Redirectet to " + str(m.group(0)))
- src = self.load(str(m.group(0)))
- soup = BeautifulSoup(src)
- cryptlinks = soup.findAll("div", attrs={"class": "folderbox"})
- self.logDebug("Redirectet to " + str(cryptlinks))
- if not cryptlinks:
- self.fail('no links m - (Plugin out of date?)')
- for clink in cryptlinks:
- if clink.find("a"):
- self.handleLink(clink.find("a")['href'])
-
- def handleLink(self, url):
- src = self.load(url)
- soup = BeautifulSoup(src)
- self.urls = [soup.find("iframe")['src']]
- if not self.urls:
- self.logDebug('no links m - (Plugin out of date?)')
diff --git a/module/plugins/crypter/DuploadOrgFolder.py b/module/plugins/crypter/DuploadOrgFolder.py
deleted file mode 100644
index 6f764f687..000000000
--- a/module/plugins/crypter/DuploadOrgFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class DuploadOrgFolder(SimpleCrypter):
- __name__ = "DuploadOrgFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/'
-
- __description__ = """Dupload.org folder decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<td style="[^"]+"><a href="(http://[^"]+)" target="_blank">[^<]+</a></td>'
diff --git a/module/plugins/crypter/EasybytezComFolder.py b/module/plugins/crypter/EasybytezComFolder.py
deleted file mode 100644
index 7832bef5f..000000000
--- a/module/plugins/crypter/EasybytezComFolder.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class EasybytezComFolder(SimpleCrypter):
- __name__ = "EasybytezComFolder"
- __type__ = "crypter"
- __version__ = "0.06"
-
- __pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)'
-
- __description__ = """Easybytez.com decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")]
-
- LINK_PATTERN = r'<td><a href="(http://www\.easybytez\.com/\w+)" target="_blank">.+(?:</a>)?</td>'
- TITLE_PATTERN = r'<Title>Files of \d+: (?P<title>.+) folder</Title>'
diff --git a/module/plugins/crypter/EmbeduploadCom.py b/module/plugins/crypter/EmbeduploadCom.py
deleted file mode 100644
index 6b876ed7f..000000000
--- a/module/plugins/crypter/EmbeduploadCom.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-from module.network.HTTPRequest import BadHeader
-
-
-class EmbeduploadCom(Crypter):
- __name__ = "EmbeduploadCom"
- __type__ = "crypter"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*'
- __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
-
- __description__ = """EmbedUpload.com decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
- tmp_links = []
-
- m = re.findall(self.LINK_PATTERN, self.html)
- if m:
- prefered_set = set(self.getConfig("preferedHoster").split('|'))
- prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set)
- print "PF", prefered_set
- tmp_links.extend([x[1] for x in m if x[0] in prefered_set])
- self.urls = self.getLocation(tmp_links)
-
- if not self.urls:
- ignored_set = set(self.getConfig("ignoredHoster").split('|'))
- ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set)
- print "IG", ignored_set
- tmp_links.extend([x[1] for x in m if x[0] not in ignored_set])
- self.urls = self.getLocation(tmp_links)
-
- if not self.urls:
- self.fail('Could not extract any links')
-
- def getLocation(self, tmp_links):
- new_links = []
- for link in tmp_links:
- try:
- header = self.load(link, just_header=True)
- if "location" in header:
- new_links.append(header['location'])
- except BadHeader:
- pass
- return new_links
diff --git a/module/plugins/crypter/FilebeerInfoFolder.py b/module/plugins/crypter/FilebeerInfoFolder.py
deleted file mode 100644
index 0743dcb0f..000000000
--- a/module/plugins/crypter/FilebeerInfoFolder.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class FilebeerInfoFolder(DeadCrypter):
- __name__ = "FilebeerInfoFolder"
- __type__ = "crypter"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*'
-
- __description__ = """Filebeer.info folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/FilecloudIoFolder.py b/module/plugins/crypter/FilecloudIoFolder.py
deleted file mode 100644
index 9ec950061..000000000
--- a/module/plugins/crypter/FilecloudIoFolder.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FilecloudIoFolder(SimpleCrypter):
- __name__ = "FilecloudIoFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+'
-
- __description__ = """Filecloud.io folder decrypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title'
- TITLE_PATTERN = r'>(?P<title>.+?) - filecloud.io<'
diff --git a/module/plugins/crypter/FilefactoryComFolder.py b/module/plugins/crypter/FilefactoryComFolder.py
deleted file mode 100644
index 562c56732..000000000
--- a/module/plugins/crypter/FilefactoryComFolder.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FilefactoryComFolder(SimpleCrypter):
- __name__ = "FilefactoryComFolder"
- __type__ = "crypter"
- __version__ = "0.2"
-
- __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+'
-
- __description__ = """Filefactory.com folder decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<td><a href="([^"]+)">'
- TITLE_PATTERN = r'<h1>Files in <span>(?P<title>.+)</span></h1>'
- PAGES_PATTERN = r'data-paginator-totalPages="(?P<pages>\d+)"'
-
- SH_COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')]
-
-
- def loadPage(self, page_n):
- return self.load(self.pyfile.url, get={'page': page_n})
diff --git a/module/plugins/crypter/FilerNetFolder.py b/module/plugins/crypter/FilerNetFolder.py
deleted file mode 100644
index 9951661b5..000000000
--- a/module/plugins/crypter/FilerNetFolder.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FilerNetFolder(SimpleCrypter):
- __name__ = "FilerNetFolder"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'https?://filer\.net/folder/\w{16}'
-
- __description__ = """Filer.net decrypter plugin"""
- __author_name_ = ("nath_schwarz", "stickell")
- __author_mail_ = ("nathan.notwhite@gmail.com", "l.stickell@yahoo.it")
-
- LINK_PATTERN = r'href="(/get/\w{16})">(?!<)'
- TITLE_PATTERN = r'<h3>(?P<title>.+) - <small'
-
-
- def getLinks(self):
- return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)]
diff --git a/module/plugins/crypter/FileserveComFolder.py b/module/plugins/crypter/FileserveComFolder.py
deleted file mode 100644
index 2db6baf0e..000000000
--- a/module/plugins/crypter/FileserveComFolder.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Crypter import Crypter
-
-
-class FileserveComFolder(Crypter):
- __name__ = "FileserveComFolder"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+'
-
- __description__ = """FileServe.com folder decrypter plugin"""
- __author_name__ = "fionnc"
- __author_mail__ = "fionnc@gmail.com"
-
- FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>'
- LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">'
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- new_links = []
-
- folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if folder is None:
- self.fail("Parse error (FOLDER)")
-
- new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1)))
-
- if new_links:
- self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)]
- else:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/FilestubeCom.py b/module/plugins/crypter/FilestubeCom.py
deleted file mode 100644
index f0aaaa579..000000000
--- a/module/plugins/crypter/FilestubeCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FilestubeCom(SimpleCrypter):
- __name__ = "FilestubeCom"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
-
- __description__ = """Filestube.com decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)'
- TITLE_PATTERN = r'<h1\s*> (?P<title>.+) download\s*</h1>'
diff --git a/module/plugins/crypter/FiletramCom.py b/module/plugins/crypter/FiletramCom.py
deleted file mode 100644
index 7052955cf..000000000
--- a/module/plugins/crypter/FiletramCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FiletramCom(SimpleCrypter):
- __name__ = "FiletramCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+'
-
- __description__ = """Filetram.com decrypter plugin"""
- __author_name__ = ("igel", "stickell")
- __author_mail__ = ("igelkun@myopera.com", "l.stickell@yahoo.it")
-
- LINK_PATTERN = r'\s+(http://.+)'
- TITLE_PATTERN = r'<title>(?P<title>[^<]+) - Free Download[^<]*</title>'
diff --git a/module/plugins/crypter/FiredriveComFolder.py b/module/plugins/crypter/FiredriveComFolder.py
deleted file mode 100644
index a94d0847f..000000000
--- a/module/plugins/crypter/FiredriveComFolder.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FiredriveComFolder(SimpleCrypter):
- __name__ = "FiredriveComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+'
-
- __description__ = """Firedrive.com folder decrypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\''
- TITLE_PATTERN = r'>Shared Folder "(?P<title>.+)" | Firedrive<'
- OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<'
- TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)'
-
-
- def getLinks(self):
- return map(lambda x: "http://www.firedrive.com/%s/%s" %
- ("share" if x[0] == "folder" else "file", x[1]),
- re.findall(self.LINK_PATTERN, self.html))
diff --git a/module/plugins/crypter/FourChanOrg.py b/module/plugins/crypter/FourChanOrg.py
deleted file mode 100644
index c497fa799..000000000
--- a/module/plugins/crypter/FourChanOrg.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599)
-
-import re
-
-from module.plugins.Crypter import Crypter
-
-
-class FourChanOrg(Crypter):
- __name__ = "FourChanOrg"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)'
-
- __description__ = """4chan.org folder decrypter plugin"""
- __author_name__ = None
- __author_mail__ = None
-
-
- def decrypt(self, pyfile):
- pagehtml = self.load(pyfile.url)
- images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml))
- self.urls = ["http://" + image for image in images]
diff --git a/module/plugins/crypter/FreakhareComFolder.py b/module/plugins/crypter/FreakhareComFolder.py
deleted file mode 100644
index 2a6877891..000000000
--- a/module/plugins/crypter/FreakhareComFolder.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FreakhareComFolder(SimpleCrypter):
- __name__ = "FreakhareComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
-
- __description__ = """Freakhare.com folder decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<a href="(http://freakshare.com/files/[^"]+)" target="_blank">'
- TITLE_PATTERN = r'Folder:</b> (?P<title>.+)'
- PAGES_PATTERN = r'Pages: +(?P<pages>\d+)'
-
-
- def loadPage(self, page_n):
- if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'):
- m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html)
- if m:
- self.f_id = m.group(1)
- self.f_md5 = m.group(2)
- return self.load('http://freakshare.com/', get={'x': 'folder',
- 'f_id': self.f_id,
- 'f_md5': self.f_md5,
- 'entrys': '20',
- 'page': page_n - 1,
- 'order': ''}, decode=True)
diff --git a/module/plugins/crypter/FreetexthostCom.py b/module/plugins/crypter/FreetexthostCom.py
deleted file mode 100644
index bd8a90ce5..000000000
--- a/module/plugins/crypter/FreetexthostCom.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FreetexthostCom(SimpleCrypter):
- __name__ = "FreetexthostCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
-
- __description__ = """Freetexthost.com decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def getLinks(self):
- m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL)
- if m is None:
- self.fail('Unable to extract links | Plugin may be out-of-date')
- links = m.group(1)
- return links.strip().split("<br />\r\n")
diff --git a/module/plugins/crypter/FshareVnFolder.py b/module/plugins/crypter/FshareVnFolder.py
deleted file mode 100644
index 5976ff6d5..000000000
--- a/module/plugins/crypter/FshareVnFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class FshareVnFolder(SimpleCrypter):
- __name__ = "FshareVnFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*'
-
- __description__ = """Fshare.vn folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">'
diff --git a/module/plugins/crypter/GooGl.py b/module/plugins/crypter/GooGl.py
deleted file mode 100644
index 1d9c2801f..000000000
--- a/module/plugins/crypter/GooGl.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Crypter import Crypter
-from module.common.json_layer import json_loads
-
-
-class GooGl(Crypter):
- __name__ = "GooGl"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
-
- __description__ = """Goo.gl decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- API_URL = "https://www.googleapis.com/urlshortener/v1/url"
-
-
- def decrypt(self, pyfile):
- rep = self.load(self.API_URL, get={'shortUrl': pyfile.url})
- self.logDebug('JSON data: ' + rep)
- rep = json_loads(rep)
-
- if 'longUrl' in rep:
- self.urls = [rep['longUrl']]
- else:
- self.fail('Unable to expand shortened link')
diff --git a/module/plugins/crypter/HoerbuchIn.py b/module/plugins/crypter/HoerbuchIn.py
deleted file mode 100644
index 924ce5d3a..000000000
--- a/module/plugins/crypter/HoerbuchIn.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.lib.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
-
-from module.plugins.Crypter import Crypter
-
-
-class HoerbuchIn(Crypter):
- __name__ = "HoerbuchIn"
- __type__ = "crypter"
- __version__ = "0.6"
-
- __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)'
-
- __description__ = """Hoerbuch.in decrypter plugin"""
- __author_name__ = ("spoob", "mkaay")
- __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de")
-
- article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/")
- protection = re.compile("http://(?:www\.)?hoerbuch\.in/protection/folder_\d+.html")
-
-
- def decrypt(self, pyfile):
- self.pyfile = pyfile
-
- if self.article.match(pyfile.url):
- src = self.load(pyfile.url)
- soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
-
- abookname = soup.find("a", attrs={"rel": "bookmark"}).text
- for a in soup.findAll("a", attrs={"href": self.protection}):
- package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1])
- links = self.decryptFolder(a['href'])
-
- self.packages.append((package, links, package))
- else:
- self.urls = self.decryptFolder(pyfile.url)
-
- def decryptFolder(self, url):
- m = self.protection.search(url)
- if m is None:
- self.fail("Bad URL")
- url = m.group(0)
-
- self.pyfile.url = url
- src = self.req.load(url, post={"viewed": "adpg"})
-
- links = []
- pattern = re.compile("http://www\.hoerbuch\.in/protection/(\w+)/(.*?)\"")
- for hoster, lid in pattern.findall(src):
- self.req.lastURL = url
- self.load("http://www.hoerbuch.in/protection/%s/%s" % (hoster, lid))
- links.append(self.req.lastEffectiveURL)
-
- return links
diff --git a/module/plugins/crypter/HotfileFolderCom.py b/module/plugins/crypter/HotfileFolderCom.py
deleted file mode 100644
index 3efd8fc87..000000000
--- a/module/plugins/crypter/HotfileFolderCom.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Crypter import Crypter
-
-
-class HotfileFolderCom(Crypter):
- __name__ = "HotfileFolderCom"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+'
-
- __description__ = """Hotfile.com folder decrypter plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- name = re.findall(
- r'<img src="/i/folder.gif" width="23" height="14" style="margin-bottom: -2px;" />([^<]+)', html,
- re.MULTILINE)[0].replace("/", "")
- new_links = re.findall(r'href="(http://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+[^"]+)', html)
-
- new_links = [x[0] for x in new_links]
-
- self.packages = [(name, new_links, name)]
diff --git a/module/plugins/crypter/ILoadTo.py b/module/plugins/crypter/ILoadTo.py
deleted file mode 100644
index d7818570a..000000000
--- a/module/plugins/crypter/ILoadTo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class ILoadTo(DeadCrypter):
- __name__ = "ILoadTo"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/'
-
- __description__ = """Iload.to decrypter plugin"""
- __author_name__ = "hzpz"
- __author_mail__ = None
diff --git a/module/plugins/crypter/ImgurComAlbum.py b/module/plugins/crypter/ImgurComAlbum.py
deleted file mode 100644
index eb1f4441a..000000000
--- a/module/plugins/crypter/ImgurComAlbum.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-from module.utils import uniqify
-
-
-class ImgurComAlbum(SimpleCrypter):
- __name__ = "ImgurComAlbum"
- __type__ = "crypter"
- __version__ = "0.4"
-
- __pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}'
-
- __description__ = """Imgur.com decrypter plugin"""
- __author_name_ = "nath_schwarz"
- __author_mail_ = "nathan.notwhite@gmail.com"
-
- TITLE_PATTERN = r'(?P<title>.+) - Imgur'
- LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)'
-
-
- def getLinks(self):
- f = lambda url: "http://" + re.sub(r'(\w{7})s\.', r'\1.', url)
- return uniqify(map(f, re.findall(self.LINK_PATTERN, self.html)))
diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/module/plugins/crypter/LetitbitNetFolder.py
deleted file mode 100644
index 0297d2007..000000000
--- a/module/plugins/crypter/LetitbitNetFolder.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class LetitbitNetFolder(Crypter):
- __name__ = "LetitbitNetFolder"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+'
-
- __description__ = """Letitbit.net folder decrypter plugin"""
- __author_name__ = ("DHMH", "z00nx")
- __author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com")
-
- FOLDER_PATTERN = r'<table>(.*)</table>'
- LINK_PATTERN = r'<a href="([^"]+)" target="_blank">'
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if folder is None:
- self.fail("Parse error (FOLDER)")
-
- self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/LinkSaveIn.py b/module/plugins/crypter/LinkSaveIn.py
deleted file mode 100644
index 060a434d2..000000000
--- a/module/plugins/crypter/LinkSaveIn.py
+++ /dev/null
@@ -1,225 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# * cnl2 and web links are skipped if JS is not available (instead of failing the package)
-# * only best available link source is used (priority: cnl2>rsdf>ccf>dlc>web
-
-import base64
-import binascii
-import re
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-from module.unescape import unescape
-
-
-class LinkSaveIn(Crypter):
- __name__ = "LinkSaveIn"
- __type__ = "crypter"
- __version__ = "2.01"
-
- __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$'
-
- __description__ = """LinkSave.in decrypter plugin"""
- __author_name__ = "fragonib"
- __author_mail__ = "fragonib[AT]yahoo[DOT]es"
-
- # Constants
- _JK_KEY_ = "jk"
- _CRYPTED_KEY_ = "crypted"
- HOSTER_NAME = "linksave.in"
-
-
- def setup(self):
- self.html = None
- self.fileid = None
- self.captcha = False
- self.package = None
- self.preferred_sources = ["cnl2", "rsdf", "ccf", "dlc", "web"]
-
- def decrypt(self, pyfile):
- # Init
- self.package = pyfile.package()
- self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
- self.req.cj.setCookie(self.HOSTER_NAME, "Linksave_Language", "english")
-
- # Request package
- self.html = self.load(pyfile.url)
- if not self.isOnline():
- self.offline()
-
- # Check for protection
- if self.isPasswordProtected():
- self.unlockPasswordProtection()
- self.handleErrors()
-
- if self.isCaptchaProtected():
- self.captcha = True
- self.unlockCaptchaProtection()
- self.handleErrors()
-
- # Get package name and folder
- (package_name, folder_name) = self.getPackageInfo()
-
- # Extract package links
- package_links = []
- for type_ in self.preferred_sources:
- package_links.extend(self.handleLinkSource(type_))
- if package_links: # use only first source which provides links
- break
- package_links = set(package_links)
-
- # Pack
- if package_links:
- self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
-
- def isOnline(self):
- if "<big>Error 404 - Folder not found!</big>" in self.html:
- self.logDebug("File not found")
- return False
- return True
-
- def isPasswordProtected(self):
- if re.search(r'''<input.*?type="password"''', self.html):
- self.logDebug("Links are password protected")
- return True
-
- def isCaptchaProtected(self):
- if "<b>Captcha:</b>" in self.html:
- self.logDebug("Links are captcha protected")
- return True
- return False
-
- def unlockPasswordProtection(self):
- password = self.getPassword()
- self.logDebug("Submitting password [%s] for protected links" % password)
- post = {"id": self.fileid, "besucherpasswort": password, 'login': 'submit'}
- self.html = self.load(self.pyfile.url, post=post)
-
- def unlockCaptchaProtection(self):
- captcha_hash = re.search(r'name="hash" value="([^"]+)', self.html).group(1)
- captcha_url = re.search(r'src=".(/captcha/cap.php\?hsh=[^"]+)', self.html).group(1)
- captcha_code = self.decryptCaptcha("http://linksave.in" + captcha_url, forceUser=True)
- self.html = self.load(self.pyfile.url, post={"id": self.fileid, "hash": captcha_hash, "code": captcha_code})
-
- def getPackageInfo(self):
- name = self.pyfile.package().name
- folder = self.pyfile.package().folder
- self.logDebug("Defaulting to pyfile name [%s] and folder [%s] for package" % (name, folder))
- return name, folder
-
- def handleErrors(self):
- if "The visitorpassword you have entered is wrong" in self.html:
- self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
-
- if self.captcha:
- if "Wrong code. Please retry" in self.html:
- self.logDebug("Invalid captcha, retrying")
- self.invalidCaptcha()
- self.retry()
- else:
- self.correctCaptcha()
-
- def handleLinkSource(self, type_):
- if type_ == "cnl2":
- return self.handleCNL2()
- elif type_ in ("rsdf", "ccf", "dlc"):
- return self.handleContainer(type_)
- elif type_ == "web":
- return self.handleWebLinks()
- else:
- self.fail('unknown source type "%s" (this is probably a bug)' % type_)
-
- def handleWebLinks(self):
- package_links = []
- self.logDebug("Search for Web links")
- if not self.js:
- self.logDebug("no JS -> skip Web links")
- else:
- #@TODO: Gather paginated web links
- pattern = r'<a href="http://linksave\.in/(\w{43})"'
- ids = re.findall(pattern, self.html)
- self.logDebug("Decrypting %d Web links" % len(ids))
- for i, weblink_id in enumerate(ids):
- try:
- webLink = "http://linksave.in/%s" % weblink_id
- self.logDebug("Decrypting Web link %d, %s" % (i + 1, webLink))
- fwLink = "http://linksave.in/fw-%s" % weblink_id
- response = self.load(fwLink)
- jscode = re.findall(r'<script type="text/javascript">(.*)</script>', response)[-1]
- jseval = self.js.eval("document = { write: function(e) { return e; } }; %s" % jscode)
- dlLink = re.search(r'http://linksave\.in/dl-\w+', jseval).group(0)
- self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
- response = self.load(dlLink)
- link = unescape(re.search(r'<iframe src="(.+?)"', response).group(1))
- package_links.append(link)
- except Exception, detail:
- self.logDebug("Error decrypting Web link %s, %s" % (webLink, detail))
- return package_links
-
- def handleContainer(self, type_):
- package_links = []
- type_ = type_.lower()
- self.logDebug('Seach for %s Container links' % type_.upper())
- if not type_.isalnum(): # check to prevent broken re-pattern (cnl2,rsdf,ccf,dlc,web are all alpha-numeric)
- self.fail('unknown container type "%s" (this is probably a bug)' % type_)
- pattern = r"\('%s_link'\).href=unescape\('(.*?\.%s)'\)" % (type_, type_)
- containersLinks = re.findall(pattern, self.html)
- self.logDebug("Found %d %s Container links" % (len(containersLinks), type_.upper()))
- for containerLink in containersLinks:
- link = "http://linksave.in/%s" % unescape(containerLink)
- package_links.append(link)
- return package_links
-
- def handleCNL2(self):
- package_links = []
- self.logDebug("Search for CNL2 links")
- if not self.js:
- self.logDebug("no JS -> skip CNL2 links")
- elif 'cnl2_load' in self.html:
- try:
- (vcrypted, vjk) = self._getCipherParams()
- for (crypted, jk) in zip(vcrypted, vjk):
- package_links.extend(self._getLinks(crypted, jk))
- except:
- self.fail("Unable to decrypt CNL2 links")
- return package_links
-
- def _getCipherParams(self):
- # Get jk
- jk_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._JK_KEY_
- vjk = re.findall(jk_re, self.html)
-
- # Get crypted
- crypted_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._CRYPTED_KEY_
- vcrypted = re.findall(crypted_re, self.html)
-
- # Log and return
- self.logDebug("Detected %d crypted blocks" % len(vcrypted))
- return vcrypted, vjk
-
- def _getLinks(self, crypted, jk):
- # Get key
- jreturn = self.js.eval("%s f()" % jk)
- self.logDebug("JsEngine returns value [%s]" % jreturn)
- key = binascii.unhexlify(jreturn)
-
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
- # Decrypt
- Key = key
- IV = key
- obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
-
- # Extract links
- text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
-
- # Log and return
- self.logDebug("Package has %d links" % len(links))
- return links
diff --git a/module/plugins/crypter/LinkdecrypterCom.py b/module/plugins/crypter/LinkdecrypterCom.py
deleted file mode 100644
index 21f05b962..000000000
--- a/module/plugins/crypter/LinkdecrypterCom.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class LinkdecrypterCom(Crypter):
- __name__ = "LinkdecrypterCom"
- __type__ = "crypter"
- __version__ = "0.27"
-
- __pattern__ = None
-
- __description__ = """Linkdecrypter.com"""
- __author_name__ = ("zoidberg", "flowlee")
- __author_mail__ = ("zoidberg@mujmail.cz", "")
-
- TEXTAREA_PATTERN = r'<textarea name="links" wrap="off" readonly="1" class="caja_des">(.+)</textarea>'
- PASSWORD_PATTERN = r'<input type="text" name="password"'
- CAPTCHA_PATTERN = r'<img class="captcha" src="(.+?)"(.*?)>'
- REDIR_PATTERN = r'<i>(Click <a href="./">here</a> if your browser does not redirect you).</i>'
-
-
- def decrypt(self, pyfile):
-
- self.passwords = self.getPassword().splitlines()
-
- # API not working anymore
- self.urls = self.decryptHTML()
- if not self.urls:
- self.fail('Could not extract any links')
-
- def decryptAPI(self):
-
- get_dict = {"t": "link", "url": self.pyfile.url, "lcache": "1"}
- self.html = self.load('http://linkdecrypter.com/api', get=get_dict)
- if self.html.startswith('http://'):
- return self.html.splitlines()
-
- if self.html == 'INTERRUPTION(PASSWORD)':
- for get_dict['pass'] in self.passwords:
- self.html = self.load('http://linkdecrypter.com/api', get=get_dict)
- if self.html.startswith('http://'):
- return self.html.splitlines()
-
- self.logError('API', self.html)
- if self.html == 'INTERRUPTION(PASSWORD)':
- self.fail("No or incorrect password")
-
- return None
-
- def decryptHTML(self):
-
- retries = 5
-
- post_dict = {"link_cache": "on", "pro_links": self.pyfile.url, "modo_links": "text"}
- self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True)
-
- while self.passwords or retries:
- m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL)
- if m:
- return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x]
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- captcha_url = 'http://linkdecrypter.com/' + m.group(1)
- result_type = "positional" if "getPos" in m.group(2) else "textual"
-
- m = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html)
- msg = m.group(1) if m else ""
- self.logInfo("Captcha protected link", result_type, msg)
-
- captcha = self.decryptCaptcha(captcha_url, result_type=result_type)
- if result_type == "positional":
- captcha = "%d|%d" % captcha
- self.html = self.load('http://linkdecrypter.com/', post={"captcha": captcha}, decode=True)
- retries -= 1
-
- elif self.PASSWORD_PATTERN in self.html:
- if self.passwords:
- password = self.passwords.pop(0)
- self.logInfo("Password protected link, trying " + password)
- self.html = self.load('http://linkdecrypter.com/', post={'password': password}, decode=True)
- else:
- self.fail("No or incorrect password")
-
- else:
- retries -= 1
- self.html = self.load('http://linkdecrypter.com/', cookies=True, decode=True)
-
- return None
diff --git a/module/plugins/crypter/LixIn.py b/module/plugins/crypter/LixIn.py
deleted file mode 100644
index cdf87eeb2..000000000
--- a/module/plugins/crypter/LixIn.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Crypter import Crypter
-
-
-class LixIn(Crypter):
- __name__ = "LixIn"
- __type__ = "crypter"
- __version__ = "0.22"
-
- __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)'
-
- __description__ = """Lix.in decrypter plugin"""
- __author_name__ = "spoob"
- __author_mail__ = "spoob@pyload.org"
-
- CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"'
- SUBMIT_PATTERN = r"value='continue.*?'"
- LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"'
-
-
- def decrypt(self, pyfile):
- url = pyfile.url
-
- m = re.match(self.__pattern__, url)
- if m is None:
- self.fail("couldn't identify file id")
-
- id = m.group("id")
- self.logDebug("File id is %s" % id)
-
- self.html = self.req.load(url, decode=True)
-
- m = re.search(self.SUBMIT_PATTERN, self.html)
- if m is None:
- self.fail("link doesn't seem valid")
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- for _ in xrange(5):
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- self.logDebug("trying captcha")
- captcharesult = self.decryptCaptcha("http://lix.in/" + m.group("image"))
- self.html = self.req.load(url, decode=True,
- post={"capt": captcharesult, "submit": "submit", "tiny": id})
- else:
- self.logDebug("no captcha/captcha solved")
- else:
- self.html = self.req.load(url, decode=True, post={"submit": "submit", "tiny": id})
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.fail("can't find destination url")
- else:
- self.urls = [m.group("link")]
- self.logDebug("Found link %s, adding to package" % self.urls[0])
diff --git a/module/plugins/crypter/LofCc.py b/module/plugins/crypter/LofCc.py
deleted file mode 100644
index 8a5cd86ee..000000000
--- a/module/plugins/crypter/LofCc.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class LofCc(DeadCrypter):
- __name__ = "LofCc"
- __type__ = "crypter"
- __version__ = "0.21"
-
- __pattern__ = r'http://(?:www\.)?lof.cc/(.*)'
-
- __description__ = """Lof.cc decrypter plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/crypter/MBLinkInfo.py b/module/plugins/crypter/MBLinkInfo.py
deleted file mode 100644
index 4fc066e57..000000000
--- a/module/plugins/crypter/MBLinkInfo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class MBLinkInfo(DeadCrypter):
- __name__ = "MBLinkInfo"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
-
- __description__ = """MBLink.info decrypter plugin"""
- __author_name__ = ("Gummibaer", "stickell")
- __author_mail__ = ("Gummibaer@wiki-bierkiste.de", "l.stickell@yahoo.it")
diff --git a/module/plugins/crypter/MediafireComFolder.py b/module/plugins/crypter/MediafireComFolder.py
deleted file mode 100644
index bb7c90722..000000000
--- a/module/plugins/crypter/MediafireComFolder.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-from module.plugins.hoster.MediafireCom import checkHTMLHeader
-from module.common.json_layer import json_loads
-
-
-class MediafireComFolder(Crypter):
- __name__ = "MediafireComFolder"
- __type__ = "crypter"
- __version__ = "0.14"
-
- __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
-
- __description__ = """Mediafire.com folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_KEY_PATTERN = r"var afI= '(\w+)';"
- FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>'
-
-
- def decrypt(self, pyfile):
- url, result = checkHTMLHeader(pyfile.url)
- self.logDebug('Location (%d): %s' % (result, url))
-
- if result == 0:
- # load and parse html
- html = self.load(pyfile.url)
- m = re.search(self.FILE_URL_PATTERN, html)
- if m:
- # file page
- self.urls.append("http://www.mediafire.com/file/%s" % m.group(1))
- else:
- # folder page
- m = re.search(self.FOLDER_KEY_PATTERN, html)
- if m:
- folder_key = m.group(1)
- self.logDebug("FOLDER KEY: %s" % folder_key)
-
- json_resp = json_loads(self.load(
- "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key))
- #self.logInfo(json_resp)
- if json_resp['response']['result'] == "Success":
- for link in json_resp['response']['folder_info']['files']:
- self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey'])
- else:
- self.fail(json_resp['response']['message'])
- elif result == 1:
- self.offline()
- else:
- self.urls.append(url)
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/Movie2kTo.py b/module/plugins/crypter/Movie2kTo.py
deleted file mode 100644
index ba201621f..000000000
--- a/module/plugins/crypter/Movie2kTo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class Movie2kTo(DeadCrypter):
- __name__ = "Movie2kTo"
- __type__ = "crypter"
- __version__ = "0.51"
-
- __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html'
-
- __description__ = """Movie2k.to decrypter plugin"""
- __author_name__ = "4Christopher"
- __author_mail__ = "4Christopher@gmx.de"
diff --git a/module/plugins/crypter/MultiUpOrg.py b/module/plugins/crypter/MultiUpOrg.py
deleted file mode 100644
index ffeaa6f04..000000000
--- a/module/plugins/crypter/MultiUpOrg.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from urlparse import urljoin
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class MultiUpOrg(SimpleCrypter):
- __name__ = "MultiUpOrg"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
-
- __description__ = """MultiUp.org crypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- TITLE_PATTERN = r'<title>.*(Project|Projet|ownload|élécharger) (?P<title>.+?) (\(|- )'
-
-
- def getLinks(self):
- m_type = re.match(self.__pattern__, self.pyfile.url).group("TYPE")
-
- if m_type == "project":
- pattern = r'\n(http://www\.multiup\.org/(?:en|fr)/download/.*)'
- else:
- pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"'
- if m_type == "download":
- dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>'
- miror_page = urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1))
- self.html = self.load(miror_page)
-
- return re.findall(pattern, self.html)
diff --git a/module/plugins/crypter/MultiloadCz.py b/module/plugins/crypter/MultiloadCz.py
deleted file mode 100644
index 7d43ec729..000000000
--- a/module/plugins/crypter/MultiloadCz.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class MultiloadCz(Crypter):
- __name__ = "MultiloadCz"
- __type__ = "crypter"
- __version__ = "0.4"
-
- __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*'
- __config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
-
- __description__ = """Multiload.cz decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>'
- LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">'
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
-
- if re.match(self.__pattern__, pyfile.url).group(1) == "slozka":
- m = re.search(self.FOLDER_PATTERN, self.html)
- if m:
- self.urls.extend(m.group(1).split())
- else:
- m = re.findall(self.LINK_PATTERN, self.html)
- if m:
- prefered_set = set(self.getConfig("usedHoster").split('|'))
- self.urls.extend([x[1] for x in m if x[0] in prefered_set])
-
- if not self.urls:
- ignored_set = set(self.getConfig("ignoredHoster").split('|'))
- self.urls.extend([x[1] for x in m if x[0] not in ignored_set])
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/MultiuploadCom.py b/module/plugins/crypter/MultiuploadCom.py
deleted file mode 100644
index 96cd734e4..000000000
--- a/module/plugins/crypter/MultiuploadCom.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from time import time
-
-from module.plugins.Crypter import Crypter
-from module.common.json_layer import json_loads
-
-
-class MultiuploadCom(Crypter):
- __name__ = "MultiuploadCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)'
- __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "multiupload"),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
-
- __description__ = """MultiUpload.com decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- ML_LINK_PATTERN = r'<div id="downloadbutton_" style=""><a href="([^"]+)"'
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url)
- m = re.search(self.ML_LINK_PATTERN, self.html)
- ml_url = m.group(1) if m else None
-
- json_list = json_loads(self.load("http://multiupload.com/progress/", get={
- "d": re.match(self.__pattern__, pyfile.url).group(1),
- "r": str(int(time() * 1000))
- }))
-
- prefered_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("preferedHoster").split('|')))
-
- if ml_url and 'multiupload' in prefered_set:
- self.urls.append(ml_url)
-
- for link in json_list:
- if link['service'].lower() in prefered_set and int(link['status']) and not int(link['deleted']):
- url = self.getLocation(link['url'])
- if url:
- self.urls.append(url)
-
- if not self.urls:
- ignored_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("ignoredHoster").split('|')))
-
- if 'multiupload' not in ignored_set:
- self.urls.append(ml_url)
-
- for link in json_list:
- if link['service'].lower() not in ignored_set and int(link['status']) and not int(link['deleted']):
- url = self.getLocation(link['url'])
- if url:
- self.urls.append(url)
-
- if not self.urls:
- self.fail('Could not extract any links')
-
- def getLocation(self, url):
- header = self.load(url, just_header=True)
- return header['location'] if "location" in header else None
diff --git a/module/plugins/crypter/NCryptIn.py b/module/plugins/crypter/NCryptIn.py
deleted file mode 100644
index 1b7b8b3d4..000000000
--- a/module/plugins/crypter/NCryptIn.py
+++ /dev/null
@@ -1,303 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import base64
-import binascii
-import re
-
-from Crypto.Cipher import AES
-
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import ReCaptcha
-
-
-class NCryptIn(Crypter):
- __name__ = "NCryptIn"
- __type__ = "crypter"
- __version__ = "1.32"
-
- __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)'
-
- __description__ = """NCrypt.in decrypter plugin"""
- __author_name__ = ("fragonib", "stickell")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "l.stickell@yahoo.it")
-
- JK_KEY = "jk"
- CRYPTED_KEY = "crypted"
-
- NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"'
-
-
- def setup(self):
- self.package = None
- self.html = None
- self.cleanedHtml = None
- self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"]
- self.protection_type = None
-
- def decrypt(self, pyfile):
- # Init
- self.package = pyfile.package()
- package_links = []
- package_name = self.package.name
- folder_name = self.package.folder
-
- # Deal with single links
- if self.isSingleLink():
- package_links.extend(self.handleSingleLink())
-
- # Deal with folders
- else:
-
- # Request folder home
- self.html = self.requestFolderHome()
- self.cleanedHtml = self.removeHtmlCrap(self.html)
- if not self.isOnline():
- self.offline()
-
- # Check for folder protection
- if self.isProtected():
- self.html = self.unlockProtection()
- self.cleanedHtml = self.removeHtmlCrap(self.html)
- self.handleErrors()
-
- # Prepare package name and folder
- (package_name, folder_name) = self.getPackageInfo()
-
- # Extract package links
- for link_source_type in self.links_source_order:
- package_links.extend(self.handleLinkSource(link_source_type))
- if package_links: # use only first source which provides links
- break
- package_links = set(package_links)
-
- # Pack and return links
- if not package_links:
- self.fail('Could not extract any links')
- self.packages = [(package_name, package_links, folder_name)]
-
- def isSingleLink(self):
- link_type = re.match(self.__pattern__, self.pyfile.url).group('type')
- return link_type in ("link", "frame")
-
- def requestFolderHome(self):
- return self.load(self.pyfile.url, decode=True)
-
- def removeHtmlCrap(self, content):
- patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")',
- r'display:none;">(.*?)</(div|span)>',
- r'<div\s+class="jdownloader"(.*?)</div>',
- r'<table class="global">(.*?)</table>',
- r'<iframe\s+style="display:none(.*?)</iframe>')
- for pattern in patterns:
- rexpr = re.compile(pattern, re.DOTALL)
- content = re.sub(rexpr, "", content)
- return content
-
- def isOnline(self):
- if "Your folder does not exist" in self.cleanedHtml:
- self.logDebug("File not m")
- return False
- return True
-
- def isProtected(self):
- form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL)
- if form is not None:
- content = form.group(1)
- for keyword in ("password", "captcha"):
- if keyword in content:
- self.protection_type = keyword
- self.logDebug("Links are %s protected" % self.protection_type)
- return True
- return False
-
- def getPackageInfo(self):
- m = re.search(self.NAME_PATTERN, self.html)
- if m:
- name = folder = m.group('N').strip()
- self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
- else:
- name = self.package.name
- folder = self.package.folder
- self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
- return name, folder
-
- def unlockProtection(self):
-
- postData = {}
-
- form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.DOTALL).group(1)
-
- # Submit package password
- if "password" in form:
- password = self.getPassword()
- self.logDebug("Submitting password [%s] for protected links" % password)
- postData['password'] = password
-
- # Resolve anicaptcha
- if "anicaptcha" in form:
- self.logDebug("Captcha protected")
- captchaUri = re.search(r'src="(/temp/anicaptcha/[^"]+)', form).group(1)
- captcha = self.decryptCaptcha("http://ncrypt.in" + captchaUri)
- self.logDebug("Captcha resolved [%s]" % captcha)
- postData['captcha'] = captcha
-
- # Resolve recaptcha
- if "recaptcha" in form:
- self.logDebug("ReCaptcha protected")
- captcha_key = re.search(r'\?k=(.*?)"', form).group(1)
- self.logDebug("Resolving ReCaptcha with key [%s]" % captcha_key)
- recaptcha = ReCaptcha(self)
- challenge, code = recaptcha.challenge(captcha_key)
- postData['recaptcha_challenge_field'] = challenge
- postData['recaptcha_response_field'] = code
-
- # Resolve circlecaptcha
- if "circlecaptcha" in form:
- self.logDebug("CircleCaptcha protected")
- captcha_img_url = "http://ncrypt.in/classes/captcha/circlecaptcha.php"
- coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % str(coords))
- postData['circle.x'] = coords[0]
- postData['circle.y'] = coords[1]
-
- # Unlock protection
- postData['submit_protected'] = 'Continue to folder'
- return self.load(self.pyfile.url, post=postData, decode=True)
-
- def handleErrors(self):
- if self.protection_type == "password":
- if "This password is invalid!" in self.cleanedHtml:
- self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
-
- if self.protection_type == "captcha":
- if "The securitycheck was wrong!" in self.cleanedHtml:
- self.logDebug("Invalid captcha, retrying")
- self.invalidCaptcha()
- self.retry()
- else:
- self.correctCaptcha()
-
- def handleLinkSource(self, link_source_type):
- # Check for JS engine
- require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc")
- if require_js_engine and not self.js:
- self.logDebug("No JS engine available, skip %s links" % link_source_type)
- return []
-
- # Select suitable handler
- if link_source_type == 'single':
- return self.handleSingleLink()
- if link_source_type == 'cnl2':
- return self.handleCNL2()
- elif link_source_type in ("rsdf", "ccf", "dlc"):
- return self.handleContainer(link_source_type)
- elif link_source_type == "web":
- return self.handleWebLinks()
- else:
- self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type)
-
- def handleSingleLink(self):
-
- self.logDebug("Handling Single link")
- package_links = []
-
- # Decrypt single link
- decrypted_link = self.decryptLink(self.pyfile.url)
- if decrypted_link:
- package_links.append(decrypted_link)
-
- return package_links
-
- def handleCNL2(self):
-
- self.logDebug("Handling CNL2 links")
- package_links = []
-
- if 'cnl2_output' in self.cleanedHtml:
- try:
- (vcrypted, vjk) = self._getCipherParams()
- for (crypted, jk) in zip(vcrypted, vjk):
- package_links.extend(self._getLinks(crypted, jk))
- except:
- self.fail("Unable to decrypt CNL2 links")
-
- return package_links
-
- def handleContainers(self):
-
- self.logDebug("Handling Container links")
- package_links = []
-
- pattern = r"/container/(rsdf|dlc|ccf)/([a-z0-9]+)"
- containersLinks = re.findall(pattern, self.html)
- self.logDebug("Decrypting %d Container links" % len(containersLinks))
- for containerLink in containersLinks:
- link = "http://ncrypt.in/container/%s/%s.%s" % (containerLink[0], containerLink[1], containerLink[0])
- package_links.append(link)
-
- return package_links
-
- def handleWebLinks(self):
-
- self.logDebug("Handling Web links")
- pattern = r"(http://ncrypt\.in/link-.*?=)"
- links = re.findall(pattern, self.html)
-
- package_links = []
- self.logDebug("Decrypting %d Web links" % len(links))
- for i, link in enumerate(links):
- self.logDebug("Decrypting Web link %d, %s" % (i + 1, link))
- decrypted_link = self.decrypt(link)
- if decrypted_link:
- package_links.append(decrypted_link)
-
- return package_links
-
- def decryptLink(self, link):
- try:
- url = link.replace("link-", "frame-")
- link = self.load(url, just_header=True)['location']
- return link
- except Exception, detail:
- self.logDebug("Error decrypting link %s, %s" % (link, detail))
-
- def _getCipherParams(self):
-
- pattern = r'<input.*?name="%s".*?value="(.*?)"'
-
- # Get jk
- jk_re = pattern % NCryptIn.JK_KEY
- vjk = re.findall(jk_re, self.html)
-
- # Get crypted
- crypted_re = pattern % NCryptIn.CRYPTED_KEY
- vcrypted = re.findall(crypted_re, self.html)
-
- # Log and return
- self.logDebug("Detected %d crypted blocks" % len(vcrypted))
- return vcrypted, vjk
-
- def _getLinks(self, crypted, jk):
- # Get key
- jreturn = self.js.eval("%s f()" % jk)
- self.logDebug("JsEngine returns value [%s]" % jreturn)
- key = binascii.unhexlify(jreturn)
-
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
- # Decrypt
- Key = key
- IV = key
- obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
-
- # Extract links
- text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
-
- # Log and return
- self.logDebug("Block has %d links" % len(links))
- return links
diff --git a/module/plugins/crypter/NetfolderIn.py b/module/plugins/crypter/NetfolderIn.py
deleted file mode 100644
index 1c337391c..000000000
--- a/module/plugins/crypter/NetfolderIn.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class NetfolderIn(SimpleCrypter):
- __name__ = "NetfolderIn"
- __type__ = "crypter"
- __version__ = "0.6"
-
- __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))'
-
- __description__ = """NetFolder.in decrypter plugin"""
- __author_name__ = ("RaNaN", "fragonib")
- __author_mail__ = ("RaNaN@pyload.org", "fragonib[AT]yahoo[DOT]es")
-
- TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span(.*)>(?P<title>.+)</span></div>'
-
-
- def decrypt(self, pyfile):
- # Request package
- self.html = self.load(pyfile.url)
-
- # Check for password protection
- if self.isPasswordProtected():
- self.html = self.submitPassword()
- if not self.html:
- self.fail("Incorrect password, please set right password on Add package form and retry")
-
- # Get package name and folder
- (package_name, folder_name) = self.getPackageNameAndFolder()
-
- # Get package links
- package_links = self.getLinks()
-
- # Set package
- self.packages = [(package_name, package_links, folder_name)]
-
- def isPasswordProtected(self):
- if '<input type="password" name="password"' in self.html:
- self.logDebug("Links are password protected")
- return True
- return False
-
- def submitPassword(self):
- # Gather data
- try:
- m = re.match(self.__pattern__, self.pyfile.url)
- id = max(m.group('id1'), m.group('id2'))
- except AttributeError:
- self.logDebug("Unable to get package id from url [%s]" % self.pyfile.url)
- return
- url = "http://netfolder.in/folder.php?folder_id=" + id
- password = self.getPassword()
-
- # Submit package password
- post = {'password': password, 'save': 'Absenden'}
- self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id))
- html = self.load(url, {}, post)
-
- # Check for invalid password
- if '<div class="InPage_Error">' in html:
- self.logDebug("Incorrect password, please set right password on Edit package form and retry")
- return None
-
- return html
-
- def getLinks(self):
- links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",")
- self.logDebug("Package has %d links" % len(links))
- return links
diff --git a/module/plugins/crypter/NosvideoCom.py b/module/plugins/crypter/NosvideoCom.py
deleted file mode 100644
index a3bb11b16..000000000
--- a/module/plugins/crypter/NosvideoCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class NosvideoCom(SimpleCrypter):
- __name__ = "NosvideoCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
-
- __description__ = """Nosvideo.com decrypter plugin"""
- __author_name__ = "igel"
- __author_mail__ = "igelkun@myopera.com"
-
- LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"'
- TITLE_PATTERN = r'<[tT]itle>Watch (?P<title>.+)</[tT]itle>'
diff --git a/module/plugins/crypter/OneKhDe.py b/module/plugins/crypter/OneKhDe.py
deleted file mode 100644
index ba93278d5..000000000
--- a/module/plugins/crypter/OneKhDe.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.unescape import unescape
-from module.plugins.Crypter import Crypter
-
-
-class OneKhDe(Crypter):
- __name__ = "OneKhDe"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?1kh.de/f/'
-
- __description__ = """1kh.de decrypter plugin"""
- __author_name__ = "spoob"
- __author_mail__ = "spoob@pyload.org"
-
-
- def __init__(self, parent):
- Crypter.__init__(self, parent)
- self.parent = parent
- self.html = None
-
- def file_exists(self):
- """ returns True or False
- """
- return True
-
- def proceed(self, url, location):
- url = self.parent.url
- self.html = self.req.load(url)
- link_ids = re.findall(r"<a id=\"DownloadLink_(\d*)\" href=\"http://1kh.de/", self.html)
- for id in link_ids:
- new_link = unescape(
- re.search("width=\"100%\" src=\"(.*)\"></iframe>", self.req.load("http://1kh.de/l/" + id)).group(1))
- self.urls.append(new_link)
diff --git a/module/plugins/crypter/OronComFolder.py b/module/plugins/crypter/OronComFolder.py
deleted file mode 100755
index f0b2f943c..000000000
--- a/module/plugins/crypter/OronComFolder.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class OronComFolder(DeadCrypter):
- __name__ = "OronComFolder"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+'
-
- __description__ = """Oron.com folder decrypter plugin"""
- __author_name__ = "DHMH"
- __author_mail__ = "webmaster@pcProfil.de"
diff --git a/module/plugins/crypter/PastebinCom.py b/module/plugins/crypter/PastebinCom.py
deleted file mode 100644
index 55aa2ee4a..000000000
--- a/module/plugins/crypter/PastebinCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class PastebinCom(SimpleCrypter):
- __name__ = "PastebinCom"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
-
- __description__ = """Pastebin.com decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>'
- TITLE_PATTERN = r'<div class="paste_box_line1" title="(?P<title>[^"]+)">'
diff --git a/module/plugins/crypter/QuickshareCzFolder.py b/module/plugins/crypter/QuickshareCzFolder.py
deleted file mode 100644
index 9840b84df..000000000
--- a/module/plugins/crypter/QuickshareCzFolder.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class QuickshareCzFolder(Crypter):
- __name__ = "QuickshareCzFolder"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*'
-
- __description__ = """Quickshare.cz folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>'
- LINK_PATTERN = r'(http://www.quickshare.cz/\S+)'
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if m is None:
- self.fail("Parse error (FOLDER)")
- self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/RSLayerCom.py b/module/plugins/crypter/RSLayerCom.py
deleted file mode 100644
index 7dda0beab..000000000
--- a/module/plugins/crypter/RSLayerCom.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class RSLayerCom(DeadCrypter):
- __name__ = "RSLayerCom"
- __type__ = "crypter"
- __version__ = "0.21"
-
- __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-'
-
- __description__ = """RS-Layer.com decrypter plugin"""
- __author_name__ = "hzpz"
- __author_mail__ = None
diff --git a/module/plugins/crypter/RelinkUs.py b/module/plugins/crypter/RelinkUs.py
deleted file mode 100644
index 1b120fc77..000000000
--- a/module/plugins/crypter/RelinkUs.py
+++ /dev/null
@@ -1,263 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import base64
-import binascii
-import re
-import os
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-
-
-class RelinkUs(Crypter):
- __name__ = "RelinkUs"
- __type__ = "crypter"
- __version__ = "3.0"
-
- __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)'
-
- __description__ = """Relink.us decrypter plugin"""
- __author_name__ = "fragonib"
- __author_mail__ = "fragonib[AT]yahoo[DOT]es"
-
- # Constants
- PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"]
-
- OFFLINE_TOKEN = r'<title>Tattooside'
- PASSWORD_TOKEN = r'container_password\.php'
- PASSWORD_ERROR_ROKEN = r'You have entered an incorrect password'
- PASSWORD_SUBMIT_URL = r'http://www\.relink\.us/container_password\.php'
- CAPTCHA_TOKEN = r'container_captcha\.php'
- CAPTCHA_ERROR_ROKEN = r'You have solved the captcha wrong'
- CAPTCHA_IMG_URL = r'http://www\.relink\.us/core/captcha/circlecaptcha\.php'
- CAPTCHA_SUBMIT_URL = r'http://www\.relink\.us/container_captcha\.php'
- FILE_TITLE_REGEX = r'<th>Title</th><td><i>(.*)</i></td></tr>'
- FILE_NOTITLE = r'No title'
-
- CNL2_FORM_REGEX = r'<form id="cnl_form-(.*?)</form>'
- CNL2_FORMINPUT_REGEX = r'<input.*?name="%s".*?value="(.*?)"'
- CNL2_JK_KEY = "jk"
- CNL2_CRYPTED_KEY = "crypted"
- DLC_LINK_REGEX = r'<a href=".*?" class="dlc_button" target="_blank">'
- DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php'
- WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)"
- WEB_FORWARD_URL = r'http://www\.relink\.us/frame\.php'
- WEB_LINK_REGEX = r'<iframe name="Container" height="100%" frameborder="no" width="100%" src="(?P<link>.+)"></iframe>'
-
-
- def setup(self):
- self.fileid = None
- self.package = None
- self.password = None
- self.html = None
- self.captcha = False
-
- def decrypt(self, pyfile):
- # Init
- self.initPackage(pyfile)
-
- # Request package
- self.requestPackage()
-
- # Check for online
- if not self.isOnline():
- self.offline()
-
- # Check for protection
- if self.isPasswordProtected():
- self.unlockPasswordProtection()
- self.handleErrors()
-
- if self.isCaptchaProtected():
- self.captcha = True
- self.unlockCaptchaProtection()
- self.handleErrors()
-
- # Get package name and folder
- (package_name, folder_name) = self.getPackageInfo()
-
- # Extract package links
- package_links = []
- for sources in self.PREFERRED_LINK_SOURCES:
- package_links.extend(self.handleLinkSource(sources))
- if package_links: # use only first source which provides links
- break
- package_links = set(package_links)
-
- # Pack
- if package_links:
- self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
-
- def initPackage(self, pyfile):
- self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
- self.package = pyfile.package()
- self.password = self.getPassword()
-
- def requestPackage(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- def isOnline(self):
- if self.OFFLINE_TOKEN in self.html:
- self.logDebug("File not found")
- return False
- return True
-
- def isPasswordProtected(self):
- if self.PASSWORD_TOKEN in self.html:
- self.logDebug("Links are password protected")
- return True
-
- def isCaptchaProtected(self):
- if self.CAPTCHA_TOKEN in self.html:
- self.logDebug("Links are captcha protected")
- return True
- return False
-
- def unlockPasswordProtection(self):
- self.logDebug("Submitting password [%s] for protected links" % self.password)
- passwd_url = self.PASSWORD_SUBMIT_URL + "?id=%s" % self.fileid
- passwd_data = {'id': self.fileid, 'password': self.password, 'pw': 'submit'}
- self.html = self.load(passwd_url, post=passwd_data, decode=True)
-
- def unlockCaptchaProtection(self):
- self.logDebug("Request user positional captcha resolving")
- captcha_img_url = self.CAPTCHA_IMG_URL + "?id=%s" % self.fileid
- coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % str(coords))
- captcha_post_url = self.CAPTCHA_SUBMIT_URL + "?id=%s" % self.fileid
- captcha_post_data = {'button.x': coords[0], 'button.y': coords[1], 'captcha': 'submit'}
- self.html = self.load(captcha_post_url, post=captcha_post_data, decode=True)
-
- def getPackageInfo(self):
- name = folder = None
-
- # Try to get info from web
- m = re.search(self.FILE_TITLE_REGEX, self.html)
- if m is not None:
- title = m.group(1).strip()
- if not self.FILE_NOTITLE in title:
- name = folder = title
- self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
-
- # Fallback to defaults
- if not name or not folder:
- name = self.package.name
- folder = self.package.folder
- self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
-
- # Return package info
- return name, folder
-
- def handleErrors(self):
- if self.PASSWORD_ERROR_ROKEN in self.html:
- msg = "Incorrect password, please set right password on 'Edit package' form and retry"
- self.logDebug(msg)
- self.fail(msg)
-
- if self.captcha:
- if self.CAPTCHA_ERROR_ROKEN in self.html:
- self.logDebug("Invalid captcha, retrying")
- self.invalidCaptcha()
- self.retry()
- else:
- self.correctCaptcha()
-
- def handleLinkSource(self, source):
- if source == 'cnl2':
- return self.handleCNL2Links()
- elif source == 'dlc':
- return self.handleDLCLinks()
- elif source == 'web':
- return self.handleWEBLinks()
- else:
- self.fail('Unknown source [%s] (this is probably a bug)' % source)
-
- def handleCNL2Links(self):
- self.logDebug("Search for CNL2 links")
- package_links = []
- m = re.search(self.CNL2_FORM_REGEX, self.html, re.DOTALL)
- if m is not None:
- cnl2_form = m.group(1)
- try:
- (vcrypted, vjk) = self._getCipherParams(cnl2_form)
- for (crypted, jk) in zip(vcrypted, vjk):
- package_links.extend(self._getLinks(crypted, jk))
- except:
- self.logDebug("Unable to decrypt CNL2 links")
- return package_links
-
- def handleDLCLinks(self):
- self.logDebug('Search for DLC links')
- package_links = []
- m = re.search(self.DLC_LINK_REGEX, self.html)
- if m is not None:
- container_url = self.DLC_DOWNLOAD_URL + "?id=%s&dlc=1" % self.fileid
- self.logDebug("Downloading DLC container link [%s]" % container_url)
- try:
- dlc = self.load(container_url)
- dlc_filename = self.fileid + ".dlc"
- dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename)
- f = open(dlc_filepath, "wb")
- f.write(dlc)
- f.close()
- package_links.append(dlc_filepath)
- except:
- self.logDebug("Unable to download DLC container")
- return package_links
-
- def handleWEBLinks(self):
- self.logDebug("Search for WEB links")
- package_links = []
- fw_params = re.findall(self.WEB_FORWARD_REGEX, self.html)
- self.logDebug("Decrypting %d Web links" % len(fw_params))
- for index, fw_param in enumerate(fw_params):
- try:
- fw_url = self.WEB_FORWARD_URL + "?%s" % fw_param
- self.logDebug("Decrypting Web link %d, %s" % (index + 1, fw_url))
- fw_response = self.load(fw_url, decode=True)
- dl_link = re.search(self.WEB_LINK_REGEX, fw_response).group('link')
- package_links.append(dl_link)
- except Exception, detail:
- self.logDebug("Error decrypting Web link %s, %s" % (index, detail))
- self.setWait(4)
- self.wait()
- return package_links
-
- def _getCipherParams(self, cnl2_form):
- # Get jk
- jk_re = self.CNL2_FORMINPUT_REGEX % self.CNL2_JK_KEY
- vjk = re.findall(jk_re, cnl2_form, re.IGNORECASE)
-
- # Get crypted
- crypted_re = self.CNL2_FORMINPUT_REGEX % RelinkUs.CNL2_CRYPTED_KEY
- vcrypted = re.findall(crypted_re, cnl2_form, re.IGNORECASE)
-
- # Log and return
- self.logDebug("Detected %d crypted blocks" % len(vcrypted))
- return vcrypted, vjk
-
- def _getLinks(self, crypted, jk):
- # Get key
- jreturn = self.js.eval("%s f()" % jk)
- self.logDebug("JsEngine returns value [%s]" % jreturn)
- key = binascii.unhexlify(jreturn)
-
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
- # Decrypt
- Key = key
- IV = key
- obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
-
- # Extract links
- text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
-
- # Log and return
- self.logDebug("Package has %d links" % len(links))
- return links
diff --git a/module/plugins/crypter/SafelinkingNet.py b/module/plugins/crypter/SafelinkingNet.py
deleted file mode 100644
index e0c165705..000000000
--- a/module/plugins/crypter/SafelinkingNet.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION
-
-from module.lib.BeautifulSoup import BeautifulSoup
-
-from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import SolveMedia
-
-
-class SafelinkingNet(Crypter):
- __name__ = "SafelinkingNet"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+'
-
- __description__ = """Safelinking.net decrypter plugin"""
- __author_name__ = "quareevo"
- __author_mail__ = "quareevo@arcor.de"
-
- SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';"
-
-
- def decrypt(self, pyfile):
- url = pyfile.url
- if re.match(self.__pattern__, url).group(1) == "d":
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.load(url)
- m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE)
- if m:
- self.urls = [m.group(1)]
- else:
- self.fail("Couldn't find forwarded Link")
-
- else:
- password = ""
- postData = {"post-protect": "1"}
-
- self.html = self.load(url)
-
- if "link-password" in self.html:
- password = pyfile.package().password
- postData['link-password'] = password
-
- if "altcaptcha" in self.html:
- for _ in xrange(5):
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m:
- captchaKey = m.group(1)
- captcha = SolveMedia(self)
- captchaProvider = "Solvemedia"
- else:
- self.fail("Error parsing captcha")
-
- challenge, response = captcha.challenge(captchaKey)
- postData['adcopy_challenge'] = challenge
- postData['adcopy_response'] = response
-
- self.html = self.load(url, post=postData)
- if "The password you entered was incorrect" in self.html:
- self.fail("Incorrect Password")
- if not "The CAPTCHA code you entered was wrong" in self.html:
- break
-
- pyfile.package().password = ""
- soup = BeautifulSoup(self.html)
- scripts = soup.findAll("script")
- for s in scripts:
- if "d_links" in s.text:
- break
- m = re.search('d_links":(\[.*?\])', s.text)
- if m:
- linkDict = json_loads(m.group(1))
- for link in linkDict:
- if not "http://" in link['full']:
- self.urls.append("https://safelinking.net/d/" + link['full'])
- else:
- self.urls.append(link['full'])
diff --git a/module/plugins/crypter/SecuredIn.py b/module/plugins/crypter/SecuredIn.py
deleted file mode 100644
index 0b558c688..000000000
--- a/module/plugins/crypter/SecuredIn.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class SecuredIn(DeadCrypter):
- __name__ = "SecuredIn"
- __type__ = "crypter"
- __version__ = "0.21"
-
- __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html'
-
- __description__ = """Secured.in decrypter plugin"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/crypter/SerienjunkiesOrg.py b/module/plugins/crypter/SerienjunkiesOrg.py
deleted file mode 100644
index fe4ee4e36..000000000
--- a/module/plugins/crypter/SerienjunkiesOrg.py
+++ /dev/null
@@ -1,324 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import random
-import re
-
-from time import sleep
-
-from module.lib.BeautifulSoup import BeautifulSoup
-
-from module.plugins.Crypter import Crypter
-from module.unescape import unescape
-
-
-class SerienjunkiesOrg(Crypter):
- __name__ = "SerienjunkiesOrg"
- __type__ = "crypter"
- __version__ = "0.39"
-
- __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?'
- __config__ = [("changeNameSJ", "Packagename;Show;Season;Format;Episode", "Take SJ.org name", "Show"),
- ("changeNameDJ", "Packagename;Show;Format;Episode", "Take DJ.org name", "Show"),
- ("randomPreferred", "bool", "Randomize Preferred-List", False),
- ("hosterListMode", "OnlyOne;OnlyPreferred(One);OnlyPreferred(All);All",
- "Use for hosters (if supported)", "All"),
- ("hosterList", "str", "Preferred Hoster list (comma separated)",
- "RapidshareCom,UploadedTo,NetloadIn,FilefactoryCom,FreakshareNet,FilebaseTo,HotfileCom,DepositfilesCom,EasyshareCom,KickloadCom"),
- ("ignoreList", "str", "Ignored Hoster list (comma separated)", "MegauploadCom")]
-
- __description__ = """Serienjunkies.org decrypter plugin"""
- __author_name__ = ("mkaay", "godofdream")
- __author_mail__ = ("mkaay@mkaay.de", "soilfiction@gmail.com")
-
-
- def setup(self):
- self.multiDL = False
-
- def getSJSrc(self, url):
- src = self.req.load(str(url))
- if "This website is not available in your country" in src:
- self.fail("Not available in your country")
- if not src.find("Enter Serienjunkies") == -1:
- sleep(1)
- src = self.req.load(str(url))
- return src
-
- def handleShow(self, url):
- src = self.getSJSrc(url)
- soup = BeautifulSoup(src)
- packageName = self.pyfile.package().name
- if self.getConfig("changeNameSJ") == "Show":
- found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
- if found:
- packageName = found
-
- nav = soup.find("div", attrs={"id": "scb"})
-
- package_links = []
- for a in nav.findAll("a"):
- if self.getConfig("changeNameSJ") == "Show":
- package_links.append(a['href'])
- else:
- package_links.append(a['href'] + "#hasName")
- if self.getConfig("changeNameSJ") == "Show":
- self.packages.append((packageName, package_links, packageName))
- else:
- self.core.files.addLinks(package_links, self.pyfile.package().id)
-
- def handleSeason(self, url):
- src = self.getSJSrc(url)
- soup = BeautifulSoup(src)
- post = soup.find("div", attrs={"class": "post-content"})
- ps = post.findAll("p")
-
- seasonName = unescape(soup.find("a", attrs={"rel": "bookmark"}).string).replace("&#8211;", "-")
- groups = {}
- gid = -1
- for p in ps:
- if re.search("<strong>Sprache|<strong>Format", str(p)):
- var = p.findAll("strong")
- opts = {"Sprache": "", "Format": ""}
- for v in var:
- n = unescape(v.string).strip()
- n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n)
- if n.strip() not in opts:
- continue
- val = v.nextSibling
- if not val:
- continue
- val = val.replace("|", "").strip()
- val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val)
- opts[n.strip()] = val.strip()
- gid += 1
- groups[gid] = {}
- groups[gid]['ep'] = {}
- groups[gid]['opts'] = opts
- elif re.search("<strong>Download:", str(p)):
- parts = str(p).split("<br />")
- if re.search("<strong>", parts[0]):
- ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
- "&#8211;", "-")
- groups[gid]['ep'][ename] = {}
- parts.remove(parts[0])
- for part in parts:
- hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
- if hostername:
- hostername = hostername.group(1)
- groups[gid]['ep'][ename][hostername] = []
- links = re.findall('href="(.*?)"', part)
- for link in links:
- groups[gid]['ep'][ename][hostername].append(link + "#hasName")
-
- links = []
- for g in groups.values():
- for ename in g['ep']:
- links.extend(self.getpreferred(g['ep'][ename]))
- if self.getConfig("changeNameSJ") == "Episode":
- self.packages.append((ename, links, ename))
- links = []
- package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
- if self.getConfig("changeNameSJ") == "Format":
- self.packages.append((package, links, package))
- links = []
- if (self.getConfig("changeNameSJ") == "Packagename") or re.search("#hasName", url):
- self.core.files.addLinks(links, self.pyfile.package().id)
- elif (self.getConfig("changeNameSJ") == "Season") or not re.search("#hasName", url):
- self.packages.append((seasonName, links, seasonName))
-
- def handleEpisode(self, url):
- src = self.getSJSrc(url)
- if not src.find(
- "Du hast das Download-Limit &uuml;berschritten! Bitte versuche es sp&auml;ter nocheinmal.") == -1:
- self.fail(_("Downloadlimit reached"))
- else:
- soup = BeautifulSoup(src)
- form = soup.find("form")
- h1 = soup.find("h1")
-
- if h1.get("class") == "wrap":
- captchaTag = soup.find(attrs={"src": re.compile("^/secure/")})
- if not captchaTag:
- sleep(5)
- self.retry()
-
- captchaUrl = "http://download.serienjunkies.org" + captchaTag['src']
- result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
- sinp = form.find(attrs={"name": "s"})
-
- self.req.lastURL = str(url)
- sj = self.load(str(url), post={'s': sinp['value'], 'c': result, 'action': "Download"})
-
- soup = BeautifulSoup(sj)
- rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")})
-
- if not len(rawLinks) > 0:
- sleep(1)
- self.retry()
- return
-
- self.correctCaptcha()
-
- links = []
- for link in rawLinks:
- frameUrl = link['action'].replace("/go-", "/frame/go-")
- links.append(self.handleFrame(frameUrl))
- if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and
- (self.getConfig("changeNameDJ") == "Packagename")):
- self.core.files.addLinks(links, self.pyfile.package().id)
- else:
- if h1.text[2] == "_":
- eName = h1.text[3:]
- else:
- eName = h1.text
- self.packages.append((eName, links, eName))
-
- def handleOldStyleLink(self, url):
- sj = self.req.load(str(url))
- soup = BeautifulSoup(sj)
- form = soup.find("form", attrs={"action": re.compile("^http://serienjunkies.org")})
- captchaTag = form.find(attrs={"src": re.compile("^/safe/secure/")})
- captchaUrl = "http://serienjunkies.org" + captchaTag['src']
- result = self.decryptCaptcha(str(captchaUrl))
- url = form['action']
- sinp = form.find(attrs={"name": "s"})
-
- self.req.load(str(url), post={'s': sinp['value'], 'c': result, 'dl.start': "Download"}, cookies=False,
- just_header=True)
- decrypted = self.req.lastEffectiveURL
- if decrypted == str(url):
- self.retry()
- self.core.files.addLinks([decrypted], self.pyfile.package().id)
-
- def handleFrame(self, url):
- self.req.load(str(url))
- return self.req.lastEffectiveURL
-
- def handleShowDJ(self, url):
- src = self.getSJSrc(url)
- soup = BeautifulSoup(src)
- post = soup.find("div", attrs={"id": "page_post"})
- ps = post.findAll("p")
- found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
- if found:
- seasonName = found
-
- groups = {}
- gid = -1
- for p in ps:
- if re.search("<strong>Sprache|<strong>Format", str(p)):
- var = p.findAll("strong")
- opts = {"Sprache": "", "Format": ""}
- for v in var:
- n = unescape(v.string).strip()
- n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n)
- if n.strip() not in opts:
- continue
- val = v.nextSibling
- if not val:
- continue
- val = val.replace("|", "").strip()
- val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val)
- opts[n.strip()] = val.strip()
- gid += 1
- groups[gid] = {}
- groups[gid]['ep'] = {}
- groups[gid]['opts'] = opts
- elif re.search("<strong>Download:", str(p)):
- parts = str(p).split("<br />")
- if re.search("<strong>", parts[0]):
- ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
- "&#8211;", "-")
- groups[gid]['ep'][ename] = {}
- parts.remove(parts[0])
- for part in parts:
- hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
- if hostername:
- hostername = hostername.group(1)
- groups[gid]['ep'][ename][hostername] = []
- links = re.findall('href="(.*?)"', part)
- for link in links:
- groups[gid]['ep'][ename][hostername].append(link + "#hasName")
-
- links = []
- for g in groups.values():
- for ename in g['ep']:
- links.extend(self.getpreferred(g['ep'][ename]))
- if self.getConfig("changeNameDJ") == "Episode":
- self.packages.append((ename, links, ename))
- links = []
- package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
- if self.getConfig("changeNameDJ") == "Format":
- self.packages.append((package, links, package))
- links = []
- if (self.getConfig("changeNameDJ") == "Packagename") or re.search("#hasName", url):
- self.core.files.addLinks(links, self.pyfile.package().id)
- elif (self.getConfig("changeNameDJ") == "Show") or not re.search("#hasName", url):
- self.packages.append((seasonName, links, seasonName))
-
- def handleCategoryDJ(self, url):
- package_links = []
- src = self.getSJSrc(url)
- soup = BeautifulSoup(src)
- content = soup.find("div", attrs={"id": "content"})
- for a in content.findAll("a", attrs={"rel": "bookmark"}):
- package_links.append(a['href'])
- self.core.files.addLinks(package_links, self.pyfile.package().id)
-
- def decrypt(self, pyfile):
- showPattern = re.compile("^http://serienjunkies.org/serie/(.*)/$")
- seasonPattern = re.compile("^http://serienjunkies.org/.*?/(.*)/$")
- episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html(#hasName)?$")
- oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$")
- categoryPatternDJ = re.compile("^http://dokujunkies.org/.*?(.*)$")
- showPatternDJ = re.compile(r"^http://dokujunkies.org/.*?/(.*)\.html(#hasName)?$")
- framePattern = re.compile("^http://download.(serienjunkies.org|dokujunkies.org)/frame/go-.*?/$")
- url = pyfile.url
- if framePattern.match(url):
- self.packages.append((pyfile.package().name, [self.handleFrame(url)], pyfile.package().name))
- elif episodePattern.match(url):
- self.handleEpisode(url)
- elif oldStyleLink.match(url):
- self.handleOldStyleLink(url)
- elif showPattern.match(url):
- self.handleShow(url)
- elif showPatternDJ.match(url):
- self.handleShowDJ(url)
- elif seasonPattern.match(url):
- self.handleSeason(url)
- elif categoryPatternDJ.match(url):
- self.handleCategoryDJ(url)
-
- #selects the preferred hoster, after that selects any hoster (ignoring the one to ignore)
- def getpreferred(self, hosterlist):
-
- result = []
- preferredList = self.getConfig("hosterList").strip().lower().replace(
- '|', ',').replace('.', '').replace(';', ',').split(',')
- if (self.getConfig("randomPreferred") is True) and (
- self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]):
- random.shuffle(preferredList)
- # we don't want hosters be read two times
- hosterlist2 = hosterlist.copy()
-
- for preferred in preferredList:
- for Hoster in hosterlist:
- if preferred == Hoster.lower().replace('.', ''):
- for Part in hosterlist[Hoster]:
- self.logDebug("selected " + Part)
- result.append(str(Part))
- del (hosterlist2[Hoster])
- if self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]:
- return result
-
- ignorelist = self.getConfig("ignoreList").strip().lower().replace(
- '|', ',').replace('.', '').replace(';', ',').split(',')
- if self.getConfig('hosterListMode') in ["OnlyOne", "All"]:
- for Hoster in hosterlist2:
- if Hoster.strip().lower().replace('.', '') not in ignorelist:
- for Part in hosterlist2[Hoster]:
- self.logDebug("selected2 " + Part)
- result.append(str(Part))
-
- if self.getConfig('hosterListMode') == "OnlyOne":
- return result
- return result
diff --git a/module/plugins/crypter/ShareLinksBiz.py b/module/plugins/crypter/ShareLinksBiz.py
deleted file mode 100644
index 87bb16a50..000000000
--- a/module/plugins/crypter/ShareLinksBiz.py
+++ /dev/null
@@ -1,269 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import base64
-import binascii
-import re
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-
-
-class ShareLinksBiz(Crypter):
- __name__ = "ShareLinksBiz"
- __type__ = "crypter"
- __version__ = "1.13"
-
- __pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
-
- __description__ = """Share-Links.biz decrypter plugin"""
- __author_name__ = "fragonib"
- __author_mail__ = "fragonib[AT]yahoo[DOT]es"
-
-
- def setup(self):
- self.baseUrl = None
- self.fileId = None
- self.package = None
- self.html = None
- self.captcha = False
-
- def decrypt(self, pyfile):
- # Init
- self.initFile(pyfile)
-
- # Request package
- url = self.baseUrl + '/' + self.fileId
- self.html = self.load(url, decode=True)
-
- # Unblock server (load all images)
- self.unblockServer()
-
- # Check for protection
- if self.isPasswordProtected():
- self.unlockPasswordProtection()
- self.handleErrors()
-
- if self.isCaptchaProtected():
- self.captcha = True
- self.unlockCaptchaProtection()
- self.handleErrors()
-
- # Extract package links
- package_links = []
- package_links.extend(self.handleWebLinks())
- package_links.extend(self.handleContainers())
- package_links.extend(self.handleCNL2())
- package_links = set(package_links)
-
- # Get package info
- package_name, package_folder = self.getPackageInfo()
-
- # Pack
- self.packages = [(package_name, package_links, package_folder)]
-
- def initFile(self, pyfile):
- url = pyfile.url
- if 's2l.biz' in url:
- url = self.load(url, just_header=True)['location']
- self.baseUrl = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1)
- self.fileId = re.match(self.__pattern__, url).group('ID')
- self.package = pyfile.package()
-
- def isOnline(self):
- if "No usable content was found" in self.html:
- self.logDebug("File not found")
- return False
- return True
-
- def isPasswordProtected(self):
- if re.search(r'''<form.*?id="passwordForm".*?>''', self.html):
- self.logDebug("Links are protected")
- return True
- return False
-
- def isCaptchaProtected(self):
- if '<map id="captchamap"' in self.html:
- self.logDebug("Links are captcha protected")
- return True
- return False
-
- def unblockServer(self):
- imgs = re.findall(r"(/template/images/.*?\.gif)", self.html)
- for img in imgs:
- self.load(self.baseUrl + img)
-
- def unlockPasswordProtection(self):
- password = self.getPassword()
- self.logDebug("Submitting password [%s] for protected links" % password)
- post = {"password": password, 'login': 'Submit form'}
- url = self.baseUrl + '/' + self.fileId
- self.html = self.load(url, post=post, decode=True)
-
- def unlockCaptchaProtection(self):
- # Get captcha map
- captchaMap = self._getCaptchaMap()
- self.logDebug("Captcha map with [%d] positions" % len(captchaMap.keys()))
-
- # Request user for captcha coords
- m = re.search(r'<img src="/captcha.gif\?d=(.*?)&amp;PHPSESSID=(.*?)&amp;legend=1"', self.html)
- captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2))
- self.logDebug("Waiting user for correct position")
- coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % str(coords))
-
- # Resolve captcha
- href = self._resolveCoords(coords, captchaMap)
- if href is None:
- self.logDebug("Invalid captcha resolving, retrying")
- self.invalidCaptcha()
- self.setWait(5, False)
- self.wait()
- self.retry()
- url = self.baseUrl + href
- self.html = self.load(url, decode=True)
-
- def _getCaptchaMap(self):
- mapp = {}
- for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
- rect = eval('(' + m.group(1) + ')')
- href = m.group(2)
- mapp[rect] = href
- return mapp
-
- def _resolveCoords(self, coords, captchaMap):
- x, y = coords
- for rect, href in captchaMap.items():
- x1, y1, x2, y2 = rect
- if (x >= x1 and x <= x2) and (y >= y1 and y <= y2):
- return href
-
- def handleErrors(self):
- if "The inserted password was wrong" in self.html:
- self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
-
- if self.captcha:
- if "Your choice was wrong" in self.html:
- self.logDebug("Invalid captcha, retrying")
- self.invalidCaptcha()
- self.setWait(5)
- self.wait()
- self.retry()
- else:
- self.correctCaptcha()
-
- def getPackageInfo(self):
- name = folder = None
-
- # Extract from web package header
- title_re = r'<h2><img.*?/>(.*)</h2>'
- m = re.search(title_re, self.html, re.DOTALL)
- if m is not None:
- title = m.group(1).strip()
- if 'unnamed' not in title:
- name = folder = title
- self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
-
- # Fallback to defaults
- if not name or not folder:
- name = self.package.name
- folder = self.package.folder
- self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
-
- # Return package info
- return name, folder
-
- def handleWebLinks(self):
- package_links = []
- self.logDebug("Handling Web links")
-
- #@TODO: Gather paginated web links
- pattern = r"javascript:_get\('(.*?)', \d+, ''\)"
- ids = re.findall(pattern, self.html)
- self.logDebug("Decrypting %d Web links" % len(ids))
- for i, ID in enumerate(ids):
- try:
- self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID))
- dwLink = self.baseUrl + "/get/lnk/" + ID
- response = self.load(dwLink)
- code = re.search(r'frm/(\d+)', response).group(1)
- fwLink = self.baseUrl + "/get/frm/" + code
- response = self.load(fwLink)
- jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response,
- re.DOTALL).group(1)
- jscode = self.js.eval("f = %s" % jscode)
- jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href"
- dlLink = self.js.eval(jslauncher % jscode)
- self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
- package_links.append(dlLink)
- except Exception, detail:
- self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail))
- return package_links
-
- def handleContainers(self):
- package_links = []
- self.logDebug("Handling Container links")
-
- pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)"
- containersLinks = re.findall(pattern, self.html)
- self.logDebug("Decrypting %d Container links" % len(containersLinks))
- for containerLink in containersLinks:
- link = "%s/get/%s/%s" % (self.baseUrl, containerLink[1], containerLink[0])
- package_links.append(link)
- return package_links
-
- def handleCNL2(self):
- package_links = []
- self.logDebug("Handling CNL2 links")
-
- if '/lib/cnl2/ClicknLoad.swf' in self.html:
- try:
- (crypted, jk) = self._getCipherParams()
- package_links.extend(self._getLinks(crypted, jk))
- except:
- self.fail("Unable to decrypt CNL2 links")
- return package_links
-
- def _getCipherParams(self):
- # Request CNL2
- code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
- url = "%s/get/cnl2/%s" % (self.baseUrl, code)
- response = self.load(url)
- params = response.split(";;")
-
- # Get jk
- strlist = list(base64.standard_b64decode(params[1]))
- strlist.reverse()
- jk = ''.join(strlist)
-
- # Get crypted
- strlist = list(base64.standard_b64decode(params[2]))
- strlist.reverse()
- crypted = ''.join(strlist)
-
- # Log and return
- return crypted, jk
-
- def _getLinks(self, crypted, jk):
- # Get key
- jreturn = self.js.eval("%s f()" % jk)
- self.logDebug("JsEngine returns value [%s]" % jreturn)
- key = binascii.unhexlify(jreturn)
-
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
- # Decrypt
- Key = key
- IV = key
- obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
-
- # Extract links
- text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
-
- # Log and return
- self.logDebug("Block has %d links" % len(links))
- return links
diff --git a/module/plugins/crypter/ShareRapidComFolder.py b/module/plugins/crypter/ShareRapidComFolder.py
deleted file mode 100644
index fd12ff96f..000000000
--- a/module/plugins/crypter/ShareRapidComFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class ShareRapidComFolder(SimpleCrypter):
- __name__ = "ShareRapidComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(slozka/.+)'
-
- __description__ = """Share-Rapid.com folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">'
diff --git a/module/plugins/crypter/SpeedLoadOrgFolder.py b/module/plugins/crypter/SpeedLoadOrgFolder.py
deleted file mode 100644
index 092d3efe4..000000000
--- a/module/plugins/crypter/SpeedLoadOrgFolder.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class SpeedLoadOrgFolder(DeadCrypter):
- __name__ = "SpeedLoadOrgFolder"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
-
- __description__ = """Speedload decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
diff --git a/module/plugins/crypter/StealthTo.py b/module/plugins/crypter/StealthTo.py
deleted file mode 100644
index 402724e89..000000000
--- a/module/plugins/crypter/StealthTo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class StealthTo(DeadCrypter):
- __name__ = "StealthTo"
- __type__ = "crypter"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+'
-
- __description__ = """Stealth.to decrypter plugin"""
- __author_name__ = "spoob"
- __author_mail__ = "spoob@pyload.org"
diff --git a/module/plugins/crypter/TnyCz.py b/module/plugins/crypter/TnyCz.py
deleted file mode 100644
index 3ae2c5ed2..000000000
--- a/module/plugins/crypter/TnyCz.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-import re
-
-
-class TnyCz(SimpleCrypter):
- __name__ = "TnyCz"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
-
- __description__ = """Tny.cz decrypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- TITLE_PATTERN = r'<title>(?P<title>.+) - .+</title>'
-
-
- def getLinks(self):
- m = re.search(r'<a id=\'save_paste\' href="(.+save\.php\?hash=.+)">', self.html)
- return re.findall(".+", self.load(m.group(1), decode=True)) if m else None
diff --git a/module/plugins/crypter/TrailerzoneInfo.py b/module/plugins/crypter/TrailerzoneInfo.py
deleted file mode 100644
index 42e45a819..000000000
--- a/module/plugins/crypter/TrailerzoneInfo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class TrailerzoneInfo(DeadCrypter):
- __name__ = "TrailerzoneInfo"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?'
-
- __description__ = """TrailerZone.info decrypter plugin"""
- __author_name__ = "godofdream"
- __author_mail__ = "soilfiction@gmail.com"
diff --git a/module/plugins/crypter/TurbobitNetFolder.py b/module/plugins/crypter/TurbobitNetFolder.py
deleted file mode 100644
index 0810e0ed1..000000000
--- a/module/plugins/crypter/TurbobitNetFolder.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-from module.common.json_layer import json_loads
-
-
-class TurbobitNetFolder(SimpleCrypter):
- __name__ = "TurbobitNetFolder"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
-
- __description__ = """Turbobit.net folder decrypter plugin"""
- __author_name__ = ("stickell", "Walter Purcaro")
- __author_mail__ = ("l.stickell@yahoo.it", "vuolter@gmail.com")
-
- TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(?P<title>.+?)</span>"
-
-
- def _getLinks(self, id, page=1):
- gridFile = self.load("http://turbobit.net/downloadfolder/gridFile",
- get={"rootId": id, "rows": 200, "page": page}, decode=True)
- grid = json_loads(gridFile)
-
- if grid['rows']:
- for i in grid['rows']:
- yield i['id']
- for id in self._getLinks(id, page + 1):
- yield id
- else:
- return
-
- def getLinks(self):
- id = re.match(self.__pattern__, self.pyfile.url).group("ID")
- fixurl = lambda id: "http://turbobit.net/%s.html" % id
- return map(fixurl, self._getLinks(id))
diff --git a/module/plugins/crypter/TusfilesNetFolder.py b/module/plugins/crypter/TusfilesNetFolder.py
deleted file mode 100644
index f51c2b715..000000000
--- a/module/plugins/crypter/TusfilesNetFolder.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import math
-import re
-from urlparse import urljoin
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class TusfilesNetFolder(SimpleCrypter):
- __name__ = "TusfilesNetFolder"
- __type__ = "crypter"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?'
-
- __description__ = """Tusfiles.net folder decrypter plugin"""
- __author_name__ = ("Walter Purcaro", "stickell")
- __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it")
-
- LINK_PATTERN = r'<TD align=left><a href="(.*?)">'
- TITLE_PATTERN = r'<Title>.*?\: (?P<title>.+) folder</Title>'
- PAGES_PATTERN = r'>\((?P<pages>\d+) \w+\)<'
-
- URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')]
-
-
- def loadPage(self, page_n):
- return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True)
-
- def handleMultiPages(self):
- pages = re.search(self.PAGES_PATTERN, self.html)
- if pages:
- pages = int(math.ceil(int(pages.group('pages')) / 25.0))
- else:
- return
-
- for p in xrange(2, pages + 1):
- self.html = self.loadPage(p)
- self.package_links += self.getLinks()
diff --git a/module/plugins/crypter/UlozToFolder.py b/module/plugins/crypter/UlozToFolder.py
deleted file mode 100644
index 06d30099c..000000000
--- a/module/plugins/crypter/UlozToFolder.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Crypter import Crypter
-
-
-class UlozToFolder(Crypter):
- __name__ = "UlozToFolder"
- __type__ = "crypter"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*'
-
- __description__ = """Uloz.to folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>'
- LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>'
- NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)">&nbsp;</a>'
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url)
-
- new_links = []
- for i in xrange(1, 100):
- self.logInfo("Fetching links from page %i" % i)
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if m is None:
- self.fail("Parse error (FOLDER)")
-
- new_links.extend(re.findall(self.LINK_PATTERN, m.group(1)))
- m = re.search(self.NEXT_PAGE_PATTERN, html)
- if m:
- html = self.load("http://ulozto.net/" + m.group(1))
- else:
- break
- else:
- self.logInfo("Limit of 99 pages reached, aborting")
-
- if new_links:
- self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)]
- else:
- self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/UploadableChFolder.py b/module/plugins/crypter/UploadableChFolder.py
deleted file mode 100644
index b76076531..000000000
--- a/module/plugins/crypter/UploadableChFolder.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class UploadableChFolder(SimpleCrypter):
- __name__ = "UploadableChFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+'
-
- __description__ = """ Uploadable.ch folder decrypter plugin """
- __author_name__ = ("guidobelix", "Walter Purcaro")
- __author_mail__ = ("guidobelix@hotmail.it", "vuolter@gmail.com")
-
-
- LINK_PATTERN = r'"(.+?)" class="icon_zipfile">'
- TITLE_PATTERN = r'<div class="folder"><span>&nbsp;</span>(?P<title>.+?)</div>'
- OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.'
- TEMP_OFFLINE_PATTERN = r'<div class="icon_err">'
diff --git a/module/plugins/crypter/UploadedToFolder.py b/module/plugins/crypter/UploadedToFolder.py
deleted file mode 100644
index 068412062..000000000
--- a/module/plugins/crypter/UploadedToFolder.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class UploadedToFolder(SimpleCrypter):
- __name__ = "UploadedToFolder"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)'
-
- __description__ = """UploadedTo decrypter plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick='
- TITLE_PATTERN = r'<title>(?P<title>[^<]+)</title>'
-
-
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url)
-
- package_name, folder_name = self.getPackageNameAndFolder()
-
- m = re.search(self.PLAIN_PATTERN, self.html)
- if m:
- plain_link = 'http://uploaded.net/' + m.group('plain')
- else:
- self.fail('Parse error - Unable to find plain url list')
-
- self.html = self.load(plain_link)
- package_links = self.html.split('\n')[:-1]
- self.logDebug('Package has %d links' % len(package_links))
-
- self.packages = [(package_name, package_links, folder_name)]
diff --git a/module/plugins/crypter/WiiReloadedOrg.py b/module/plugins/crypter/WiiReloadedOrg.py
deleted file mode 100644
index cb02fbd2d..000000000
--- a/module/plugins/crypter/WiiReloadedOrg.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class WiiReloadedOrg(DeadCrypter):
- __name__ = "WiiReloadedOrg"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
-
- __description__ = """Wii-Reloaded.org decrypter plugin"""
- __author_name__ = "hzpz"
- __author_mail__ = None
diff --git a/module/plugins/crypter/XupPl.py b/module/plugins/crypter/XupPl.py
deleted file mode 100644
index 5e5f511a8..000000000
--- a/module/plugins/crypter/XupPl.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Crypter import Crypter
-
-
-class XupPl(Crypter):
- __name__ = "XupPl"
- __type__ = "crypter"
- __version__ = "0.1"
-
- __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*'
-
- __description__ = """Xup.pl decrypter plugin"""
- __author_name__ = "z00nx"
- __author_mail__ = "z00nx0@gmail.com"
-
-
- def decrypt(self, pyfile):
- header = self.load(pyfile.url, just_header=True)
- if 'location' in header:
- self.urls = [header['location']]
- else:
- self.fail('Unable to find link')
diff --git a/module/plugins/crypter/YoutubeBatch.py b/module/plugins/crypter/YoutubeBatch.py
deleted file mode 100644
index 158dfeee9..000000000
--- a/module/plugins/crypter/YoutubeBatch.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urlparse import urljoin
-
-from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
-from module.utils import safe_join
-
-API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
-
-
-class YoutubeBatch(Crypter):
- __name__ = "YoutubeBatch"
- __type__ = "crypter"
- __version__ = "1.00"
-
- __pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)'
- __config__ = [("likes", "bool", "Grab user (channel) liked videos", False),
- ("favorites", "bool", "Grab user (channel) favorite videos", False),
- ("uploads", "bool", "Grab channel unplaylisted videos", True)]
-
- __description__ = """Youtube.com channel & playlist decrypter plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
- def api_response(self, ref, req):
- req.update({"key": API_KEY})
- url = urljoin("https://www.googleapis.com/youtube/v3/", ref)
- page = self.load(url, get=req)
- return json_loads(page)
-
- def getChannel(self, user):
- channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"})
- if channels['items']:
- channel = channels['items'][0]
- return {"id": channel['id'],
- "title": channel['snippet']['title'],
- "relatedPlaylists": channel['contentDetails']['relatedPlaylists'],
- "user": user} # One lone channel for user?
-
- def getPlaylist(self, p_id):
- playlists = self.api_response("playlists", {"part": "snippet", "id": p_id})
- if playlists['items']:
- playlist = playlists['items'][0]
- return {"id": p_id,
- "title": playlist['snippet']['title'],
- "channelId": playlist['snippet']['channelId'],
- "channelTitle": playlist['snippet']['channelTitle']}
-
- def _getPlaylists(self, id, token=None):
- req = {"part": "id", "maxResults": "50", "channelId": id}
- if token:
- req.update({"pageToken": token})
-
- playlists = self.api_response("playlists", req)
-
- for playlist in playlists['items']:
- yield playlist['id']
-
- if "nextPageToken" in playlists:
- for item in self._getPlaylists(id, playlists['nextPageToken']):
- yield item
-
- def getPlaylists(self, ch_id):
- return map(self.getPlaylist, self._getPlaylists(ch_id))
-
- def _getVideosId(self, id, token=None):
- req = {"part": "contentDetails", "maxResults": "50", "playlistId": id}
- if token:
- req.update({"pageToken": token})
-
- playlist = self.api_response("playlistItems", req)
-
- for item in playlist['items']:
- yield item['contentDetails']['videoId']
-
- if "nextPageToken" in playlist:
- for item in self._getVideosId(id, playlist['nextPageToken']):
- yield item
-
- def getVideosId(self, p_id):
- return list(self._getVideosId(p_id))
-
- def decrypt(self, pyfile):
- m = re.match(self.__pattern__, pyfile.url)
- m_id = m.group("ID")
- m_type = m.group("TYPE")
-
- if m_type == "user":
- self.logDebug("Url recognized as Channel")
- user = m_id
- channel = self.getChannel(user)
-
- if channel:
- playlists = self.getPlaylists(channel['id'])
- self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel['title']))
-
- relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel['relatedPlaylists'].iteritems()}
- self.logDebug("Channel's related playlists found = %s" % relatedplaylist.keys())
-
- relatedplaylist['uploads']['title'] = "Unplaylisted videos"
- relatedplaylist['uploads']['checkDups'] = True #: checkDups flag
-
- for p_name, p_data in relatedplaylist.iteritems():
- if self.getConfig(p_name):
- p_data['title'] += " of " + user
- playlists.append(p_data)
- else:
- playlists = []
- else:
- self.logDebug("Url recognized as Playlist")
- playlists = [self.getPlaylist(m_id)]
-
- if not playlists:
- self.fail("No playlist available")
-
- addedvideos = []
- urlize = lambda x: "https://www.youtube.com/watch?v=" + x
- for p in playlists:
- p_name = p['title']
- p_videos = self.getVideosId(p['id'])
- p_folder = safe_join(self.config['general']['download_folder'], p['channelTitle'], p_name)
- self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name))
-
- if not p_videos:
- continue
- elif "checkDups" in p:
- p_urls = [urlize(v_id) for v_id in p_videos if v_id not in addedvideos]
- self.logDebug("%s video\s available on playlist \"%s\" after duplicates cleanup" % (len(p_urls), p_name))
- else:
- p_urls = map(urlize, p_videos)
-
- self.packages.append((p_name, p_urls, p_folder)) #: folder is NOT recognized by pyload 0.4.9!
-
- addedvideos.extend(p_videos)
diff --git a/module/plugins/hooks/AlldebridCom.py b/module/plugins/hooks/AlldebridCom.py
deleted file mode 100644
index 906875a69..000000000
--- a/module/plugins/hooks/AlldebridCom.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class AlldebridCom(MultiHoster):
- __name__ = "AlldebridCom"
- __type__ = "hook"
- __version__ = "0.13"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("https", "bool", "Enable HTTPS", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Alldebrid.com hook plugin"""
- __author_name__ = "Andy Voigt"
- __author_mail__ = "spamsales@online.de"
-
-
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://www.alldebrid.com/api.php?action=get_host").replace("\"", "").strip()
-
- return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/module/plugins/hooks/BypassCaptcha.py b/module/plugins/hooks/BypassCaptcha.py
deleted file mode 100644
index d62de24a7..000000000
--- a/module/plugins/hooks/BypassCaptcha.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from pycurl import FORM_FILE, LOW_SPEED_TIME
-from thread import start_new_thread
-
-from module.network.HTTPRequest import BadHeader
-from module.network.RequestFactory import getURL, getRequest
-from module.plugins.Hook import Hook
-
-
-class BypassCaptchaException(Exception):
-
- def __init__(self, err):
- self.err = err
-
- def getCode(self):
- return self.err
-
- def __str__(self):
- return "<BypassCaptchaException %s>" % self.err
-
- def __repr__(self):
- return "<BypassCaptchaException %s>" % self.err
-
-
-class BypassCaptcha(Hook):
- __name__ = "BypassCaptcha"
- __type__ = "hook"
- __version__ = "0.04"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("force", "bool", "Force BC even if client is connected", False),
- ("passkey", "password", "Passkey", "")]
-
- __description__ = """Send captchas to BypassCaptcha.com"""
- __author_name__ = ("RaNaN", "Godofdream", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "soilfcition@gmail.com", "zoidberg@mujmail.cz")
-
- PYLOAD_KEY = "4f771155b640970d5607f919a615bdefc67e7d32"
-
- SUBMIT_URL = "http://bypasscaptcha.com/upload.php"
- RESPOND_URL = "http://bypasscaptcha.com/check_value.php"
- GETCREDITS_URL = "http://bypasscaptcha.com/ex_left.php"
-
-
- def setup(self):
- self.info = {}
-
- def getCredits(self):
- response = getURL(self.GETCREDITS_URL, post={"key": self.getConfig("passkey")})
-
- data = dict([x.split(' ', 1) for x in response.splitlines()])
- return int(data['Left'])
-
- def submit(self, captcha, captchaType="file", match=None):
- req = getRequest()
-
- #raise timeout threshold
- req.c.setopt(LOW_SPEED_TIME, 80)
-
- try:
- response = req.load(self.SUBMIT_URL,
- post={"vendor_key": self.PYLOAD_KEY,
- "key": self.getConfig("passkey"),
- "gen_task_id": "1",
- "file": (FORM_FILE, captcha)},
- multipart=True)
- finally:
- req.close()
-
- data = dict([x.split(' ', 1) for x in response.splitlines()])
- if not data or "Value" not in data:
- raise BypassCaptchaException(response)
-
- result = data['Value']
- ticket = data['TaskId']
- self.logDebug("result %s : %s" % (ticket, result))
-
- return ticket, result
-
- def respond(self, ticket, success):
- try:
- response = getURL(self.RESPOND_URL, post={"task_id": ticket, "key": self.getConfig("passkey"),
- "cv": 1 if success else 0})
- except BadHeader, e:
- self.logError("Could not send response.", str(e))
-
- def newCaptchaTask(self, task):
- if "service" in task.data:
- return False
-
- if not task.isTextual():
- return False
-
- if not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if self.getCredits() > 0:
- task.handler.append(self)
- task.data['service'] = self.__name__
- task.setWaiting(100)
- start_new_thread(self.processCaptcha, (task,))
-
- else:
- self.logInfo("Your %s account has not enough credits" % self.__name__)
-
- def captchaCorrect(self, task):
- if task.data['service'] == self.__name__ and "ticket" in task.data:
- self.respond(task.data['ticket'], True)
-
- def captchaInvalid(self, task):
- if task.data['service'] == self.__name__ and "ticket" in task.data:
- self.respond(task.data['ticket'], False)
-
- def processCaptcha(self, task):
- c = task.captchaFile
- try:
- ticket, result = self.submit(c)
- except BypassCaptchaException, e:
- task.error = e.getCode()
- return
-
- task.data['ticket'] = ticket
- task.setResult(result)
diff --git a/module/plugins/hooks/Captcha9kw.py b/module/plugins/hooks/Captcha9kw.py
deleted file mode 100755
index 1b7406edd..000000000
--- a/module/plugins/hooks/Captcha9kw.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import time
-
-from base64 import b64encode
-from thread import start_new_thread
-
-from module.network.HTTPRequest import BadHeader
-from module.network.RequestFactory import getURL
-from module.plugins.Hook import Hook
-
-
-class Captcha9kw(Hook):
- __name__ = "Captcha9kw"
- __type__ = "hook"
- __version__ = "0.09"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("force", "bool", "Force CT even if client is connected", True),
- ("https", "bool", "Enable HTTPS", False),
- ("confirm", "bool", "Confirm Captcha (Cost +6)", False),
- ("captchaperhour", "int", "Captcha per hour (max. 9999)", 9999),
- ("prio", "int", "Prio 1-10 (Cost +1-10)", 0),
- ("selfsolve", "bool",
- "If enabled and you have a 9kw client active only you will get your captcha to solve it (Selfsolve)",
- False),
- ("timeout", "int", "Timeout (max. 300)", 300),
- ("passkey", "password", "API key", "")]
-
- __description__ = """Send captchas to 9kw.eu"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
- API_URL = "://www.9kw.eu/index.cgi"
-
-
- def setup(self):
- self.API_URL = "https" + self.API_URL if self.getConfig("https") else "http" + self.API_URL
- self.info = {}
-
- def getCredits(self):
- response = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "pyload": "1", "source": "pyload",
- "action": "usercaptchaguthaben"})
-
- if response.isdigit():
- self.logInfo(_("%s credits left") % response)
- self.info['credits'] = credits = int(response)
- return credits
- else:
- self.logError(response)
- return 0
-
- def processCaptcha(self, task):
- result = None
-
- with open(task.captchaFile, 'rb') as f:
- data = f.read()
- data = b64encode(data)
- self.logDebug("%s : %s" % (task.captchaFile, data))
- if task.isPositional():
- mouse = 1
- else:
- mouse = 0
-
- response = getURL(self.API_URL, post={
- "apikey": self.getConfig("passkey"),
- "prio": self.getConfig("prio"),
- "confirm": self.getConfig("confirm"),
- "captchaperhour": self.getConfig("captchaperhour"),
- "maxtimeout": self.getConfig("timeout"),
- "selfsolve": self.getConfig("selfsolve"),
- "pyload": "1",
- "source": "pyload",
- "base64": "1",
- "mouse": mouse,
- "file-upload-01": data,
- "action": "usercaptchaupload"})
-
- if response.isdigit():
- self.logInfo(_("New CaptchaID from upload: %s : %s") % (response, task.captchaFile))
-
- for _ in xrange(1, 100, 1):
- response2 = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "id": response,
- "pyload": "1", "source": "pyload",
- "action": "usercaptchacorrectdata"})
-
- if response2 != "":
- break
-
- time.sleep(3)
-
- result = response2
- task.data['ticket'] = response
- self.logInfo("result %s : %s" % (response, result))
- task.setResult(result)
- else:
- self.logError("Bad upload: %s" % response)
- return False
-
- def newCaptchaTask(self, task):
- if not task.isTextual() and not task.isPositional():
- return False
-
- if not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if self.getCredits() > 0:
- task.handler.append(self)
- task.setWaiting(self.getConfig("timeout"))
- start_new_thread(self.processCaptcha, (task,))
-
- else:
- self.logError(_("Your Captcha 9kw.eu Account has not enough credits"))
-
- def captchaCorrect(self, task):
- if "ticket" in task.data:
-
- try:
- response = getURL(self.API_URL,
- post={"action": "usercaptchacorrectback",
- "apikey": self.getConfig("passkey"),
- "api_key": self.getConfig("passkey"),
- "correct": "1",
- "pyload": "1",
- "source": "pyload",
- "id": task.data['ticket']})
- self.logInfo("Request correct: %s" % response)
-
- except BadHeader, e:
- self.logError("Could not send correct request.", str(e))
- else:
- self.logError("No CaptchaID for correct request (task %s) found." % task)
-
- def captchaInvalid(self, task):
- if "ticket" in task.data:
-
- try:
- response = getURL(self.API_URL,
- post={"action": "usercaptchacorrectback",
- "apikey": self.getConfig("passkey"),
- "api_key": self.getConfig("passkey"),
- "correct": "2",
- "pyload": "1",
- "source": "pyload",
- "id": task.data['ticket']})
- self.logInfo("Request refund: %s" % response)
-
- except BadHeader, e:
- self.logError("Could not send refund request.", str(e))
- else:
- self.logError("No CaptchaID for not correct request (task %s) found." % task)
diff --git a/module/plugins/hooks/CaptchaBrotherhood.py b/module/plugins/hooks/CaptchaBrotherhood.py
deleted file mode 100644
index e240cbbc0..000000000
--- a/module/plugins/hooks/CaptchaBrotherhood.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import StringIO
-import pycurl
-
-from PIL import Image
-from thread import start_new_thread
-from time import sleep
-from urllib import urlencode
-
-from module.network.RequestFactory import getURL, getRequest
-from module.plugins.Hook import Hook
-
-
-class CaptchaBrotherhoodException(Exception):
-
- def __init__(self, err):
- self.err = err
-
- def getCode(self):
- return self.err
-
- def __str__(self):
- return "<CaptchaBrotherhoodException %s>" % self.err
-
- def __repr__(self):
- return "<CaptchaBrotherhoodException %s>" % self.err
-
-
-class CaptchaBrotherhood(Hook):
- __name__ = "CaptchaBrotherhood"
- __type__ = "hook"
- __version__ = "0.05"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("username", "str", "Username", ""),
- ("force", "bool", "Force CT even if client is connected", False),
- ("passkey", "password", "Password", "")]
-
- __description__ = """Send captchas to CaptchaBrotherhood.com"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- API_URL = "http://www.captchabrotherhood.com/"
-
-
- def setup(self):
- self.info = {}
-
- def getCredits(self):
- response = getURL(self.API_URL + "askCredits.aspx",
- get={"username": self.getConfig("username"), "password": self.getConfig("passkey")})
- if not response.startswith("OK"):
- raise CaptchaBrotherhoodException(response)
- else:
- credits = int(response[3:])
- self.logInfo(_("%d credits left") % credits)
- self.info['credits'] = credits
- return credits
-
- def submit(self, captcha, captchaType="file", match=None):
- try:
- img = Image.open(captcha)
- output = StringIO.StringIO()
- self.logDebug("CAPTCHA IMAGE", img, img.format, img.mode)
- if img.format in ("GIF", "JPEG"):
- img.save(output, img.format)
- else:
- if img.mode != "RGB":
- img = img.convert("RGB")
- img.save(output, "JPEG")
- data = output.getvalue()
- output.close()
- except Exception, e:
- raise CaptchaBrotherhoodException("Reading or converting captcha image failed: %s" % e)
-
- req = getRequest()
-
- url = "%ssendNewCaptcha.aspx?%s" % (self.API_URL,
- urlencode({"username": self.getConfig("username"),
- "password": self.getConfig("passkey"),
- "captchaSource": "pyLoad",
- "timeout": "80"}))
-
- req.c.setopt(pycurl.URL, url)
- req.c.setopt(pycurl.POST, 1)
- req.c.setopt(pycurl.POSTFIELDS, data)
- req.c.setopt(pycurl.HTTPHEADER, ["Content-Type: text/html"])
-
- try:
- req.c.perform()
- response = req.getResponse()
- except Exception, e:
- raise CaptchaBrotherhoodException("Submit captcha image failed")
-
- req.close()
-
- if not response.startswith("OK"):
- raise CaptchaBrotherhoodException(response[1])
-
- ticket = response[3:]
-
- for _ in xrange(15):
- sleep(5)
- response = self.get_api("askCaptchaResult", ticket)
- if response.startswith("OK-answered"):
- return ticket, response[12:]
-
- raise CaptchaBrotherhoodException("No solution received in time")
-
- def get_api(self, api, ticket):
- response = getURL("%s%s.aspx" % (self.API_URL, api),
- get={"username": self.getConfig("username"),
- "password": self.getConfig("passkey"),
- "captchaID": ticket})
- if not response.startswith("OK"):
- raise CaptchaBrotherhoodException("Unknown response: %s" % response)
-
- return response
-
- def newCaptchaTask(self, task):
- if "service" in task.data:
- return False
-
- if not task.isTextual():
- return False
-
- if not self.getConfig("username") or not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if self.getCredits() > 10:
- task.handler.append(self)
- task.data['service'] = self.__name__
- task.setWaiting(100)
- start_new_thread(self.processCaptcha, (task,))
- else:
- self.logInfo("Your CaptchaBrotherhood Account has not enough credits")
-
- def captchaInvalid(self, task):
- if task.data['service'] == self.__name__ and "ticket" in task.data:
- response = self.get_api("complainCaptcha", task.data['ticket'])
-
- def processCaptcha(self, task):
- c = task.captchaFile
- try:
- ticket, result = self.submit(c)
- except CaptchaBrotherhoodException, e:
- task.error = e.getCode()
- return
-
- task.data['ticket'] = ticket
- task.setResult(result)
diff --git a/module/plugins/hooks/Checksum.py b/module/plugins/hooks/Checksum.py
deleted file mode 100644
index c2c088066..000000000
--- a/module/plugins/hooks/Checksum.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import hashlib
-import re
-import zlib
-
-from os import remove
-from os.path import getsize, isfile, splitext
-
-from module.plugins.Hook import Hook
-from module.utils import safe_join, fs_encode
-
-
-def computeChecksum(local_file, algorithm):
- if algorithm in getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")):
- h = getattr(hashlib, algorithm)()
-
- with open(local_file, 'rb') as f:
- for chunk in iter(lambda: f.read(128 * h.block_size), b''):
- h.update(chunk)
-
- return h.hexdigest()
-
- elif algorithm in ("adler32", "crc32"):
- hf = getattr(zlib, algorithm)
- last = 0
-
- with open(local_file, 'rb') as f:
- for chunk in iter(lambda: f.read(8192), b''):
- last = hf(chunk, last)
-
- return "%x" % last
-
- else:
- return None
-
-
-class Checksum(Hook):
- __name__ = "Checksum"
- __type__ = "hook"
- __version__ = "0.13"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("check_checksum", "bool", "Check checksum? (If False only size will be verified)", True),
- ("check_action", "fail;retry;nothing", "What to do if check fails?", "retry"),
- ("max_tries", "int", "Number of retries", 2),
- ("retry_action", "fail;nothing", "What to do if all retries fail?", "fail"),
- ("wait_time", "int", "Time to wait before each retry (seconds)", 1)]
-
- __description__ = """Verify downloaded file size and checksum"""
- __author_name__ = ("zoidberg", "Walter Purcaro", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com", "l.stickell@yahoo.it")
-
- methods = {'sfv': 'crc32', 'crc': 'crc32', 'hash': 'md5'}
- regexps = {'sfv': r'^(?P<name>[^;].+)\s+(?P<hash>[0-9A-Fa-f]{8})$',
- 'md5': r'^(?P<name>[0-9A-Fa-f]{32}) (?P<file>.+)$',
- 'crc': r'filename=(?P<name>.+)\nsize=(?P<size>\d+)\ncrc32=(?P<hash>[0-9A-Fa-f]{8})$',
- 'default': r'^(?P<hash>[0-9A-Fa-f]+)\s+\*?(?P<name>.+)$'}
-
-
- def coreReady(self):
- if not self.getConfig("check_checksum"):
- self.logInfo("Checksum validation is disabled in plugin configuration")
-
- def setup(self):
- self.algorithms = sorted(
- getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")), reverse=True)
- self.algorithms.extend(["crc32", "adler32"])
- self.formats = self.algorithms + ["sfv", "crc", "hash"]
-
- def downloadFinished(self, pyfile):
- """
- Compute checksum for the downloaded file and compare it with the hash provided by the hoster.
- pyfile.plugin.check_data should be a dictionary which can contain:
- a) if known, the exact filesize in bytes (e.g. "size": 123456789)
- b) hexadecimal hash string with algorithm name as key (e.g. "md5": "d76505d0869f9f928a17d42d66326307")
- """
- if hasattr(pyfile.plugin, "check_data") and (isinstance(pyfile.plugin.check_data, dict)):
- data = pyfile.plugin.check_data.copy()
- elif hasattr(pyfile.plugin, "api_data") and (isinstance(pyfile.plugin.api_data, dict)):
- data = pyfile.plugin.api_data.copy()
- else:
- return
-
- self.logDebug(data)
-
- if not pyfile.plugin.lastDownload:
- self.checkFailed(pyfile, None, "No file downloaded")
-
- local_file = fs_encode(pyfile.plugin.lastDownload)
- #download_folder = self.config['general']['download_folder']
- #local_file = fs_encode(safe_join(download_folder, pyfile.package().folder, pyfile.name))
-
- if not isfile(local_file):
- self.checkFailed(pyfile, None, "File does not exist")
-
- # validate file size
- if "size" in data:
- api_size = int(data['size'])
- file_size = getsize(local_file)
- if api_size != file_size:
- self.logWarning("File %s has incorrect size: %d B (%d expected)" % (pyfile.name, file_size, api_size))
- self.checkFailed(pyfile, local_file, "Incorrect file size")
- del data['size']
-
- # validate checksum
- if data and self.getConfig("check_checksum"):
- if "checksum" in data:
- data['md5'] = data['checksum']
-
- for key in self.algorithms:
- if key in data:
- checksum = computeChecksum(local_file, key.replace("-", "").lower())
- if checksum:
- if checksum == data[key].lower():
- self.logInfo('File integrity of "%s" verified by %s checksum (%s).' %
- (pyfile.name, key.upper(), checksum))
- break
- else:
- self.logWarning("%s checksum for file %s does not match (%s != %s)" %
- (key.upper(), pyfile.name, checksum, data[key]))
- self.checkFailed(pyfile, local_file, "Checksums do not match")
- else:
- self.logWarning("Unsupported hashing algorithm: %s" % key.upper())
- else:
- self.logWarning("Unable to validate checksum for file %s" % pyfile.name)
-
- def checkFailed(self, pyfile, local_file, msg):
- check_action = self.getConfig("check_action")
- if check_action == "retry":
- max_tries = self.getConfig("max_tries")
- retry_action = self.getConfig("retry_action")
- if pyfile.plugin.retries < max_tries:
- if local_file:
- remove(local_file)
- pyfile.plugin.retry(max_tries=max_tries, wait_time=self.getConfig("wait_time"), reason=msg)
- elif retry_action == "nothing":
- return
- elif check_action == "nothing":
- return
- pyfile.plugin.fail(reason=msg)
-
- def packageFinished(self, pypack):
- download_folder = safe_join(self.config['general']['download_folder'], pypack.folder, "")
-
- for link in pypack.getChildren().itervalues():
- file_type = splitext(link['name'])[1][1:].lower()
- #self.logDebug(link, file_type)
-
- if file_type not in self.formats:
- continue
-
- hash_file = fs_encode(safe_join(download_folder, link['name']))
- if not isfile(hash_file):
- self.logWarning("File not found: %s" % link['name'])
- continue
-
- with open(hash_file) as f:
- text = f.read()
-
- for m in re.finditer(self.regexps.get(file_type, self.regexps['default']), text):
- data = m.groupdict()
- self.logDebug(link['name'], data)
-
- local_file = fs_encode(safe_join(download_folder, data['name']))
- algorithm = self.methods.get(file_type, file_type)
- checksum = computeChecksum(local_file, algorithm)
- if checksum == data['hash']:
- self.logInfo('File integrity of "%s" verified by %s checksum (%s).' %
- (data['name'], algorithm, checksum))
- else:
- self.logWarning("%s checksum for file %s does not match (%s != %s)" %
- (algorithm, data['name'], checksum, data['hash']))
diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py
deleted file mode 100644
index 5c523caf7..000000000
--- a/module/plugins/hooks/ClickAndLoad.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import socket
-import thread
-
-from module.plugins.Hook import Hook
-
-
-class ClickAndLoad(Hook):
- __name__ = "ClickAndLoad"
- __type__ = "hook"
- __version__ = "0.22"
-
- __config__ = [("activated", "bool", "Activated", True),
- ("extern", "bool", "Allow external link adding", False)]
-
- __description__ = """Gives abillity to use jd's click and load. depends on webinterface"""
- __author_name__ = ("RaNaN", "mkaay")
- __author_mail__ = ("RaNaN@pyload.de", "mkaay@mkaay.de")
-
-
- def coreReady(self):
- self.port = int(self.config['webinterface']['port'])
- if self.config['webinterface']['activated']:
- try:
- if self.getConfig("extern"):
- ip = "0.0.0.0"
- else:
- ip = "127.0.0.1"
-
- thread.start_new_thread(proxy, (self, ip, self.port, 9666))
- except:
- self.logError("ClickAndLoad port already in use.")
-
-
-def proxy(self, *settings):
- thread.start_new_thread(server, (self,) + settings)
- lock = thread.allocate_lock()
- lock.acquire()
- lock.acquire()
-
-
-def server(self, *settings):
- try:
- dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- dock_socket.bind((settings[0], settings[2]))
- dock_socket.listen(5)
- while True:
- client_socket = dock_socket.accept()[0]
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server_socket.connect(("127.0.0.1", settings[1]))
- thread.start_new_thread(forward, (client_socket, server_socket))
- thread.start_new_thread(forward, (server_socket, client_socket))
- except socket.error, e:
- if hasattr(e, "errno"):
- errno = e.errno
- else:
- errno = e.args[0]
-
- if errno == 98:
- self.logWarning(_("Click'N'Load: Port 9666 already in use"))
- return
- thread.start_new_thread(server, (self,) + settings)
- except:
- thread.start_new_thread(server, (self,) + settings)
-
-
-def forward(source, destination):
- string = ' '
- while string:
- string = source.recv(1024)
- if string:
- destination.sendall(string)
- else:
- #source.shutdown(socket.SHUT_RD)
- destination.shutdown(socket.SHUT_WR)
diff --git a/module/plugins/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py
deleted file mode 100644
index 530395d32..000000000
--- a/module/plugins/hooks/DeathByCaptcha.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import re
-
-from base64 import b64encode
-from pycurl import FORM_FILE, HTTPHEADER
-from thread import start_new_thread
-from time import sleep
-
-from module.common.json_layer import json_loads
-from module.network.HTTPRequest import BadHeader
-from module.network.RequestFactory import getRequest
-from module.plugins.Hook import Hook
-
-
-class DeathByCaptchaException(Exception):
- DBC_ERRORS = {'not-logged-in': 'Access denied, check your credentials',
- 'invalid-credentials': 'Access denied, check your credentials',
- 'banned': 'Access denied, account is suspended',
- 'insufficient-funds': 'Insufficient account balance to decrypt CAPTCHA',
- 'invalid-captcha': 'CAPTCHA is not a valid image',
- 'service-overload': 'CAPTCHA was rejected due to service overload, try again later',
- 'invalid-request': 'Invalid request',
- 'timed-out': 'No CAPTCHA solution received in time'}
-
- def __init__(self, err):
- self.err = err
-
- def getCode(self):
- return self.err
-
- def getDesc(self):
- if self.err in self.DBC_ERRORS.keys():
- return self.DBC_ERRORS[self.err]
- else:
- return self.err
-
- def __str__(self):
- return "<DeathByCaptchaException %s>" % self.err
-
- def __repr__(self):
- return "<DeathByCaptchaException %s>" % self.err
-
-
-class DeathByCaptcha(Hook):
- __name__ = "DeathByCaptcha"
- __type__ = "hook"
- __version__ = "0.03"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("username", "str", "Username", ""),
- ("passkey", "password", "Password", ""),
- ("force", "bool", "Force DBC even if client is connected", False)]
-
- __description__ = """Send captchas to DeathByCaptcha.com"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- API_URL = "http://api.dbcapi.me/api/"
-
-
- def setup(self):
- self.info = {}
-
- def call_api(self, api="captcha", post=False, multipart=False):
- req = getRequest()
- req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version])
-
- if post:
- if not isinstance(post, dict):
- post = {}
- post.update({"username": self.getConfig("username"),
- "password": self.getConfig("passkey")})
-
- response = None
- try:
- json = req.load("%s%s" % (self.API_URL, api),
- post=post,
- multipart=multipart)
- self.logDebug(json)
- response = json_loads(json)
-
- if "error" in response:
- raise DeathByCaptchaException(response['error'])
- elif "status" not in response:
- raise DeathByCaptchaException(str(response))
-
- except BadHeader, e:
- if 403 == e.code:
- raise DeathByCaptchaException('not-logged-in')
- elif 413 == e.code:
- raise DeathByCaptchaException('invalid-captcha')
- elif 503 == e.code:
- raise DeathByCaptchaException('service-overload')
- elif e.code in (400, 405):
- raise DeathByCaptchaException('invalid-request')
- else:
- raise
-
- finally:
- req.close()
-
- return response
-
- def getCredits(self):
- response = self.call_api("user", True)
-
- if 'is_banned' in response and response['is_banned']:
- raise DeathByCaptchaException('banned')
- elif 'balance' in response and 'rate' in response:
- self.info.update(response)
- else:
- raise DeathByCaptchaException(response)
-
- def getStatus(self):
- response = self.call_api("status", False)
-
- if 'is_service_overloaded' in response and response['is_service_overloaded']:
- raise DeathByCaptchaException('service-overload')
-
- def submit(self, captcha, captchaType="file", match=None):
- #workaround multipart-post bug in HTTPRequest.py
- if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")):
- multipart = True
- data = (FORM_FILE, captcha)
- else:
- multipart = False
- with open(captcha, 'rb') as f:
- data = f.read()
- data = "base64:" + b64encode(data)
-
- response = self.call_api("captcha", {"captchafile": data}, multipart)
-
- if "captcha" not in response:
- raise DeathByCaptchaException(response)
- ticket = response['captcha']
-
- for _ in xrange(24):
- sleep(5)
- response = self.call_api("captcha/%d" % ticket, False)
- if response['text'] and response['is_correct']:
- break
- else:
- raise DeathByCaptchaException('timed-out')
-
- result = response['text']
- self.logDebug("result %s : %s" % (ticket, result))
-
- return ticket, result
-
- def newCaptchaTask(self, task):
- if "service" in task.data:
- return False
-
- if not task.isTextual():
- return False
-
- if not self.getConfig("username") or not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- try:
- self.getStatus()
- self.getCredits()
- except DeathByCaptchaException, e:
- self.logError(e.getDesc())
- return False
-
- balance, rate = self.info['balance'], self.info['rate']
- self.logInfo("Account balance: US$%.3f (%d captchas left at %.2f cents each)" % (balance / 100,
- balance // rate, rate))
-
- if balance > rate:
- task.handler.append(self)
- task.data['service'] = self.__name__
- task.setWaiting(180)
- start_new_thread(self.processCaptcha, (task,))
-
- def captchaInvalid(self, task):
- if task.data['service'] == self.__name__ and "ticket" in task.data:
- try:
- response = self.call_api("captcha/%d/report" % task.data['ticket'], True)
- except DeathByCaptchaException, e:
- self.logError(e.getDesc())
- except Exception, e:
- self.logError(e)
-
- def processCaptcha(self, task):
- c = task.captchaFile
- try:
- ticket, result = self.submit(c)
- except DeathByCaptchaException, e:
- task.error = e.getCode()
- self.logError(e.getDesc())
- return
-
- task.data['ticket'] = ticket
- task.setResult(result)
diff --git a/module/plugins/hooks/DebridItaliaCom.py b/module/plugins/hooks/DebridItaliaCom.py
deleted file mode 100644
index 88efb6b2a..000000000
--- a/module/plugins/hooks/DebridItaliaCom.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class DebridItaliaCom(MultiHoster):
- __name__ = "DebridItaliaCom"
- __type__ = "hook"
- __version__ = "0.07"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Debriditalia.com hook plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def getHoster(self):
- return ["netload.in", "hotfile.com", "rapidshare.com", "multiupload.com",
- "uploading.com", "megashares.com", "crocko.com", "filepost.com",
- "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to",
- "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch",
- "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co",
- "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net", "letitbit.net",
- "easybytez.com", "uptobox.com", "ddlstorage.com"]
diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py
deleted file mode 100644
index bc926906f..000000000
--- a/module/plugins/hooks/DeleteFinished.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.database import style
-from module.plugins.Hook import Hook
-
-
-class DeleteFinished(Hook):
- __name__ = "DeleteFinished"
- __type__ = "hook"
- __version__ = "1.09"
-
- __config__ = [('activated', 'bool', 'Activated', 'False'),
- ('interval', 'int', 'Delete every (hours)', '72'),
- ('deloffline', 'bool', 'Delete packages with offline links', 'False')]
-
- __description__ = """Automatically delete all finished packages from queue"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
- ## overwritten methods ##
- def periodical(self):
- if not self.info['sleep']:
- deloffline = self.getConfig('deloffline')
- mode = '0,1,4' if deloffline else '0,4'
- msg = 'delete all finished packages in queue list (%s packages with offline links)'
- self.logInfo(msg % ('including' if deloffline else 'excluding'))
- self.deleteFinished(mode)
- self.info['sleep'] = True
- self.addEvent('packageFinished', self.wakeup)
-
- def pluginConfigChanged(self, plugin, name, value):
- if name == 'interval' and value != self.interval:
- self.interval = value * 3600
- self.initPeriodical()
-
- def unload(self):
- self.removeEvent('packageFinished', self.wakeup)
-
- def coreReady(self):
- self.info = {'sleep': True}
- interval = self.getConfig('interval')
- self.pluginConfigChanged('DeleteFinished', 'interval', interval)
- self.addEvent('packageFinished', self.wakeup)
-
- ## own methods ##
- @style.queue
- def deleteFinished(self, mode):
- self.c.execute('DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (%s))' % mode)
- self.c.execute('DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)')
-
- def wakeup(self, pypack):
- self.removeEvent('packageFinished', self.wakeup)
- self.info['sleep'] = False
-
- ## event managing ##
- def addEvent(self, event, func):
- """Adds an event listener for event name"""
- if event in self.m.events:
- if func in self.m.events[event]:
- self.logDebug('Function already registered %s' % func)
- else:
- self.m.events[event].append(func)
- else:
- self.m.events[event] = [func]
-
- def setup(self):
- self.m = self.manager
- self.removeEvent = self.m.removeEvent
diff --git a/module/plugins/hooks/DownloadScheduler.py b/module/plugins/hooks/DownloadScheduler.py
deleted file mode 100644
index a3d70b3ab..000000000
--- a/module/plugins/hooks/DownloadScheduler.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import localtime
-
-from module.plugins.Hook import Hook
-
-
-class DownloadScheduler(Hook):
- __name__ = "DownloadScheduler"
- __type__ = "hook"
- __version__ = "0.21"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("timetable", "str", "List time periods as hh:mm full or number(kB/s)",
- "0:00 full, 7:00 250, 10:00 0, 17:00 150"),
- ("abort", "bool", "Abort active downloads when start period with speed 0", False)]
-
- __description__ = """Download Scheduler"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
- def setup(self):
- self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded
-
- def coreReady(self):
- self.updateSchedule()
-
- def updateSchedule(self, schedule=None):
- if schedule is None:
- schedule = self.getConfig("timetable")
-
- schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)",
- schedule.lower().replace("full", "-1").replace("none", "0"))
- if not schedule:
- self.logError("Invalid schedule")
- return
-
- t0 = localtime()
- now = (t0.tm_hour, t0.tm_min, t0.tm_sec, "X")
- schedule = sorted([(int(x[0]), int(x[1]), 0, int(x[2])) for x in schedule] + [now])
-
- self.logDebug("Schedule", schedule)
-
- for i, v in enumerate(schedule):
- if v[3] == "X":
- last, next = schedule[i - 1], schedule[(i + 1) % len(schedule)]
- self.logDebug("Now/Last/Next", now, last, next)
-
- self.setDownloadSpeed(last[3])
-
- next_time = (((24 + next[0] - now[0]) * 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400
- self.core.scheduler.removeJob(self.cb)
- self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False)
-
- def setDownloadSpeed(self, speed):
- if speed == 0:
- abort = self.getConfig("abort")
- self.logInfo("Stopping download server. (Running downloads will %sbe aborted.)" % ('' if abort else 'not '))
- self.core.api.pauseServer()
- if abort:
- self.core.api.stopAllDownloads()
- else:
- self.core.api.unpauseServer()
-
- if speed > 0:
- self.logInfo("Setting download speed to %d kB/s" % speed)
- self.core.api.setConfigValue("download", "limit_speed", 1)
- self.core.api.setConfigValue("download", "max_speed", speed)
- else:
- self.logInfo("Setting download speed to FULL")
- self.core.api.setConfigValue("download", "limit_speed", 0)
- self.core.api.setConfigValue("download", "max_speed", -1)
diff --git a/module/plugins/hooks/EasybytezCom.py b/module/plugins/hooks/EasybytezCom.py
deleted file mode 100644
index da37297d9..000000000
--- a/module/plugins/hooks/EasybytezCom.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class EasybytezCom(MultiHoster):
- __name__ = "EasybytezCom"
- __type__ = "hook"
- __version__ = "0.03"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
-
- __description__ = """EasyBytez.com hook plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def getHoster(self):
- self.account = self.core.accountManager.getAccountPlugin(self.__name__)
- user = self.account.selectAccount()[0]
-
- try:
- req = self.account.getAccountRequest(user)
- page = req.load("http://www.easybytez.com")
-
- m = re.search(r'</textarea>\s*Supported sites:(.*)', page)
- return m.group(1).split(',')
- except Exception, e:
- self.logDebug(e)
- self.logWarning("Unable to load supported hoster list, using last known")
- return ["bitshare.com", "crocko.com", "ddlstorage.com", "depositfiles.com", "extabit.com", "hotfile.com",
- "mediafire.com", "netload.in", "rapidgator.net", "rapidshare.com", "uploading.com", "uload.to",
- "uploaded.to"]
diff --git a/module/plugins/hooks/Ev0InFetcher.py b/module/plugins/hooks/Ev0InFetcher.py
deleted file mode 100644
index c54c38bc6..000000000
--- a/module/plugins/hooks/Ev0InFetcher.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import mktime, time
-
-from module.lib import feedparser
-
-from module.plugins.Hook import Hook
-
-
-class Ev0InFetcher(Hook):
- __name__ = "Ev0InFetcher"
- __type__ = "hook"
- __version__ = "0.21"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("interval", "int", "Check interval in minutes", 10),
- ("queue", "bool", "Move new shows directly to Queue", False),
- ("shows", "str", "Shows to check for (comma seperated)", ""),
- ("quality", "xvid;x264;rmvb", "Video Format", "xvid"),
- ("hoster", "str", "Hoster to use (comma seperated)",
- "NetloadIn,RapidshareCom,MegauploadCom,HotfileCom")]
-
- __description__ = """Checks rss feeds for Ev0.in"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def setup(self):
- self.interval = self.getConfig("interval") * 60
-
- def filterLinks(self, links):
- results = self.core.pluginManager.parseUrls(links)
- sortedLinks = {}
-
- for url, hoster in results:
- if hoster not in sortedLinks:
- sortedLinks[hoster] = []
- sortedLinks[hoster].append(url)
-
- for h in self.getConfig("hoster").split(","):
- try:
- return sortedLinks[h.strip()]
- except:
- continue
- return []
-
-
- def periodical(self):
-
- def normalizefiletitle(filename):
- filename = filename.replace('.', ' ')
- filename = filename.replace('_', ' ')
- filename = filename.lower()
- return filename
-
- shows = [s.strip() for s in self.getConfig("shows").split(",")]
-
- feed = feedparser.parse("http://feeds.feedburner.com/ev0in/%s?format=xml" % self.getConfig("quality"))
-
- showStorage = {}
- for show in shows:
- showStorage[show] = int(self.getStorage("show_%s_lastfound" % show, 0))
-
- found = False
- for item in feed['items']:
- for show, lastfound in showStorage.iteritems():
- if show.lower() in normalizefiletitle(item['title']) and lastfound < int(mktime(item.date_parsed)):
- links = self.filterLinks(item['description'].split("<br />"))
- packagename = item['title'].encode("utf-8")
- self.logInfo("Ev0InFetcher: new episode '%s' (matched '%s')" % (packagename, show))
- self.core.api.addPackage(packagename, links, 1 if self.getConfig("queue") else 0)
- self.setStorage("show_%s_lastfound" % show, int(mktime(item.date_parsed)))
- found = True
- if not found:
- #self.logDebug("Ev0InFetcher: no new episodes found")
- pass
-
- for show, lastfound in self.getStorage().iteritems():
- if int(lastfound) > 0 and int(lastfound) + (3600 * 24 * 30) < int(time()):
- self.delStorage("show_%s_lastfound" % show)
- self.logDebug("Ev0InFetcher: cleaned '%s' record" % show)
diff --git a/module/plugins/hooks/ExpertDecoders.py b/module/plugins/hooks/ExpertDecoders.py
deleted file mode 100644
index c7ab80da0..000000000
--- a/module/plugins/hooks/ExpertDecoders.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-from base64 import b64encode
-from pycurl import LOW_SPEED_TIME
-from thread import start_new_thread
-from uuid import uuid4
-
-from module.network.HTTPRequest import BadHeader
-from module.network.RequestFactory import getURL, getRequest
-from module.plugins.Hook import Hook
-
-
-class ExpertDecoders(Hook):
- __name__ = "ExpertDecoders"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("force", "bool", "Force CT even if client is connected", False),
- ("passkey", "password", "Access key", "")]
-
- __description__ = """Send captchas to expertdecoders.com"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- API_URL = "http://www.fasttypers.org/imagepost.ashx"
-
-
- def setup(self):
- self.info = {}
-
- def getCredits(self):
- response = getURL(self.API_URL, post={"key": self.getConfig("passkey"), "action": "balance"})
-
- if response.isdigit():
- self.logInfo(_("%s credits left") % response)
- self.info['credits'] = credits = int(response)
- return credits
- else:
- self.logError(response)
- return 0
-
- def processCaptcha(self, task):
- task.data['ticket'] = ticket = uuid4()
- result = None
-
- with open(task.captchaFile, 'rb') as f:
- data = f.read()
- data = b64encode(data)
- #self.logDebug("%s: %s : %s" % (ticket, task.captchaFile, data))
-
- req = getRequest()
- #raise timeout threshold
- req.c.setopt(LOW_SPEED_TIME, 80)
-
- try:
- result = req.load(self.API_URL, post={"action": "upload", "key": self.getConfig("passkey"),
- "file": data, "gen_task_id": ticket})
- finally:
- req.close()
-
- self.logDebug("result %s : %s" % (ticket, result))
- task.setResult(result)
-
- def newCaptchaTask(self, task):
- if not task.isTextual():
- return False
-
- if not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if self.getCredits() > 0:
- task.handler.append(self)
- task.setWaiting(100)
- start_new_thread(self.processCaptcha, (task,))
-
- else:
- self.logInfo(_("Your ExpertDecoders Account has not enough credits"))
-
- def captchaInvalid(self, task):
- if "ticket" in task.data:
-
- try:
- response = getURL(self.API_URL, post={"action": "refund", "key": self.getConfig("passkey"),
- "gen_task_id": task.data['ticket']})
- self.logInfo("Request refund: %s" % response)
-
- except BadHeader, e:
- self.logError("Could not send refund request.", str(e))
diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py
deleted file mode 100644
index 90ae3bee0..000000000
--- a/module/plugins/hooks/ExternalScripts.py
+++ /dev/null
@@ -1,104 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import subprocess
-
-from os import listdir, access, X_OK, makedirs
-from os.path import join, exists, basename, abspath
-
-from module.plugins.Hook import Hook
-from module.utils import safe_join
-
-
-class ExternalScripts(Hook):
- __name__ = "ExternalScripts"
- __type__ = "hook"
- __version__ = "0.23"
-
- __config__ = [("activated", "bool", "Activated", True)]
-
- __description__ = """Run external scripts"""
- __author_name__ = ("mkaay", "RaNaN", "spoob")
- __author_mail__ = ("mkaay@mkaay.de", "ranan@pyload.org", "spoob@pyload.org")
-
- event_list = ["unrarFinished", "allDownloadsFinished", "allDownloadsProcessed"]
-
-
- def setup(self):
- self.scripts = {}
-
- folders = ["download_preparing", "download_finished", "package_finished",
- "before_reconnect", "after_reconnect", "unrar_finished",
- "all_dls_finished", "all_dls_processed"]
-
- for folder in folders:
- self.scripts[folder] = []
-
- self.initPluginType(folder, join(pypath, 'scripts', folder))
- self.initPluginType(folder, join('scripts', folder))
-
- for script_type, names in self.scripts.iteritems():
- if names:
- self.logInfo((_("Installed scripts for %s: ") % script_type) + ", ".join([basename(x) for x in names]))
-
- def initPluginType(self, folder, path):
- if not exists(path):
- try:
- makedirs(path)
- except:
- self.logDebug("Script folder %s not created" % folder)
- return
-
- for f in listdir(path):
- if f.startswith("#") or f.startswith(".") or f.startswith("_") or f.endswith("~") or f.endswith(".swp"):
- continue
-
- if not access(join(path, f), X_OK):
- self.logWarning(_("Script not executable:") + " %s/%s" % (folder, f))
-
- self.scripts[folder].append(join(path, f))
-
- def callScript(self, script, *args):
- try:
- cmd = [script] + [str(x) if not isinstance(x, basestring) else x for x in args]
- self.logDebug("Executing %(script)s: %(cmd)s" % {"script": abspath(script), "cmd": " ".join(cmd)})
- #output goes to pyload
- subprocess.Popen(cmd, bufsize=-1)
- except Exception, e:
- self.logError(_("Error in %(script)s: %(error)s") % {"script": basename(script), "error": str(e)})
-
- def downloadPreparing(self, pyfile):
- for script in self.scripts['download_preparing']:
- self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.id)
-
- def downloadFinished(self, pyfile):
- for script in self.scripts['download_finished']:
- self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.name,
- safe_join(self.config['general']['download_folder'],
- pyfile.package().folder, pyfile.name), pyfile.id)
-
- def packageFinished(self, pypack):
- for script in self.scripts['package_finished']:
- folder = self.config['general']['download_folder']
- folder = safe_join(folder, pypack.folder)
-
- self.callScript(script, pypack.name, folder, pypack.password, pypack.id)
-
- def beforeReconnecting(self, ip):
- for script in self.scripts['before_reconnect']:
- self.callScript(script, ip)
-
- def afterReconnecting(self, ip):
- for script in self.scripts['after_reconnect']:
- self.callScript(script, ip)
-
- def unrarFinished(self, folder, fname):
- for script in self.scripts['unrar_finished']:
- self.callScript(script, folder, fname)
-
- def allDownloadsFinished(self):
- for script in self.scripts['all_dls_finished']:
- self.callScript(script)
-
- def allDownloadsProcessed(self):
- for script in self.scripts['all_dls_processed']:
- self.callScript(script)
diff --git a/module/plugins/hooks/ExtractArchive.py b/module/plugins/hooks/ExtractArchive.py
deleted file mode 100644
index 183f189a6..000000000
--- a/module/plugins/hooks/ExtractArchive.py
+++ /dev/null
@@ -1,320 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import sys
-
-from copy import copy
-from os import remove, chmod, makedirs
-from os.path import exists, basename, isfile, isdir
-from traceback import print_exc
-
-# monkey patch bug in python 2.6 and lower
-# http://bugs.python.org/issue6122 , http://bugs.python.org/issue1236 , http://bugs.python.org/issue1731717
-if sys.version_info < (2, 7) and os.name != "nt":
- import errno
- from subprocess import Popen
-
- def _eintr_retry_call(func, *args):
- while True:
- try:
- return func(*args)
- except OSError, e:
- if e.errno == errno.EINTR:
- continue
- raise
-
- # unsued timeout option for older python version
- def wait(self, timeout=0):
- """Wait for child process to terminate. Returns returncode
- attribute."""
- if self.returncode is None:
- try:
- pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
- except OSError, e:
- if e.errno != errno.ECHILD:
- raise
- # This happens if SIGCLD is set to be ignored or waiting
- # for child processes has otherwise been disabled for our
- # process. This child is dead, we can't get the status.
- sts = 0
- self._handle_exitstatus(sts)
- return self.returncode
-
- Popen.wait = wait
-
-if os.name != "nt":
- from grp import getgrnam
- from os import chown
- from pwd import getpwnam
-
-from module.plugins.Hook import Hook, threaded, Expose
-from module.plugins.internal.AbstractExtractor import ArchiveError, CRCError, WrongPassword
-from module.utils import safe_join, fs_encode
-
-
-class ExtractArchive(Hook):
- """
- Provides: unrarFinished (folder, filename)
- """
- __name__ = "ExtractArchive"
- __type__ = "hook"
- __version__ = "0.16"
-
- __config__ = [("activated", "bool", "Activated", True),
- ("fullpath", "bool", "Extract full path", True),
- ("overwrite", "bool", "Overwrite files", True),
- ("passwordfile", "file", "password file", "unrar_passwords.txt"),
- ("deletearchive", "bool", "Delete archives when done", False),
- ("subfolder", "bool", "Create subfolder for each package", False),
- ("destination", "folder", "Extract files to", ""),
- ("excludefiles", "str", "Exclude files from unpacking (seperated by ;)", ""),
- ("recursive", "bool", "Extract archives in archvies", True),
- ("queue", "bool", "Wait for all downloads to be finished", True),
- ("renice", "int", "CPU Priority", 0)]
-
- __description__ = """Extract different kind of archives"""
- __author_name__ = ("pyLoad Team", "AndroKev")
- __author_mail__ = ("admin@pyload.org", "@pyloadforum")
-
- event_list = ["allDownloadsProcessed"]
-
-
- def setup(self):
- self.plugins = []
- self.passwords = []
- names = []
-
- for p in ("UnRar", "UnZip"):
- try:
- module = self.core.pluginManager.loadModule("internal", p)
- klass = getattr(module, p)
- if klass.checkDeps():
- names.append(p)
- self.plugins.append(klass)
-
- except OSError, e:
- if e.errno == 2:
- self.logInfo(_("No %s installed") % p)
- else:
- self.logWarning(_("Could not activate %s") % p, str(e))
- if self.core.debug:
- print_exc()
-
- except Exception, e:
- self.logWarning(_("Could not activate %s") % p, str(e))
- if self.core.debug:
- print_exc()
-
- if names:
- self.logInfo(_("Activated") + " " + " ".join(names))
- else:
- self.logInfo(_("No Extract plugins activated"))
-
- # queue with package ids
- self.queue = []
-
- @Expose
- def extractPackage(self, id):
- """ Extract package with given id"""
- self.manager.startThread(self.extract, [id])
-
- def packageFinished(self, pypack):
- if self.getConfig("queue"):
- self.logInfo(_("Package %s queued for later extracting") % pypack.name)
- self.queue.append(pypack.id)
- else:
- self.manager.startThread(self.extract, [pypack.id])
-
- @threaded
- def allDownloadsProcessed(self, thread):
- local = copy(self.queue)
- del self.queue[:]
- self.extract(local, thread)
-
- def extract(self, ids, thread=None):
- # reload from txt file
- self.reloadPasswords()
-
- # dl folder
- dl = self.config['general']['download_folder']
-
- extracted = []
-
- #iterate packages -> plugins -> targets
- for pid in ids:
- p = self.core.files.getPackage(pid)
- self.logInfo(_("Check package %s") % p.name)
- if not p:
- continue
-
- # determine output folder
- out = safe_join(dl, p.folder, "")
- # force trailing slash
-
- if self.getConfig("destination") and self.getConfig("destination").lower() != "none":
-
- out = safe_join(dl, p.folder, self.getConfig("destination"), "")
- #relative to package folder if destination is relative, otherwise absolute path overwrites them
-
- if self.getConfig("subfolder"):
- out = safe_join(out, fs_encode(p.folder))
-
- if not exists(out):
- makedirs(out)
-
- files_ids = [(safe_join(dl, p.folder, x['name']), x['id']) for x in p.getChildren().itervalues()]
- matched = False
-
- # check as long there are unseen files
- while files_ids:
- new_files_ids = []
-
- for plugin in self.plugins:
- targets = plugin.getTargets(files_ids)
- if targets:
- self.logDebug("Targets for %s: %s" % (plugin.__name__, targets))
- matched = True
- for target, fid in targets:
- if target in extracted:
- self.logDebug(basename(target), "skipped")
- continue
- extracted.append(target) # prevent extracting same file twice
-
- klass = plugin(self, target, out, self.getConfig("fullpath"), self.getConfig("overwrite"), self.getConfig("excludefiles"),
- self.getConfig("renice"))
- klass.init()
-
- self.logInfo(basename(target), _("Extract to %s") % out)
- new_files = self.startExtracting(klass, fid, p.password.strip().splitlines(), thread)
- self.logDebug("Extracted: %s" % new_files)
- self.setPermissions(new_files)
-
- for file in new_files:
- if not exists(file):
- self.logDebug("new file %s does not exists" % file)
- continue
- if self.getConfig("recursive") and isfile(file):
- new_files_ids.append((file, fid)) # append as new target
-
- files_ids = new_files_ids # also check extracted files
-
- if not matched:
- self.logInfo(_("No files found to extract"))
-
- def startExtracting(self, plugin, fid, passwords, thread):
- pyfile = self.core.files.getFile(fid)
- if not pyfile:
- return []
-
- pyfile.setCustomStatus(_("extracting"))
- thread.addActive(pyfile) # keep this file until everything is done
-
- try:
- progress = lambda x: pyfile.setProgress(x)
- success = False
-
- if not plugin.checkArchive():
- plugin.extract(progress)
- success = True
- else:
- self.logInfo(basename(plugin.file), _("Password protected"))
- self.logDebug("Passwords: %s" % str(passwords))
-
- pwlist = copy(self.getPasswords())
- #remove already supplied pws from list (only local)
- for pw in passwords:
- if pw in pwlist:
- pwlist.remove(pw)
-
- for pw in passwords + pwlist:
- try:
- self.logDebug("Try password: %s" % pw)
- if plugin.checkPassword(pw):
- plugin.extract(progress, pw)
- self.addPassword(pw)
- success = True
- break
- except WrongPassword:
- self.logDebug("Password was wrong")
-
- if not success:
- self.logError(basename(plugin.file), _("Wrong password"))
- return []
-
- if self.core.debug:
- self.logDebug("Would delete: %s" % ", ".join(plugin.getDeleteFiles()))
-
- if self.getConfig("deletearchive"):
- files = plugin.getDeleteFiles()
- self.logInfo(_("Deleting %s files") % len(files))
- for f in files:
- if exists(f):
- remove(f)
- else:
- self.logDebug("%s does not exists" % f)
-
- self.logInfo(basename(plugin.file), _("Extracting finished"))
- self.manager.dispatchEvent("unrarFinished", plugin.out, plugin.file)
-
- return plugin.getExtractedFiles()
-
- except ArchiveError, e:
- self.logError(basename(plugin.file), _("Archive Error"), str(e))
- except CRCError:
- self.logError(basename(plugin.file), _("CRC Mismatch"))
- except Exception, e:
- if self.core.debug:
- print_exc()
- self.logError(basename(plugin.file), _("Unknown Error"), str(e))
-
- return []
-
- @Expose
- def getPasswords(self):
- """ List of saved passwords """
- return self.passwords
-
- def reloadPasswords(self):
- pwfile = self.getConfig("passwordfile")
- if not exists(pwfile):
- open(pwfile, "wb").close()
-
- passwords = []
- f = open(pwfile, "rb")
- for pw in f.read().splitlines():
- passwords.append(pw)
- f.close()
-
- self.passwords = passwords
-
- @Expose
- def addPassword(self, pw):
- """ Adds a password to saved list"""
- pwfile = self.getConfig("passwordfile")
-
- if pw in self.passwords:
- self.passwords.remove(pw)
- self.passwords.insert(0, pw)
-
- f = open(pwfile, "wb")
- for pw in self.passwords:
- f.write(pw + "\n")
- f.close()
-
- def setPermissions(self, files):
- for f in files:
- if not exists(f):
- continue
- try:
- if self.config['permission']['change_file']:
- if isfile(f):
- chmod(f, int(self.config['permission']['file'], 8))
- elif isdir(f):
- chmod(f, int(self.config['permission']['folder'], 8))
-
- if self.config['permission']['change_dl'] and os.name != "nt":
- uid = getpwnam(self.config['permission']['user'])[2]
- gid = getgrnam(self.config['permission']['group'])[2]
- chown(f, uid, gid)
- except Exception, e:
- self.logWarning(_("Setting User and Group failed"), e)
diff --git a/module/plugins/hooks/FastixRu.py b/module/plugins/hooks/FastixRu.py
deleted file mode 100644
index 879dba277..000000000
--- a/module/plugins/hooks/FastixRu.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class FastixRu(MultiHoster):
- __name__ = "FastixRu"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Fastix.ru hook plugin"""
- __author_name__ = "Massimo Rosamilia"
- __author_mail__ = "max@spiritix.eu"
-
-
- def getHoster(self):
- page = getURL(
- "http://fastix.ru/api_v2/?apikey=5182964c3f8f9a7f0b00000a_kelmFB4n1IrnCDYuIFn2y&sub=allowed_sources")
- host_list = json_loads(page)
- host_list = host_list['allow']
- return host_list
diff --git a/module/plugins/hooks/FreeWayMe.py b/module/plugins/hooks/FreeWayMe.py
deleted file mode 100644
index 12d58ac8a..000000000
--- a/module/plugins/hooks/FreeWayMe.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class FreeWayMe(MultiHoster):
- __name__ = "FreeWayMe"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """FreeWay.me hook plugin"""
- __author_name__ = "Nicolas Giese"
- __author_mail__ = "james@free-way.me"
-
-
- def getHoster(self):
- hostis = getURL("https://www.free-way.me/ajax/jd.php", get={"id": 3}).replace("\"", "").strip()
- self.logDebug("hosters: %s" % hostis)
- return [x.strip() for x in hostis.split(",") if x.strip()]
diff --git a/module/plugins/hooks/HotFolder.py b/module/plugins/hooks/HotFolder.py
deleted file mode 100644
index 4c81292e3..000000000
--- a/module/plugins/hooks/HotFolder.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import time
-
-from os import listdir, makedirs
-from os.path import exists, isfile, join
-from shutil import move
-
-from module.plugins.Hook import Hook
-
-
-class HotFolder(Hook):
- __name__ = "HotFolder"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("folder", "str", "Folder to observe", "container"),
- ("watch_file", "bool", "Observe link file", False),
- ("keep", "bool", "Keep added containers", True),
- ("file", "str", "Link file", "links.txt")]
-
- __description__ = """Observe folder and file for changes and add container and links"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.de"
-
-
- def setup(self):
- self.interval = 10
-
- def periodical(self):
- if not exists(join(self.getConfig("folder"), "finished")):
- makedirs(join(self.getConfig("folder"), "finished"))
-
- if self.getConfig("watch_file"):
-
- if not exists(self.getConfig("file")):
- f = open(self.getConfig("file"), "wb")
- f.close()
-
- f = open(self.getConfig("file"), "rb")
- content = f.read().strip()
- f.close()
- f = open(self.getConfig("file"), "wb")
- f.close()
- if content:
- name = "%s_%s.txt" % (self.getConfig("file"), time.strftime("%H-%M-%S_%d%b%Y"))
-
- f = open(join(self.getConfig("folder"), "finished", name), "wb")
- f.write(content)
- f.close()
-
- self.core.api.addPackage(f.name, [f.name], 1)
-
- for f in listdir(self.getConfig("folder")):
- path = join(self.getConfig("folder"), f)
-
- if not isfile(path) or f.endswith("~") or f.startswith("#") or f.startswith("."):
- continue
-
- newpath = join(self.getConfig("folder"), "finished", f if self.getConfig("keep") else "tmp_" + f)
- move(path, newpath)
-
- self.logInfo(_("Added %s from HotFolder") % f)
- self.core.api.addPackage(f, [newpath], 1)
diff --git a/module/plugins/hooks/IRCInterface.py b/module/plugins/hooks/IRCInterface.py
deleted file mode 100644
index 7ebc0275f..000000000
--- a/module/plugins/hooks/IRCInterface.py
+++ /dev/null
@@ -1,404 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import socket
-import time
-
-from pycurl import FORM_FILE
-from select import select
-from threading import Thread
-from time import sleep
-from traceback import print_exc
-
-from module.Api import PackageDoesNotExists, FileDoesNotExists
-from module.network.RequestFactory import getURL
-from module.plugins.Hook import Hook
-from module.utils import formatSize
-
-
-class IRCInterface(Thread, Hook):
- __name__ = "IRCInterface"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("host", "str", "IRC-Server Address", "Enter your server here!"),
- ("port", "int", "IRC-Server Port", 6667),
- ("ident", "str", "Clients ident", "pyload-irc"),
- ("realname", "str", "Realname", "pyload-irc"),
- ("nick", "str", "Nickname the Client will take", "pyLoad-IRC"),
- ("owner", "str", "Nickname the Client will accept commands from", "Enter your nick here!"),
- ("info_file", "bool", "Inform about every file finished", False),
- ("info_pack", "bool", "Inform about every package finished", True),
- ("captcha", "bool", "Send captcha requests", True)]
-
- __description__ = """Connect to irc and let owner perform different tasks"""
- __author_name__ = "Jeix"
- __author_mail__ = "Jeix@hasnomail.com"
-
-
- def __init__(self, core, manager):
- Thread.__init__(self)
- Hook.__init__(self, core, manager)
- self.setDaemon(True)
- # self.sm = core.server_methods
- self.api = core.api # todo, only use api
-
- def coreReady(self):
- self.abort = False
- self.more = []
- self.new_package = {}
-
- self.start()
-
- def packageFinished(self, pypack):
- try:
- if self.getConfig("info_pack"):
- self.response(_("Package finished: %s") % pypack.name)
- except:
- pass
-
- def downloadFinished(self, pyfile):
- try:
- if self.getConfig("info_file"):
- self.response(
- _("Download finished: %(name)s @ %(plugin)s ") % {"name": pyfile.name, "plugin": pyfile.pluginname})
- except:
- pass
-
- def newCaptchaTask(self, task):
- if self.getConfig("captcha") and task.isTextual():
- task.handler.append(self)
- task.setWaiting(60)
-
- page = getURL("http://www.freeimagehosting.net/upload.php",
- post={"attached": (FORM_FILE, task.captchaFile)}, multipart=True)
-
- url = re.search(r"\[img\]([^\[]+)\[/img\]\[/url\]", page).group(1)
- self.response(_("New Captcha Request: %s") % url)
- self.response(_("Answer with 'c %s text on the captcha'") % task.id)
-
- def run(self):
- # connect to IRC etc.
- self.sock = socket.socket()
- host = self.getConfig("host")
- self.sock.connect((host, self.getConfig("port")))
- nick = self.getConfig("nick")
- self.sock.send("NICK %s\r\n" % nick)
- self.sock.send("USER %s %s bla :%s\r\n" % (nick, host, nick))
- for t in self.getConfig("owner").split():
- if t.strip().startswith("#"):
- self.sock.send("JOIN %s\r\n" % t.strip())
- self.logInfo("pyLoad IRC: Connected to %s!" % host)
- self.logInfo("pyLoad IRC: Switching to listening mode!")
- try:
- self.main_loop()
-
- except IRCError, ex:
- self.sock.send("QUIT :byebye\r\n")
- print_exc()
- self.sock.close()
-
- def main_loop(self):
- readbuffer = ""
- while True:
- sleep(1)
- fdset = select([self.sock], [], [], 0)
- if self.sock not in fdset[0]:
- continue
-
- if self.abort:
- raise IRCError("quit")
-
- readbuffer += self.sock.recv(1024)
- temp = readbuffer.split("\n")
- readbuffer = temp.pop()
-
- for line in temp:
- line = line.rstrip()
- first = line.split()
-
- if first[0] == "PING":
- self.sock.send("PONG %s\r\n" % first[1])
-
- if first[0] == "ERROR":
- raise IRCError(line)
-
- msg = line.split(None, 3)
- if len(msg) < 4:
- continue
-
- msg = {
- "origin": msg[0][1:],
- "action": msg[1],
- "target": msg[2],
- "text": msg[3][1:]
- }
-
- self.handle_events(msg)
-
- def handle_events(self, msg):
- if not msg['origin'].split("!", 1)[0] in self.getConfig("owner").split():
- return
-
- if msg['target'].split("!", 1)[0] != self.getConfig("nick"):
- return
-
- if msg['action'] != "PRIVMSG":
- return
-
- # HANDLE CTCP ANTI FLOOD/BOT PROTECTION
- if msg['text'] == "\x01VERSION\x01":
- self.logDebug("Sending CTCP VERSION.")
- self.sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
- return
- elif msg['text'] == "\x01TIME\x01":
- self.logDebug("Sending CTCP TIME.")
- self.sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time()))
- return
- elif msg['text'] == "\x01LAG\x01":
- self.logDebug("Received CTCP LAG.") # don't know how to answer
- return
-
- trigger = "pass"
- args = None
-
- try:
- temp = msg['text'].split()
- trigger = temp[0]
- if len(temp) > 1:
- args = temp[1:]
- except:
- pass
-
- handler = getattr(self, "event_%s" % trigger, self.event_pass)
- try:
- res = handler(args)
- for line in res:
- self.response(line, msg['origin'])
- except Exception, e:
- self.logError("pyLoad IRC: " + repr(e))
-
- def response(self, msg, origin=""):
- if origin == "":
- for t in self.getConfig("owner").split():
- self.sock.send("PRIVMSG %s :%s\r\n" % (t.strip(), msg))
- else:
- self.sock.send("PRIVMSG %s :%s\r\n" % (origin.split("!", 1)[0], msg))
-
- #### Events
-
- def event_pass(self, args):
- return []
-
- def event_status(self, args):
- downloads = self.api.statusDownloads()
- if not downloads:
- return ["INFO: There are no active downloads currently."]
-
- temp_progress = ""
- lines = ["ID - Name - Status - Speed - ETA - Progress"]
- for data in downloads:
-
- if data.status == 5:
- temp_progress = data.format_wait
- else:
- temp_progress = "%d%% (%s)" % (data.percent, data.format_size)
-
- lines.append("#%d - %s - %s - %s - %s - %s" %
- (
- data.fid,
- data.name,
- data.statusmsg,
- "%s/s" % formatSize(data.speed),
- "%s" % data.format_eta,
- temp_progress
- ))
- return lines
-
- def event_queue(self, args):
- ps = self.api.getQueueData()
-
- if not ps:
- return ["INFO: There are no packages in queue."]
-
- lines = []
- for pack in ps:
- lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links)))
-
- return lines
-
- def event_collector(self, args):
- ps = self.api.getCollectorData()
- if not ps:
- return ["INFO: No packages in collector!"]
-
- lines = []
- for pack in ps:
- lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links)))
-
- return lines
-
- def event_info(self, args):
- if not args:
- return ["ERROR: Use info like this: info <id>"]
-
- info = None
- try:
- info = self.api.getFileData(int(args[0]))
-
- except FileDoesNotExists:
- return ["ERROR: Link doesn't exists."]
-
- return ['LINK #%s: %s (%s) [%s][%s]' % (info.fid, info.name, info.format_size, info.statusmsg, info.plugin)]
-
- def event_packinfo(self, args):
- if not args:
- return ["ERROR: Use packinfo like this: packinfo <id>"]
-
- lines = []
- pack = None
- try:
- pack = self.api.getPackageData(int(args[0]))
-
- except PackageDoesNotExists:
- return ["ERROR: Package doesn't exists."]
-
- id = args[0]
-
- self.more = []
-
- lines.append('PACKAGE #%s: "%s" with %d links' % (id, pack.name, len(pack.links)))
- for pyfile in pack.links:
- self.more.append('LINK #%s: %s (%s) [%s][%s]' % (pyfile.fid, pyfile.name, pyfile.format_size,
- pyfile.statusmsg, pyfile.plugin))
-
- if len(self.more) < 6:
- lines.extend(self.more)
- self.more = []
- else:
- lines.extend(self.more[:6])
- self.more = self.more[6:]
- lines.append("%d more links do display." % len(self.more))
-
- return lines
-
- def event_more(self, args):
- if not self.more:
- return ["No more information to display."]
-
- lines = self.more[:6]
- self.more = self.more[6:]
- lines.append("%d more links do display." % len(self.more))
-
- return lines
-
- def event_start(self, args):
- self.api.unpauseServer()
- return ["INFO: Starting downloads."]
-
- def event_stop(self, args):
- self.api.pauseServer()
- return ["INFO: No new downloads will be started."]
-
- def event_add(self, args):
- if len(args) < 2:
- return ['ERROR: Add links like this: "add <packagename|id> links". ',
- "This will add the link <link> to to the package <package> / the package with id <id>!"]
-
- pack = args[0].strip()
- links = [x.strip() for x in args[1:]]
-
- count_added = 0
- count_failed = 0
- try:
- id = int(pack)
- pack = self.api.getPackageData(id)
- if not pack:
- return ["ERROR: Package doesn't exists."]
-
- #TODO add links
-
- return ["INFO: Added %d links to Package %s [#%d]" % (len(links), pack['name'], id)]
-
- except:
- # create new package
- id = self.api.addPackage(pack, links, 1)
- return ["INFO: Created new Package %s [#%d] with %d links." % (pack, id, len(links))]
-
- def event_del(self, args):
- if len(args) < 2:
- return ["ERROR: Use del command like this: del -p|-l <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"]
-
- if args[0] == "-p":
- ret = self.api.deletePackages(map(int, args[1:]))
- return ["INFO: Deleted %d packages!" % len(args[1:])]
-
- elif args[0] == "-l":
- ret = self.api.delLinks(map(int, args[1:]))
- return ["INFO: Deleted %d links!" % len(args[1:])]
-
- else:
- return ["ERROR: Use del command like this: del <-p|-l> <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"]
-
- def event_push(self, args):
- if not args:
- return ["ERROR: Push package to queue like this: push <package id>"]
-
- id = int(args[0])
- try:
- info = self.api.getPackageInfo(id)
- except PackageDoesNotExists:
- return ["ERROR: Package #%d does not exist." % id]
-
- self.api.pushToQueue(id)
- return ["INFO: Pushed package #%d to queue." % id]
-
- def event_pull(self, args):
- if not args:
- return ["ERROR: Pull package from queue like this: pull <package id>."]
-
- id = int(args[0])
- if not self.api.getPackageData(id):
- return ["ERROR: Package #%d does not exist." % id]
-
- self.api.pullFromQueue(id)
- return ["INFO: Pulled package #%d from queue to collector." % id]
-
- def event_c(self, args):
- """ captcha answer """
- if not args:
- return ["ERROR: Captcha ID missing."]
-
- task = self.core.captchaManager.getTaskByID(args[0])
- if not task:
- return ["ERROR: Captcha Task with ID %s does not exists." % args[0]]
-
- task.setResult(" ".join(args[1:]))
- return ["INFO: Result %s saved." % " ".join(args[1:])]
-
- def event_help(self, args):
- lines = ["The following commands are available:",
- "add <package|packid> <links> [...] Adds link to package. (creates new package if it does not exist)",
- "queue Shows all packages in the queue",
- "collector Shows all packages in collector",
- "del -p|-l <id> [...] Deletes all packages|links with the ids specified",
- "info <id> Shows info of the link with id <id>",
- "packinfo <id> Shows info of the package with id <id>",
- "more Shows more info when the result was truncated",
- "start Starts all downloads",
- "stop Stops the download (but not abort active downloads)",
- "push <id> Push package to queue",
- "pull <id> Pull package from queue",
- "status Show general download status",
- "help Shows this help message"]
- return lines
-
-
-class IRCError(Exception):
-
- def __init__(self, value):
- self.value = value
-
- def __str__(self):
- return repr(self.value)
diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py
deleted file mode 100644
index d9d4e547e..000000000
--- a/module/plugins/hooks/ImageTyperz.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import re
-
-from base64 import b64encode
-from pycurl import FORM_FILE, LOW_SPEED_TIME
-from thread import start_new_thread
-
-from module.network.RequestFactory import getURL, getRequest
-from module.plugins.Hook import Hook
-
-
-class ImageTyperzException(Exception):
-
- def __init__(self, err):
- self.err = err
-
- def getCode(self):
- return self.err
-
- def __str__(self):
- return "<ImageTyperzException %s>" % self.err
-
- def __repr__(self):
- return "<ImageTyperzException %s>" % self.err
-
-
-class ImageTyperz(Hook):
- __name__ = "ImageTyperz"
- __type__ = "hook"
- __version__ = "0.04"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("username", "str", "Username", ""),
- ("passkey", "password", "Password", ""),
- ("force", "bool", "Force IT even if client is connected", False)]
-
- __description__ = """Send captchas to ImageTyperz.com"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- SUBMIT_URL = "http://captchatypers.com/Forms/UploadFileAndGetTextNEW.ashx"
- RESPOND_URL = "http://captchatypers.com/Forms/SetBadImage.ashx"
- GETCREDITS_URL = "http://captchatypers.com/Forms/RequestBalance.ashx"
-
-
- def setup(self):
- self.info = {}
-
- def getCredits(self):
- response = getURL(self.GETCREDITS_URL, post={"action": "REQUESTBALANCE", "username": self.getConfig("username"),
- "password": self.getConfig("passkey")})
-
- if response.startswith('ERROR'):
- raise ImageTyperzException(response)
-
- try:
- balance = float(response)
- except:
- raise ImageTyperzException("invalid response")
-
- self.logInfo("Account balance: $%s left" % response)
- return balance
-
- def submit(self, captcha, captchaType="file", match=None):
- req = getRequest()
- #raise timeout threshold
- req.c.setopt(LOW_SPEED_TIME, 80)
-
- try:
- #workaround multipart-post bug in HTTPRequest.py
- if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")):
- multipart = True
- data = (FORM_FILE, captcha)
- else:
- multipart = False
- with open(captcha, 'rb') as f:
- data = f.read()
- data = b64encode(data)
-
- response = req.load(self.SUBMIT_URL, post={"action": "UPLOADCAPTCHA",
- "username": self.getConfig("username"),
- "password": self.getConfig("passkey"), "file": data},
- multipart=multipart)
- finally:
- req.close()
-
- if response.startswith("ERROR"):
- raise ImageTyperzException(response)
- else:
- data = response.split('|')
- if len(data) == 2:
- ticket, result = data
- else:
- raise ImageTyperzException("Unknown response %s" % response)
-
- return ticket, result
-
- def newCaptchaTask(self, task):
- if "service" in task.data:
- return False
-
- if not task.isTextual():
- return False
-
- if not self.getConfig("username") or not self.getConfig("passkey"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if self.getCredits() > 0:
- task.handler.append(self)
- task.data['service'] = self.__name__
- task.setWaiting(100)
- start_new_thread(self.processCaptcha, (task,))
-
- else:
- self.logInfo("Your %s account has not enough credits" % self.__name__)
-
- def captchaInvalid(self, task):
- if task.data['service'] == self.__name__ and "ticket" in task.data:
- response = getURL(self.RESPOND_URL, post={"action": "SETBADIMAGE", "username": self.getConfig("username"),
- "password": self.getConfig("passkey"),
- "imageid": task.data['ticket']})
-
- if response == "SUCCESS":
- self.logInfo("Bad captcha solution received, requested refund")
- else:
- self.logError("Bad captcha solution received, refund request failed", response)
-
- def processCaptcha(self, task):
- c = task.captchaFile
- try:
- ticket, result = self.submit(c)
- except ImageTyperzException, e:
- task.error = e.getCode()
- return
-
- task.data['ticket'] = ticket
- task.setResult(result)
diff --git a/module/plugins/hooks/LinkdecrypterCom.py b/module/plugins/hooks/LinkdecrypterCom.py
deleted file mode 100644
index 1aa8f7ca1..000000000
--- a/module/plugins/hooks/LinkdecrypterCom.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hook import Hook
-from module.utils import remove_chars
-
-
-class LinkdecrypterCom(Hook):
- __name__ = "LinkdecrypterCom"
- __type__ = "hook"
- __version__ = "0.19"
-
- __config__ = [("activated", "bool", "Activated", False)]
-
- __description__ = """Linkdecrypter.com hook plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def coreReady(self):
- try:
- self.loadPatterns()
- except Exception, e:
- self.logError(e)
-
- def loadPatterns(self):
- page = getURL("http://linkdecrypter.com/")
- m = re.search(r'<b>Supported\(\d+\)</b>: <i>([^+<]*)', page)
- if m is None:
- self.logError(_("Crypter list not found"))
- return
-
- builtin = [name.lower() for name in self.core.pluginManager.crypterPlugins.keys()]
- builtin.append("downloadserienjunkiesorg")
-
- crypter_pattern = re.compile("(\w[\w.-]+)")
- online = []
- for crypter in m.group(1).split(', '):
- m = re.match(crypter_pattern, crypter)
- if m and remove_chars(m.group(1), "-.") not in builtin:
- online.append(m.group(1).replace(".", "\\."))
-
- if not online:
- self.logError(_("Crypter list is empty"))
- return
-
- regexp = r"https?://([^.]+\.)*?(%s)/.*" % "|".join(online)
-
- dict = self.core.pluginManager.crypterPlugins[self.__name__]
- dict['pattern'] = regexp
- dict['re'] = re.compile(regexp)
-
- self.logDebug("REGEXP: " + regexp)
diff --git a/module/plugins/hooks/LinksnappyCom.py b/module/plugins/hooks/LinksnappyCom.py
deleted file mode 100644
index 20da68632..000000000
--- a/module/plugins/hooks/LinksnappyCom.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class LinksnappyCom(MultiHoster):
- __name__ = "LinksnappyCom"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Linksnappy.com hook plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def getHoster(self):
- json_data = getURL('http://gen.linksnappy.com/lseAPI.php?act=FILEHOSTS')
- json_data = json_loads(json_data)
-
- return json_data['return'].keys()
diff --git a/module/plugins/hooks/MegaDebridEu.py b/module/plugins/hooks/MegaDebridEu.py
deleted file mode 100644
index 605b04f21..000000000
--- a/module/plugins/hooks/MegaDebridEu.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class MegaDebridEu(MultiHoster):
- __name__ = "MegaDebridEu"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False)]
-
- __description__ = """mega-debrid.eu hook plugin"""
- __author_name__ = "D.Ducatel"
- __author_mail__ = "dducatel@je-geek.fr"
-
-
- def getHoster(self):
- reponse = getURL('http://www.mega-debrid.eu/api.php?action=getHosters')
- json_data = json_loads(reponse)
-
- if json_data['response_code'] == "ok":
- host_list = [element[0] for element in json_data['hosters']]
- else:
- self.logError("Unable to retrieve hoster list")
- host_list = list()
-
- return host_list
diff --git a/module/plugins/hooks/MergeFiles.py b/module/plugins/hooks/MergeFiles.py
deleted file mode 100644
index ad1de7e6a..000000000
--- a/module/plugins/hooks/MergeFiles.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import re
-import traceback
-
-from module.plugins.Hook import Hook, threaded
-from module.utils import safe_join, fs_encode
-
-
-class MergeFiles(Hook):
- __name__ = "MergeFiles"
- __type__ = "hook"
- __version__ = "0.12"
-
- __config__ = [("activated", "bool", "Activated", False)]
-
- __description__ = """Merges parts splitted with hjsplit"""
- __author_name__ = "and9000"
- __author_mail__ = "me@has-no-mail.com"
-
- BUFFER_SIZE = 4096
-
-
- def setup(self):
- # nothing to do
- pass
-
- @threaded
- def packageFinished(self, pack):
- files = {}
- fid_dict = {}
- for fid, data in pack.getChildren().iteritems():
- if re.search("\.[0-9]{3}$", data['name']):
- if data['name'][:-4] not in files:
- files[data['name'][:-4]] = []
- files[data['name'][:-4]].append(data['name'])
- files[data['name'][:-4]].sort()
- fid_dict[data['name']] = fid
-
- download_folder = self.config['general']['download_folder']
-
- if self.config['general']['folder_per_package']:
- download_folder = safe_join(download_folder, pack.folder)
-
- for name, file_list in files.iteritems():
- self.logInfo("Starting merging of %s" % name)
- final_file = open(safe_join(download_folder, name), "wb")
-
- for splitted_file in file_list:
- self.logDebug("Merging part %s" % splitted_file)
- pyfile = self.core.files.getFile(fid_dict[splitted_file])
- pyfile.setStatus("processing")
- try:
- s_file = open(os.path.join(download_folder, splitted_file), "rb")
- size_written = 0
- s_file_size = int(os.path.getsize(os.path.join(download_folder, splitted_file)))
- while True:
- f_buffer = s_file.read(self.BUFFER_SIZE)
- if f_buffer:
- final_file.write(f_buffer)
- size_written += self.BUFFER_SIZE
- pyfile.setProgress((size_written * 100) / s_file_size)
- else:
- break
- s_file.close()
- self.logDebug("Finished merging part %s" % splitted_file)
- except Exception, e:
- print traceback.print_exc()
- finally:
- pyfile.setProgress(100)
- pyfile.setStatus("finished")
- pyfile.release()
-
- final_file.close()
- self.logInfo("Finished merging of %s" % name)
diff --git a/module/plugins/hooks/MultiDebridCom.py b/module/plugins/hooks/MultiDebridCom.py
deleted file mode 100644
index c5d1464f8..000000000
--- a/module/plugins/hooks/MultiDebridCom.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class MultiDebridCom(MultiHoster):
- __name__ = "MultiDebridCom"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Multi-debrid.com hook plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def getHoster(self):
- json_data = getURL('http://multi-debrid.com/api.php?hosts', decode=True)
- self.logDebug('JSON data: ' + json_data)
- json_data = json_loads(json_data)
-
- return json_data['hosts']
diff --git a/module/plugins/hooks/MultiHome.py b/module/plugins/hooks/MultiHome.py
deleted file mode 100644
index e2167b65e..000000000
--- a/module/plugins/hooks/MultiHome.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time
-
-from module.plugins.Hook import Hook
-
-
-class MultiHome(Hook):
- __name__ = "MultiHome"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("interfaces", "str", "Interfaces", "None")]
-
- __description__ = """Ip address changer"""
- __author_name__ = "mkaay"
- __author_mail__ = "mkaay@mkaay.de"
-
-
- def setup(self):
- self.register = {}
- self.interfaces = []
- self.parseInterfaces(self.getConfig("interfaces").split(";"))
- if not self.interfaces:
- self.parseInterfaces([self.config['download']['interface']])
- self.setConfig("interfaces", self.toConfig())
-
- def toConfig(self):
- return ";".join([i.adress for i in self.interfaces])
-
- def parseInterfaces(self, interfaces):
- for interface in interfaces:
- if not interface or str(interface).lower() == "none":
- continue
- self.interfaces.append(Interface(interface))
-
- def coreReady(self):
- requestFactory = self.core.requestFactory
- oldGetRequest = requestFactory.getRequest
-
- def getRequest(pluginName, account=None):
- iface = self.bestInterface(pluginName, account)
- if iface:
- iface.useFor(pluginName, account)
- requestFactory.iface = lambda: iface.adress
- self.logDebug("Multihome: using address: " + iface.adress)
- return oldGetRequest(pluginName, account)
-
- requestFactory.getRequest = getRequest
-
- def bestInterface(self, pluginName, account):
- best = None
- for interface in self.interfaces:
- if not best or interface.lastPluginAccess(pluginName, account) < best.lastPluginAccess(pluginName, account):
- best = interface
- return best
-
-
-class Interface(object):
-
- def __init__(self, adress):
- self.adress = adress
- self.history = {}
-
- def lastPluginAccess(self, pluginName, account):
- if (pluginName, account) in self.history:
- return self.history[(pluginName, account)]
- return 0
-
- def useFor(self, pluginName, account):
- self.history[(pluginName, account)] = time()
-
- def __repr__(self):
- return "<Interface - %s>" % self.adress
diff --git a/module/plugins/hooks/MultishareCz.py b/module/plugins/hooks/MultishareCz.py
deleted file mode 100644
index 9249106d6..000000000
--- a/module/plugins/hooks/MultishareCz.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class MultishareCz(MultiHoster):
- __name__ = "MultishareCz"
- __type__ = "hook"
- __version__ = "0.04"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "uloz.to")]
-
- __description__ = """MultiShare.cz hook plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_PATTERN = r'<img class="logo-shareserveru"[^>]*?alt="([^"]+)"></td>\s*<td class="stav">[^>]*?alt="OK"'
-
-
- def getHoster(self):
- page = getURL("http://www.multishare.cz/monitoring/")
- return re.findall(self.HOSTER_PATTERN, page)
diff --git a/module/plugins/hooks/OverLoadMe.py b/module/plugins/hooks/OverLoadMe.py
deleted file mode 100644
index 5be0b8482..000000000
--- a/module/plugins/hooks/OverLoadMe.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class OverLoadMe(MultiHoster):
- __name__ = "OverLoadMe"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("https", "bool", "Enable HTTPS", True),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 12)]
-
- __description__ = """Over-Load.me hook plugin"""
- __author_name__ = "marley"
- __author_mail__ = "marley@over-load.me"
-
-
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://api.over-load.me/hoster.php",
- get={"auth": "0001-cb1f24dadb3aa487bda5afd3b76298935329be7700cd7-5329be77-00cf-1ca0135f"}
- ).replace("\"", "").strip()
- self.logDebug("Hosterlist: %s" % page)
-
- return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/module/plugins/hooks/Premium4Me.py b/module/plugins/hooks/Premium4Me.py
deleted file mode 100644
index 9c6701b06..000000000
--- a/module/plugins/hooks/Premium4Me.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class Premium4Me(MultiHoster):
- __name__ = "Premium4Me"
- __type__ = "hook"
- __version__ = "0.03"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
-
- __description__ = """Premium.to hook plugin"""
- __author_name__ = ("RaNaN", "zoidberg", "stickell")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
- def getHoster(self):
- page = getURL("http://premium.to/api/hosters.php?authcode=%s" % self.account.authcode)
- return [x.strip() for x in page.replace("\"", "").split(";")]
-
- def coreReady(self):
- self.account = self.core.accountManager.getAccountPlugin("Premium4Me")
-
- user = self.account.selectAccount()[0]
-
- if not user:
- self.logError(_("Please add your premium.to account first and restart pyLoad"))
- return
-
- return MultiHoster.coreReady(self)
diff --git a/module/plugins/hooks/PremiumizeMe.py b/module/plugins/hooks/PremiumizeMe.py
deleted file mode 100644
index e7291ece9..000000000
--- a/module/plugins/hooks/PremiumizeMe.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class PremiumizeMe(MultiHoster):
- __name__ = "PremiumizeMe"
- __type__ = "hook"
- __version__ = "0.12"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Premiumize.me hook plugin"""
- __author_name__ = "Florian Franzen"
- __author_mail__ = "FlorianFranzen@gmail.com"
-
-
- def getHoster(self):
- # If no accounts are available there will be no hosters available
- if not self.account or not self.account.canUse():
- return []
-
- # Get account data
- (user, data) = self.account.selectAccount()
-
- # Get supported hosters list from premiumize.me using the
- # json API v1 (see https://secure.premiumize.me/?show=api)
- answer = getURL("https://api.premiumize.me/pm-api/v1.php?method=hosterlist&params[login]=%s&params[pass]=%s" % (
- user, data['password']))
- data = json_loads(answer)
-
- # If account is not valid thera are no hosters available
- if data['status'] != 200:
- return []
-
- # Extract hosters from json file
- return data['result']['hosterlist']
-
- def coreReady(self):
- # Get account plugin and check if there is a valid account available
- self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe")
- if not self.account.canUse():
- self.account = None
- self.logError(_("Please add a valid premiumize.me account first and restart pyLoad."))
- return
-
- # Run the overwriten core ready which actually enables the multihoster hook
- return MultiHoster.coreReady(self)
diff --git a/module/plugins/hooks/RPNetBiz.py b/module/plugins/hooks/RPNetBiz.py
deleted file mode 100644
index 9b9b7cda9..000000000
--- a/module/plugins/hooks/RPNetBiz.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class RPNetBiz(MultiHoster):
- __name__ = "RPNetBiz"
- __type__ = "hook"
- __version__ = "0.1"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """RPNet.biz hook plugin"""
- __author_name__ = "Dman"
- __author_mail__ = "dmanugm@gmail.com"
-
-
- def getHoster(self):
- # No hosts supported if no account
- if not self.account or not self.account.canUse():
- return []
-
- # Get account data
- (user, data) = self.account.selectAccount()
-
- response = getURL("https://premium.rpnet.biz/client_api.php",
- get={"username": user, "password": data['password'], "action": "showHosterList"})
- hoster_list = json_loads(response)
-
- # If account is not valid thera are no hosters available
- if 'error' in hoster_list:
- return []
-
- # Extract hosters from json file
- return hoster_list['hosters']
-
- def coreReady(self):
- # Get account plugin and check if there is a valid account available
- self.account = self.core.accountManager.getAccountPlugin("RPNetBiz")
- if not self.account.canUse():
- self.account = None
- self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet")
- return
-
- # Run the overwriten core ready which actually enables the multihoster hook
- return MultiHoster.coreReady(self)
diff --git a/module/plugins/hooks/RealdebridCom.py b/module/plugins/hooks/RealdebridCom.py
deleted file mode 100644
index 87902ac7f..000000000
--- a/module/plugins/hooks/RealdebridCom.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class RealdebridCom(MultiHoster):
- __name__ = "RealdebridCom"
- __type__ = "hook"
- __version__ = "0.43"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("https", "bool", "Enable HTTPS", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Real-Debrid.com hook plugin"""
- __author_name__ = "Devirex Hazzard"
- __author_mail__ = "naibaf_11@yahoo.de"
-
-
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip()
-
- return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/module/plugins/hooks/RehostTo.py b/module/plugins/hooks/RehostTo.py
deleted file mode 100644
index d504bb83b..000000000
--- a/module/plugins/hooks/RehostTo.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class RehostTo(MultiHoster):
- __name__ = "RehostTo"
- __type__ = "hook"
- __version__ = "0.43"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
-
- __description__ = """Rehost.to hook plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def getHoster(self):
- page = getURL("http://rehost.to/api.php?cmd=get_supported_och_dl&long_ses=%s" % self.long_ses)
- return [x.strip() for x in page.replace("\"", "").split(",")]
-
- def coreReady(self):
- self.account = self.core.accountManager.getAccountPlugin("RehostTo")
-
- user = self.account.selectAccount()[0]
-
- if not user:
- self.logError("Rehost.to: " + _("Please add your rehost.to account first and restart pyLoad"))
- return
-
- data = self.account.getAccountInfo(user)
- self.ses = data['ses']
- self.long_ses = data['long_ses']
-
- return MultiHoster.coreReady(self)
diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py
deleted file mode 100644
index 3aef6f8cd..000000000
--- a/module/plugins/hooks/RestartFailed.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Hook import Hook
-
-
-class RestartFailed(Hook):
- __name__ = "RestartFailed"
- __type__ = "hook"
- __version__ = "1.55"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("interval", "int", "Check interval in minutes", 90)]
-
- __description__ = """Periodically restart all failed downloads in queue"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- MIN_INTERVAL = 15 * 60 #: 15m minimum check interval (value is in seconds)
-
- event_list = ["pluginConfigChanged"]
-
-
- def pluginConfigChanged(self, plugin, name, value):
- if name == "interval":
- interval = value * 60
- if self.MIN_INTERVAL <= interval != self.interval:
- self.core.scheduler.removeJob(self.cb)
- self.interval = interval
- self.initPeriodical()
- else:
- self.logDebug("Invalid interval value, kept current")
-
- def periodical(self):
- self.logInfo("Restart failed downloads")
- self.api.restartFailed()
-
- def setup(self):
- self.api = self.core.api
- self.interval = self.MIN_INTERVAL
-
- def coreReady(self):
- self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval"))
diff --git a/module/plugins/hooks/SimplyPremiumCom.py b/module/plugins/hooks/SimplyPremiumCom.py
deleted file mode 100644
index a946d391e..000000000
--- a/module/plugins/hooks/SimplyPremiumCom.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class SimplyPremiumCom(MultiHoster):
- __name__ = "SimplyPremiumCom"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", "False"),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", "False"),
- ("interval", "int", "Reload interval in hours (0 to disable)", "24")]
-
- __description__ = """Simply-Premium.com hook plugin"""
- __author_name__ = "EvolutionClip"
- __author_mail__ = "evolutionclip@live.de"
-
-
- def getHoster(self):
- json_data = getURL('http://www.simply-premium.com/api/hosts.php?format=json&online=1')
- json_data = json_loads(json_data)
-
- host_list = [element['regex'] for element in json_data['result']]
-
- return host_list
diff --git a/module/plugins/hooks/SimplydebridCom.py b/module/plugins/hooks/SimplydebridCom.py
deleted file mode 100644
index ab13f312e..000000000
--- a/module/plugins/hooks/SimplydebridCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class SimplydebridCom(MultiHoster):
- __name__ = "SimplydebridCom"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
-
- __description__ = """Simply-Debrid.com hook plugin"""
- __author_name__ = "Kagenoshin"
- __author_mail__ = "kagenoshin@gmx.ch"
-
-
- def getHoster(self):
- page = getURL("http://simply-debrid.com/api.php?list=1")
- return [x.strip() for x in page.rstrip(';').replace("\"", "").split(";")]
diff --git a/module/plugins/hooks/UnSkipOnFail.py b/module/plugins/hooks/UnSkipOnFail.py
deleted file mode 100644
index f25c5e2b4..000000000
--- a/module/plugins/hooks/UnSkipOnFail.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from os.path import basename
-
-from module.PyFile import PyFile
-from module.plugins.Hook import Hook
-from module.utils import fs_encode
-
-
-class UnSkipOnFail(Hook):
- __name__ = "UnSkipOnFail"
- __type__ = "hook"
- __version__ = "0.01"
-
- __config__ = [("activated", "bool", "Activated", True)]
-
- __description__ = """When a download fails, restart skipped duplicates"""
- __author_name__ = "hagg"
- __author_mail__ = None
-
-
- def downloadFailed(self, pyfile):
- pyfile_name = basename(pyfile.name)
- pid = pyfile.package().id
- msg = 'look for skipped duplicates for %s (pid:%s)...'
- self.logInfo(msg % (pyfile_name, pid))
- dups = self.findDuplicates(pyfile)
- for link in dups:
- # check if link is "skipped"(=4)
- if link.status == 4:
- lpid = link.packageID
- self.logInfo('restart "%s" (pid:%s)...' % (pyfile_name, lpid))
- self.setLinkStatus(link, "queued")
-
- def findDuplicates(self, pyfile):
- """ Search all packages for duplicate links to "pyfile".
- Duplicates are links that would overwrite "pyfile".
- To test on duplicity the package-folder and link-name
- of twolinks are compared (basename(link.name)).
- So this method returns a list of all links with equal
- package-folders and filenames as "pyfile", but except
- the data for "pyfile" iotselöf.
- It does MOT check the link's status.
- """
- dups = []
- pyfile_name = fs_encode(basename(pyfile.name))
- # get packages (w/o files, as most file data is useless here)
- queue = self.core.api.getQueue()
- for package in queue:
- # check if package-folder equals pyfile's package folder
- if fs_encode(package.folder) == fs_encode(pyfile.package().folder):
- # now get packaged data w/ files/links
- pdata = self.core.api.getPackageData(package.pid)
- if pdata.links:
- for link in pdata.links:
- link_name = fs_encode(basename(link.name))
- # check if link name collides with pdata's name
- if link_name == pyfile_name:
- # at last check if it is not pyfile itself
- if link.fid != pyfile.id:
- dups.append(link)
- return dups
-
- def setLinkStatus(self, link, new_status):
- """ Change status of "link" to "new_status".
- "link" has to be a valid FileData object,
- "new_status" has to be a valid status name
- (i.e. "queued" for this Plugin)
- It creates a temporary PyFile object using
- "link" data, changes its status, and tells
- the core.files-manager to save its data.
- """
- pyfile = PyFile(self.core.files,
- link.fid,
- link.url,
- link.name,
- link.size,
- link.status,
- link.error,
- link.plugin,
- link.packageID,
- link.order)
- pyfile.setStatus(new_status)
- self.core.files.save()
- pyfile.release()
diff --git a/module/plugins/hooks/UnrestrictLi.py b/module/plugins/hooks/UnrestrictLi.py
deleted file mode 100644
index ee5d79269..000000000
--- a/module/plugins/hooks/UnrestrictLi.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class UnrestrictLi(MultiHoster):
- __name__ = "UnrestrictLi"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24),
- ("history", "bool", "Delete History", False)]
-
- __description__ = """Unrestrict.li hook plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def getHoster(self):
- json_data = getURL('http://unrestrict.li/api/jdownloader/hosts.php?format=json')
- json_data = json_loads(json_data)
-
- host_list = [element['host'] for element in json_data['result']]
-
- return host_list
diff --git a/module/plugins/hooks/UpdateManager.py b/module/plugins/hooks/UpdateManager.py
deleted file mode 100644
index 320bc24e3..000000000
--- a/module/plugins/hooks/UpdateManager.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import sys
-
-from operator import itemgetter
-from os import path, remove, stat
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hook import Expose, Hook, threaded
-from module.utils import safe_join
-
-
-class UpdateManager(Hook):
- __name__ = "UpdateManager"
- __type__ = "hook"
- __version__ = "0.35"
-
- __config__ = [("activated", "bool", "Activated", True),
- ("mode", "pyLoad + plugins;plugins only", "Check updates for", "pyLoad + plugins"),
- ("interval", "int", "Check interval in hours", 8),
- ("reloadplugins", "bool", "Monitor plugins for code changes (debug mode only)", True),
- ("nodebugupdate", "bool", "Don't check for updates in debug mode", True)]
-
- __description__ = """ Check for updates """
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
- event_list = ["pluginConfigChanged"]
-
- SERVER_URL = "http://updatemanager.pyload.org"
- MIN_INTERVAL = 3 * 60 * 60 #: 3h minimum check interval (value is in seconds)
-
-
- def pluginConfigChanged(self, plugin, name, value):
- if name == "interval":
- interval = value * 60 * 60
- if self.MIN_INTERVAL <= interval != self.interval:
- self.core.scheduler.removeJob(self.cb)
- self.interval = interval
- self.initPeriodical()
- else:
- self.logDebug("Invalid interval value, kept current")
- elif name == "reloadplugins":
- if self.cb2:
- self.core.scheduler.removeJob(self.cb2)
- if value is True and self.core.debug:
- self.periodical2()
-
- def coreReady(self):
- self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval"))
- x = lambda: self.pluginConfigChanged(self.__name__, "reloadplugins", self.getConfig("reloadplugins"))
- self.core.scheduler.addJob(10, x, threaded=False)
-
- def unload(self):
- self.pluginConfigChanged(self.__name__, "reloadplugins", False)
-
- def setup(self):
- self.cb2 = None
- self.interval = self.MIN_INTERVAL
- self.updating = False
- self.info = {'pyload': False, 'version': None, 'plugins': False}
- self.mtimes = {} #: store modification time for each plugin
-
- def periodical2(self):
- if not self.updating:
- self.autoreloadPlugins()
- self.cb2 = self.core.scheduler.addJob(4, self.periodical2, threaded=False)
-
- @Expose
- def autoreloadPlugins(self):
- """ reload and reindex all modified plugins """
- modules = filter(
- lambda m: m and (m.__name__.startswith("module.plugins.") or
- m.__name__.startswith("userplugins.")) and
- m.__name__.count(".") >= 2, sys.modules.itervalues()
- )
-
- reloads = []
-
- for m in modules:
- root, type, name = m.__name__.rsplit(".", 2)
- id = (type, name)
- if type in self.core.pluginManager.plugins:
- f = m.__file__.replace(".pyc", ".py")
- if not path.isfile(f):
- continue
-
- mtime = stat(f).st_mtime
-
- if id not in self.mtimes:
- self.mtimes[id] = mtime
- elif self.mtimes[id] < mtime:
- reloads.append(id)
- self.mtimes[id] = mtime
-
- return True if self.core.pluginManager.reloadPlugins(reloads) else False
-
- def periodical(self):
- if not self.info['pyload'] and not (self.getConfig("nodebugupdate") and self.core.debug):
- self.updateThread()
-
- def server_request(self):
- try:
- return getURL(self.SERVER_URL, get={'v': self.core.api.getServerVersion()}).splitlines()
- except:
- self.logWarning(_("Unable to contact server to get updates"))
-
- @threaded
- def updateThread(self):
- self.updating = True
- status = self.update(onlyplugin=self.getConfig("mode") == "plugins only")
- if status == 2:
- self.core.api.restart()
- else:
- self.updating = False
-
- @Expose
- def updatePlugins(self):
- """ simple wrapper for calling plugin update quickly """
- return self.update(onlyplugin=True)
-
- @Expose
- def update(self, onlyplugin=False):
- """ check for updates """
- data = self.server_request()
- if not data:
- exitcode = 0
- elif data[0] == "None":
- self.logInfo(_("No new pyLoad version available"))
- updates = data[1:]
- exitcode = self._updatePlugins(updates)
- elif onlyplugin:
- exitcode = 0
- else:
- newversion = data[0]
- self.logInfo(_("*** New pyLoad Version %s available ***") % newversion)
- self.logInfo(_("*** Get it here: https://github.com/pyload/pyload/releases ***"))
- exitcode = 3
- self.info['pyload'] = True
- self.info['version'] = newversion
- return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required; 3 = No plugins updated, new pyLoad version available
-
- def _updatePlugins(self, updates):
- """ check for plugin updates """
-
- if self.info['plugins']:
- return False #: plugins were already updated
-
- updated = []
-
- vre = re.compile(r'__version__.*=.*("|\')([0-9.]+)')
- url = updates[0]
- schema = updates[1].split('|')
- if "BLACKLIST" in updates:
- blacklist = updates[updates.index('BLACKLIST') + 1:]
- updates = updates[2:updates.index('BLACKLIST')]
- else:
- blacklist = None
- updates = updates[2:]
-
- upgradable = sorted(map(lambda x: dict(zip(schema, x.split('|'))), updates), key=itemgetter("type", "name"))
- for plugin in upgradable:
- filename = plugin['name']
- prefix = plugin['type']
- version = plugin['version']
-
- if filename.endswith(".pyc"):
- name = filename[:filename.find("_")]
- else:
- name = filename.replace(".py", "")
-
- #@TODO: obsolete after 0.4.10
- if prefix.endswith("s"):
- type = prefix[:-1]
- else:
- type = prefix
-
- plugins = getattr(self.core.pluginManager, "%sPlugins" % type)
-
- oldver = float(plugins[name]['v']) if name in plugins else None
- newver = float(version)
-
- if not oldver:
- msg = "New [%(type)s] %(name)s (v%(newver)s)"
- elif newver > oldver:
- msg = "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)"
- else:
- continue
-
- self.logInfo(_(msg) % {
- 'type': type,
- 'name': name,
- 'oldver': oldver,
- 'newver': newver,
- })
-
- try:
- content = getURL(url % plugin)
- m = vre.search(content)
- if m and m.group(2) == version:
- f = open(safe_join("userplugins", prefix, filename), "wb")
- f.write(content)
- f.close()
- updated.append((prefix, name))
- else:
- raise Exception, _("Version mismatch")
- except Exception, e:
- self.logError(_("Error updating plugin %s") % filename, str(e))
-
- if blacklist:
- blacklisted = sorted(map(lambda x: (x.split('|')[0], x.split('|')[1].rsplit('.', 1)[0]), blacklist))
-
- # Always protect UpdateManager from self-removing
- try:
- blacklisted.remove(("hook", "UpdateManager"))
- except:
- pass
-
- removed = self.removePlugins(blacklisted)
- for t, n in removed:
- self.logInfo(_("Removed blacklisted plugin [%(type)s] %(name)s") % {
- 'type': t,
- 'name': n,
- })
-
- if updated:
- reloaded = self.core.pluginManager.reloadPlugins(updated)
- if reloaded:
- self.logInfo(_("Plugins updated and reloaded"))
- exitcode = 1
- else:
- self.logInfo(_("*** Plugins have been updated, but need a pyLoad restart to be reloaded ***"))
- self.info['plugins'] = True
- exitcode = 2
- else:
- self.logInfo(_("No plugin updates available"))
- exitcode = 0
-
- return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required
-
- @Expose
- def removePlugins(self, type_plugins):
- """ delete plugins from disk """
-
- if not type_plugins:
- return
-
- self.logDebug("Request deletion of plugins: %s" % type_plugins)
-
- removed = []
-
- for type, name in type_plugins:
- err = False
- file = name + ".py"
-
- for root in ("userplugins", path.join(pypath, "module", "plugins")):
-
- filename = safe_join(root, type, file)
- try:
- remove(filename)
- except Exception, e:
- self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e))
- err = True
-
- filename += "c"
- if path.isfile(filename):
- try:
- if type == "hook":
- self.manager.deactivateHook(name)
- remove(filename)
- except Exception, e:
- self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e))
- err = True
-
- if not err:
- id = (type, name)
- removed.append(id)
-
- return removed #: return a list of the plugins successfully removed
diff --git a/module/plugins/hooks/WindowsPhoneToastNotify.py b/module/plugins/hooks/WindowsPhoneToastNotify.py
deleted file mode 100644
index 01570b966..000000000
--- a/module/plugins/hooks/WindowsPhoneToastNotify.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import httplib
-import time
-
-from module.plugins.Hook import Hook
-
-
-class WindowsPhoneToastNotify(Hook):
- __name__ = "WindowsPhoneToastNotify"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("force", "bool", "Force even if client is connected", False),
- ("pushId", "str", "pushId", ""),
- ("pushUrl", "str", "pushUrl", ""),
- ("pushTimeout", "int", "Timeout between notifications in seconds", 0)]
-
- __description__ = """Send push notifications to Windows Phone"""
- __author_name__ = "Andy Voigt"
- __author_mail__ = "phone-support@hotmail.de"
-
-
- def setup(self):
- self.info = {}
-
- def getXmlData(self):
- myxml = ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> "
- "<wp:Toast> <wp:Text1>Pyload Mobile</wp:Text1> <wp:Text2>Captcha waiting!</wp:Text2> "
- "</wp:Toast> </wp:Notification>")
- return myxml
-
- def doRequest(self):
- URL = self.getConfig("pushUrl")
- request = self.getXmlData()
- webservice = httplib.HTTP(URL)
- webservice.putrequest("POST", self.getConfig("pushId"))
- webservice.putheader("Host", URL)
- webservice.putheader("Content-type", "text/xml")
- webservice.putheader("X-NotificationClass", "2")
- webservice.putheader("X-WindowsPhone-Target", "toast")
- webservice.putheader("Content-length", "%d" % len(request))
- webservice.endheaders()
- webservice.send(request)
- webservice.close()
- self.setStorage("LAST_NOTIFY", time.time())
-
- def newCaptchaTask(self, task):
- if not self.getConfig("pushId") or not self.getConfig("pushUrl"):
- return False
-
- if self.core.isClientConnected() and not self.getConfig("force"):
- return False
-
- if (time.time() - float(self.getStorage("LAST_NOTIFY", 0))) < self.getConf("pushTimeout"):
- return False
-
- self.doRequest()
diff --git a/module/plugins/hooks/XFileSharingPro.py b/module/plugins/hooks/XFileSharingPro.py
deleted file mode 100644
index eb0376921..000000000
--- a/module/plugins/hooks/XFileSharingPro.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hook import Hook
-
-
-class XFileSharingPro(Hook):
- __name__ = "XFileSharingPro"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", True),
- ("loadDefault", "bool", "Include default (built-in) hoster list", True),
- ("includeList", "str", "Include hosters (comma separated)", ""),
- ("excludeList", "str", "Exclude hosters (comma separated)", "")]
-
- __description__ = """XFileSharingPro hook plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def coreReady(self):
- self.loadPattern()
-
- def loadPattern(self):
- hosterList = self.getConfigSet('includeList')
- excludeList = self.getConfigSet('excludeList')
-
- if self.getConfig('loadDefault'):
- hosterList |= set((
- #WORKING HOSTERS:
- "aieshare.com", "asixfiles.com", "banashare.com", "cyberlocker.ch", "eyesfile.co", "eyesfile.com",
- "fileband.com", "filedwon.com", "filedownloads.org", "hipfile.com", "kingsupload.com", "mlfat4arab.com",
- "netuploaded.com", "odsiebie.pl", "q4share.com", "ravishare.com", "uptobox.com", "verzend.be",
- "xvidstage.com", "thefile.me", "sharesix.com", "hostingbulk.com",
- #NOT TESTED:
- "bebasupload.com", "boosterking.com", "divxme.com", "filevelocity.com", "glumbouploads.com",
- "grupload.com", "heftyfile.com", "host4desi.com", "laoupload.com", "linkzhost.com", "movreel.com",
- "rockdizfile.com", "limfile.com", "share76.com", "sharebeast.com", "sharehut.com", "sharerun.com",
- "shareswift.com", "sharingonline.com", "6ybh-upload.com", "skipfile.com", "spaadyshare.com",
- "space4file.com", "uploadbaz.com", "uploadc.com", "uploaddot.com", "uploadfloor.com", "uploadic.com",
- "uploadville.com", "vidbull.com", "zalaa.com", "zomgupload.com", "kupload.org", "movbay.org",
- "multishare.org", "omegave.org", "toucansharing.org", "uflinq.org", "banicrazy.info", "flowhot.info",
- "upbrasil.info", "shareyourfilez.biz", "bzlink.us", "cloudcache.cc", "fileserver.cc", "farshare.to",
- "filemaze.ws", "filehost.ws", "filestock.ru", "moidisk.ru", "4up.im", "100shared.com", "sharesix.com",
- "thefile.me", "filenuke.com", "sharerepo.com", "mightyupload.com",
- #WRONG FILE NAME:
- "sendmyway.com", "upchi.co.il",
- #NOT WORKING:
- "amonshare.com", "imageporter.com", "file4safe.com",
- #DOWN OR BROKEN:
- "ddlanime.com", "fileforth.com", "loombo.com", "goldfile.eu", "putshare.com"
- ))
-
- hosterList -= (excludeList)
- hosterList -= set(('', u''))
-
- if not hosterList:
- self.unload()
- return
-
- regexp = r"http://(?:[^/]*\.)?(%s)/\w{12}" % ("|".join(sorted(hosterList)).replace('.', '\.'))
- #self.logDebug(regexp)
-
- dict = self.core.pluginManager.hosterPlugins['XFileSharingPro']
- dict['pattern'] = regexp
- dict['re'] = re.compile(regexp)
- self.logDebug("Pattern loaded - handling %d hosters" % len(hosterList))
-
- def getConfigSet(self, option):
- s = self.getConfig(option).lower().replace('|', ',').replace(';', ',')
- return set([x.strip() for x in s.split(',')])
-
- def unload(self):
- dict = self.core.pluginManager.hosterPlugins['XFileSharingPro']
- dict['pattern'] = r'^unmatchable$'
- dict['re'] = re.compile(r'^unmatchable$')
diff --git a/module/plugins/hooks/XMPPInterface.py b/module/plugins/hooks/XMPPInterface.py
deleted file mode 100644
index c4a94a8bc..000000000
--- a/module/plugins/hooks/XMPPInterface.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from pyxmpp import streamtls
-from pyxmpp.all import JID, Message
-from pyxmpp.interface import implements
-from pyxmpp.interfaces import *
-from pyxmpp.jabber.client import JabberClient
-
-from module.plugins.hooks.IRCInterface import IRCInterface
-
-
-class XMPPInterface(IRCInterface, JabberClient):
- __name__ = "XMPPInterface"
- __type__ = "hook"
- __version__ = "0.11"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("jid", "str", "Jabber ID", "user@exmaple-jabber-server.org"),
- ("pw", "str", "Password", ""),
- ("tls", "bool", "Use TLS", False),
- ("owners", "str", "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"),
- ("info_file", "bool", "Inform about every file finished", False),
- ("info_pack", "bool", "Inform about every package finished", True),
- ("captcha", "bool", "Send captcha requests", True)]
-
- __description__ = """Connect to jabber and let owner perform different tasks"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- implements(IMessageHandlersProvider)
-
- def __init__(self, core, manager):
- IRCInterface.__init__(self, core, manager)
-
- self.jid = JID(self.getConfig("jid"))
- password = self.getConfig("pw")
-
- # if bare JID is provided add a resource -- it is required
- if not self.jid.resource:
- self.jid = JID(self.jid.node, self.jid.domain, "pyLoad")
-
- if self.getConfig("tls"):
- tls_settings = streamtls.TLSSettings(require=True, verify_peer=False)
- auth = ("sasl:PLAIN", "sasl:DIGEST-MD5")
- else:
- tls_settings = None
- auth = ("sasl:DIGEST-MD5", "digest")
-
- # setup client with provided connection information
- # and identity data
- JabberClient.__init__(self, self.jid, password,
- disco_name="pyLoad XMPP Client", disco_type="bot",
- tls_settings=tls_settings, auth_methods=auth)
-
- self.interface_providers = [
- VersionHandler(self),
- self,
- ]
-
- def coreReady(self):
- self.new_package = {}
-
- self.start()
-
- def packageFinished(self, pypack):
- try:
- if self.getConfig("info_pack"):
- self.announce(_("Package finished: %s") % pypack.name)
- except:
- pass
-
- def downloadFinished(self, pyfile):
- try:
- if self.getConfig("info_file"):
- self.announce(
- _("Download finished: %(name)s @ %(plugin)s") % {"name": pyfile.name, "plugin": pyfile.pluginname})
- except:
- pass
-
- def run(self):
- # connect to IRC etc.
- self.connect()
- try:
- self.loop()
- except Exception, ex:
- self.logError("pyLoad XMPP: %s" % str(ex))
-
- def stream_state_changed(self, state, arg):
- """This one is called when the state of stream connecting the component
- to a server changes. This will usually be used to let the user
- know what is going on."""
- self.logDebug("pyLoad XMPP: *** State changed: %s %r ***" % (state, arg))
-
- def disconnected(self):
- self.logDebug("pyLoad XMPP: Client was disconnected")
-
- def stream_closed(self, stream):
- self.logDebug("pyLoad XMPP: Stream was closed | %s" % stream)
-
- def stream_error(self, err):
- self.logDebug("pyLoad XMPP: Stream Error: %s" % err)
-
- def get_message_handlers(self):
- """Return list of (message_type, message_handler) tuples.
-
- The handlers returned will be called when matching message is received
- in a client session."""
- return [("normal", self.message)]
-
- def message(self, stanza):
- """Message handler for the component."""
- subject = stanza.get_subject()
- body = stanza.get_body()
- t = stanza.get_type()
- self.logDebug(u'pyLoad XMPP: Message from %s received.' % (unicode(stanza.get_from(),)))
- self.logDebug(u'pyLoad XMPP: Body: %s Subject: %s Type: %s' % (body, subject, t))
-
- if t == "headline":
- # 'headline' messages should never be replied to
- return True
- if subject:
- subject = u"Re: " + subject
-
- to_jid = stanza.get_from()
- from_jid = stanza.get_to()
-
- #j = JID()
- to_name = to_jid.as_utf8()
- from_name = from_jid.as_utf8()
-
- names = self.getConfig("owners").split(";")
-
- if to_name in names or to_jid.node + "@" + to_jid.domain in names:
- messages = []
-
- trigger = "pass"
- args = None
-
- try:
- temp = body.split()
- trigger = temp[0]
- if len(temp) > 1:
- args = temp[1:]
- except:
- pass
-
- handler = getattr(self, "event_%s" % trigger, self.event_pass)
- try:
- res = handler(args)
- for line in res:
- m = Message(
- to_jid=to_jid,
- from_jid=from_jid,
- stanza_type=stanza.get_type(),
- subject=subject,
- body=line)
-
- messages.append(m)
- except Exception, e:
- self.logError("pyLoad XMPP: " + repr(e))
-
- return messages
-
- else:
- return True
-
- def response(self, msg, origin=""):
- return self.announce(msg)
-
- def announce(self, message):
- """ send message to all owners"""
- for user in self.getConfig("owners").split(";"):
- self.logDebug("pyLoad XMPP: Send message to %s" % user)
-
- to_jid = JID(user)
-
- m = Message(from_jid=self.jid,
- to_jid=to_jid,
- stanza_type="chat",
- body=message)
-
- stream = self.get_stream()
- if not stream:
- self.connect()
- stream = self.get_stream()
-
- stream.send(m)
-
- def beforeReconnecting(self, ip):
- self.disconnect()
-
- def afterReconnecting(self, ip):
- self.connect()
-
-
-class VersionHandler(object):
- """Provides handler for a version query.
-
- This class will answer version query and announce 'jabber:iq:version' namespace
- in the client's disco#info results."""
-
- implements(IIqHandlersProvider, IFeaturesProvider)
-
- def __init__(self, client):
- """Just remember who created this."""
- self.client = client
-
- def get_features(self):
- """Return namespace which should the client include in its reply to a
- disco#info query."""
- return ["jabber:iq:version"]
-
- def get_iq_get_handlers(self):
- """Return list of tuples (element_name, namespace, handler) describing
- handlers of <iq type='get'/> stanzas"""
- return [("query", "jabber:iq:version", self.get_version)]
-
- def get_iq_set_handlers(self):
- """Return empty list, as this class provides no <iq type='set'/> stanza handler."""
- return []
-
- def get_version(self, iq):
- """Handler for jabber:iq:version queries.
-
- jabber:iq:version queries are not supported directly by PyXMPP, so the
- XML node is accessed directly through the libxml2 API. This should be
- used very carefully!"""
- iq = iq.make_result_response()
- q = iq.new_query("jabber:iq:version")
- q.newTextChild(q.ns(), "name", "Echo component")
- q.newTextChild(q.ns(), "version", "1.0")
- return iq
diff --git a/module/plugins/hooks/ZeveraCom.py b/module/plugins/hooks/ZeveraCom.py
deleted file mode 100644
index 0d5e23118..000000000
--- a/module/plugins/hooks/ZeveraCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-
-class ZeveraCom(MultiHoster):
- __name__ = "ZeveraCom"
- __type__ = "hook"
- __version__ = "0.02"
-
- __config__ = [("activated", "bool", "Activated", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
-
- __description__ = """Real-Debrid.com hook plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def getHoster(self):
- page = getURL("http://www.zevera.com/jDownloader.ashx?cmd=gethosters")
- return [x.strip() for x in page.replace("\"", "").split(",")]
diff --git a/module/plugins/hoster/AlldebridCom.py b/module/plugins/hoster/AlldebridCom.py
deleted file mode 100644
index 7201f1929..000000000
--- a/module/plugins/hoster/AlldebridCom.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import randrange
-from urllib import unquote
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-from module.utils import parseFileSize
-
-
-class AlldebridCom(Hoster):
- __name__ = "AlldebridCom"
- __type__ = "hoster"
- __version__ = "0.34"
-
- __pattern__ = r'https?://(?:[^/]*\.)?alldebrid\..*'
-
- __description__ = """Alldebrid.com hoster plugin"""
- __author_name__ = "Andy Voigt"
- __author_mail__ = "spamsales@online.de"
-
-
- def getFilename(self, url):
- try:
- name = unquote(url.rsplit("/", 1)[1])
- except IndexError:
- name = "Unknown_Filename..."
- if name.endswith("..."): # incomplete filename, append random stuff
- name += "%s.tmp" % randrange(100, 999)
- return name
-
- def setup(self):
- self.chunkLimit = 16
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid")
- self.fail("No AllDebrid account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- password = self.getPassword().splitlines()
- password = "" if not password else password[0]
-
- url = "http://www.alldebrid.com/service.php?link=%s&json=true&pw=%s" % (pyfile.url, password)
- page = self.load(url)
- data = json_loads(page)
-
- self.logDebug("Json data: %s" % str(data))
-
- if data['error']:
- if data['error'] == "This link isn't available on the hoster website.":
- self.offline()
- else:
- self.logWarning(data['error'])
- self.tempOffline()
- else:
- if pyfile.name and not pyfile.name.endswith('.tmp'):
- pyfile.name = data['filename']
- pyfile.size = parseFileSize(data['filesize'])
- new_url = data['link']
-
- if self.getConfig("https"):
- new_url = new_url.replace("http://", "https://")
- else:
- new_url = new_url.replace("https://", "http://")
-
- if new_url != pyfile.url:
- self.logDebug("New URL: %s" % new_url)
-
- if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):
- #only use when name wasnt already set
- pyfile.name = self.getFilename(new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload({"error": "<title>An error occured while processing your request</title>",
- "empty": re.compile(r"^$")})
-
- if check == "error":
- self.retry(wait_time=60, reason="An error occured while generating link.")
- elif check == "empty":
- self.retry(wait_time=60, reason="Downloaded File was empty.")
diff --git a/module/plugins/hoster/BasePlugin.py b/module/plugins/hoster/BasePlugin.py
deleted file mode 100644
index 54d789054..000000000
--- a/module/plugins/hoster/BasePlugin.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from re import match, search
-from urllib import unquote
-from urlparse import urlparse
-
-from module.network.HTTPRequest import BadHeader
-from module.plugins.Hoster import Hoster
-from module.utils import html_unescape, remove_chars
-
-
-class BasePlugin(Hoster):
- __name__ = "BasePlugin"
- __type__ = "hoster"
- __version__ = "0.20"
-
- __pattern__ = r'^unmatchable$'
-
- __description__ = """Base Plugin when any other didnt fit"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- """main function"""
-
- #debug part, for api exerciser
- if pyfile.url.startswith("DEBUG_API"):
- self.multiDL = False
- return
-
- # self.__name__ = "NetloadIn"
- # pyfile.name = "test"
- # self.html = self.load("http://localhost:9000/short")
- # self.download("http://localhost:9000/short")
- # self.api = self.load("http://localhost:9000/short")
- # self.decryptCaptcha("http://localhost:9000/captcha")
- #
- # if pyfile.url == "79":
- # self.core.api.addPackage("test", [str(i) for i in xrange(80)], 1)
- #
- # return
- if pyfile.url.startswith("http"):
-
- try:
- self.downloadFile(pyfile)
- except BadHeader, e:
- if e.code in (401, 403):
- self.logDebug("Auth required")
-
- account = self.core.accountManager.getAccountPlugin('Http')
- servers = [x['login'] for x in account.getAllAccounts()]
- server = urlparse(pyfile.url).netloc
-
- if server in servers:
- self.logDebug("Logging on to %s" % server)
- self.req.addAuth(account.accounts[server]['password'])
- else:
- for pwd in pyfile.package().password.splitlines():
- if ":" in pwd:
- self.req.addAuth(pwd.strip())
- break
- else:
- self.fail(_("Authorization required (username:password)"))
-
- self.downloadFile(pyfile)
- else:
- raise
-
- else:
- self.fail("No Plugin matched and not a downloadable url.")
-
- def downloadFile(self, pyfile):
- url = pyfile.url
-
- for _ in xrange(5):
- header = self.load(url, just_header=True)
-
- # self.load does not raise a BadHeader on 404 responses, do it here
- if 'code' in header and header['code'] == 404:
- raise BadHeader(404)
-
- if 'location' in header:
- self.logDebug("Location: " + header['location'])
- base = match(r'https?://[^/]+', url).group(0)
- if header['location'].startswith("http"):
- url = header['location']
- elif header['location'].startswith("/"):
- url = base + unquote(header['location'])
- else:
- url = '%s/%s' % (base, unquote(header['location']))
- else:
- break
-
- name = html_unescape(unquote(urlparse(url).path.split("/")[-1]))
-
- if 'content-disposition' in header:
- self.logDebug("Content-Disposition: " + header['content-disposition'])
- m = search("filename(?P<type>=|\*=(?P<enc>.+)'')(?P<name>.*)", header['content-disposition'])
- if m:
- disp = m.groupdict()
- self.logDebug(disp)
- if not disp['enc']:
- disp['enc'] = 'utf-8'
- name = remove_chars(disp['name'], "\"';").strip()
- name = unicode(unquote(name), disp['enc'])
-
- if not name:
- name = url
- pyfile.name = name
- self.logDebug("Filename: %s" % pyfile.name)
- self.download(url, disposition=True)
diff --git a/module/plugins/hoster/BayfilesCom.py b/module/plugins/hoster/BayfilesCom.py
deleted file mode 100644
index dc7e8cbf0..000000000
--- a/module/plugins/hoster/BayfilesCom.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import time
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class BayfilesCom(SimpleHoster):
- __name__ = "BayfilesCom"
- __type__ = "hoster"
- __version__ = "0.07"
-
- __pattern__ = r'https?://(?:www\.)?bayfiles\.(com|net)/file/(?P<ID>[a-zA-Z0-9]+/[a-zA-Z0-9]+/[^/]+)'
-
- __description__ = """Bayfiles.com hoster plugin"""
- __author_name__ = ("zoidberg", "Walter Purcaro")
- __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com")
-
- FILE_INFO_PATTERN = r'<p title="(?P<N>[^"]+)">[^<]*<strong>(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B</strong></p>'
- OFFLINE_PATTERN = r'(<p>The requested file could not be found.</p>|<title>404 Not Found</title>)'
-
- WAIT_PATTERN = r'>Your IP [0-9.]* has recently downloaded a file\. Upgrade to premium or wait (\d+) minutes\.<'
- VARS_PATTERN = r'var vfid = (\d+);\s*var delay = (\d+);'
- FREE_LINK_PATTERN = r"javascript:window.location.href = '([^']+)';"
- PREMIUM_LINK_PATTERN = r'(?:<a class="highlighted-btn" href="|(?=http://s\d+\.baycdn\.com/dl/))(.*?)"'
-
-
- def handleFree(self):
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- self.wait(int(m.group(1)) * 60)
- self.retry()
-
- # Get download token
- m = re.search(self.VARS_PATTERN, self.html)
- if m is None:
- self.parseError('VARS')
- vfid, delay = m.groups()
-
- response = json_loads(self.load('http://bayfiles.com/ajax_download', get={
- "_": time() * 1000,
- "action": "startTimer",
- "vfid": vfid}, decode=True))
-
- if not "token" in response or not response['token']:
- self.fail('No token')
-
- self.wait(int(delay))
-
- self.html = self.load('http://bayfiles.com/ajax_download', get={
- "token": response['token'],
- "action": "getLink",
- "vfid": vfid})
-
- # Get final link and download
- m = re.search(self.FREE_LINK_PATTERN, self.html)
- if m is None:
- self.parseError("Free link")
- self.startDownload(m.group(1))
-
- def handlePremium(self):
- m = re.search(self.PREMIUM_LINK_PATTERN, self.html)
- if m is None:
- self.parseError("Premium link")
- self.startDownload(m.group(1))
-
- def startDownload(self, url):
- self.logDebug("%s URL: %s" % ("Premium" if self.premium else "Free", url))
- self.download(url)
- # check download
- check = self.checkDownload({
- "waitforfreeslots": re.compile(r"<title>BayFiles</title>"),
- "notfound": re.compile(r"<title>404 Not Found</title>")
- })
- if check == "waitforfreeslots":
- self.retry(30, 5 * 60, "Wait for free slot")
- elif check == "notfound":
- self.retry(30, 5 * 60, "404 Not found")
-
-
-getInfo = create_getInfo(BayfilesCom)
diff --git a/module/plugins/hoster/BezvadataCz.py b/module/plugins/hoster/BezvadataCz.py
deleted file mode 100644
index 7156db473..000000000
--- a/module/plugins/hoster/BezvadataCz.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class BezvadataCz(SimpleHoster):
- __name__ = "BezvadataCz"
- __type__ = "hoster"
- __version__ = "0.24"
-
- __pattern__ = r'http://(?:www\.)?bezvadata.cz/stahnout/.*'
-
- __description__ = """BezvaData.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<p><b>Soubor: (?P<N>[^<]+)</b></p>'
- FILE_SIZE_PATTERN = r'<li><strong>Velikost:</strong> (?P<S>[^<]+)</li>'
- OFFLINE_PATTERN = r'<title>BezvaData \| Soubor nenalezen</title>'
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
-
- def handleFree(self):
- #download button
- m = re.search(r'<a class="stahnoutSoubor".*?href="(.*?)"', self.html)
- if m is None:
- self.parseError("page1 URL")
- url = "http://bezvadata.cz%s" % m.group(1)
-
- #captcha form
- self.html = self.load(url)
- self.checkErrors()
- for _ in xrange(5):
- action, inputs = self.parseHtmlForm('frm-stahnoutFreeForm')
- if not inputs:
- self.parseError("FreeForm")
-
- m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html)
- if m is None:
- self.parseError("captcha img")
-
- #captcha image is contained in html page as base64encoded data but decryptCaptcha() expects image url
- self.load, proper_load = self.loadcaptcha, self.load
- try:
- inputs['captcha'] = self.decryptCaptcha(m.group(1), imgtype='png')
- finally:
- self.load = proper_load
-
- if '<img src="data:image/png;base64' in self.html:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("No valid captcha code entered")
-
- #download url
- self.html = self.load("http://bezvadata.cz%s" % action, post=inputs)
- self.checkErrors()
- m = re.search(r'<a class="stahnoutSoubor2" href="(.*?)">', self.html)
- if m is None:
- self.parseError("page2 URL")
- url = "http://bezvadata.cz%s" % m.group(1)
- self.logDebug("DL URL %s" % url)
-
- #countdown
- m = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html)
- wait_time = (int(m.group(1)) * 60 + int(m.group(2)) + 1) if m else 120
- self.wait(wait_time, False)
-
- self.download(url)
-
- def checkErrors(self):
- if 'images/button-download-disable.png' in self.html:
- self.longWait(5 * 60, 24) # parallel dl limit
- elif '<div class="infobox' in self.html:
- self.tempOffline()
-
- def loadcaptcha(self, data, *args, **kwargs):
- return data.decode("base64")
-
-
-getInfo = create_getInfo(BezvadataCz)
diff --git a/module/plugins/hoster/BillionuploadsCom.py b/module/plugins/hoster/BillionuploadsCom.py
deleted file mode 100644
index c55b9073c..000000000
--- a/module/plugins/hoster/BillionuploadsCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class BillionuploadsCom(XFileSharingPro):
- __name__ = "BillionuploadsCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?billionuploads.com/\w{12}'
-
- __description__ = """Billionuploads.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "billionuploads.com"
-
- FILE_NAME_PATTERN = r'<b>Filename:</b>(?P<N>.*?)<br>'
- FILE_SIZE_PATTERN = r'<b>Size:</b>(?P<S>.*?)<br>'
-
-
-getInfo = create_getInfo(BillionuploadsCom)
diff --git a/module/plugins/hoster/BitshareCom.py b/module/plugins/hoster/BitshareCom.py
deleted file mode 100644
index 3c84ce5da..000000000
--- a/module/plugins/hoster/BitshareCom.py
+++ /dev/null
@@ -1,151 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from __future__ import with_statement
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class BitshareCom(SimpleHoster):
- __name__ = "BitshareCom"
- __type__ = "hoster"
- __version__ = "0.50"
-
- __pattern__ = r'http://(?:www\.)?bitshare\.com/(files/(?P<id1>[a-zA-Z0-9]+)(/(?P<name>.*?)\.html)?|\?f=(?P<id2>[a-zA-Z0-9]+))'
-
- __description__ = """Bitshare.com hoster plugin"""
- __author_name__ = ("Paul King", "fragonib")
- __author_mail__ = ("", "fragonib[AT]yahoo[DOT]es")
-
- FILE_INFO_PATTERN = r'Downloading (?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)</h1>'
- OFFLINE_PATTERN = r'(>We are sorry, but the requested file was not found in our database|>Error - File not available<|The file was deleted either by the uploader, inactivity or due to copyright claim)'
-
- FILE_AJAXID_PATTERN = r'var ajaxdl = "(.*?)";'
- CAPTCHA_KEY_PATTERN = r'http://api\.recaptcha\.net/challenge\?k=(.*?) '
- TRAFFIC_USED_UP = r'Your Traffic is used up for today. Upgrade to premium to continue!'
-
-
- def setup(self):
- self.req.cj.setCookie(".bitshare.com", "language_selection", "EN")
- self.multiDL = self.premium
- self.chunkLimit = 1
-
- def process(self, pyfile):
- if self.premium:
- self.account.relogin(self.user)
-
- self.pyfile = pyfile
-
- # File id
- m = re.match(self.__pattern__, pyfile.url)
- self.file_id = max(m.group('id1'), m.group('id2'))
- self.logDebug("File id is [%s]" % self.file_id)
-
- # Load main page
- self.html = self.load(pyfile.url, ref=False, decode=True)
-
- # Check offline
- if re.search(self.OFFLINE_PATTERN, self.html):
- self.offline()
-
- # Check Traffic used up
- if re.search(self.TRAFFIC_USED_UP, self.html):
- self.logInfo("Your Traffic is used up for today")
- self.wait(30 * 60, True)
- self.retry()
-
- # File name
- m = re.match(self.__pattern__, pyfile.url)
- name1 = m.group('name') if m else None
- m = re.search(self.FILE_INFO_PATTERN, self.html)
- name2 = m.group('N') if m else None
- pyfile.name = max(name1, name2)
-
- # Ajax file id
- self.ajaxid = re.search(self.FILE_AJAXID_PATTERN, self.html).group(1)
- self.logDebug("File ajax id is [%s]" % self.ajaxid)
-
- # This may either download our file or forward us to an error page
- url = self.getDownloadUrl()
- self.logDebug("Downloading file with url [%s]" % url)
- self.download(url)
-
- check = self.checkDownload({"404": ">404 Not Found<", "Error": ">Error occured<"})
- if check == "404":
- self.retry(3, 60, 'Error 404')
- elif check == "error":
- self.retry(5, 5 * 60, "Bitshare host : Error occured")
-
- def getDownloadUrl(self):
- # Return location if direct download is active
- if self.premium:
- header = self.load(self.pyfile.url, cookies=True, just_header=True)
- if 'location' in header:
- return header['location']
-
- # Get download info
- self.logDebug("Getting download info")
- response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
- post={"request": "generateID", "ajaxid": self.ajaxid})
- self.handleErrors(response, ':')
- parts = response.split(":")
- filetype = parts[0]
- wait = int(parts[1])
- captcha = int(parts[2])
- self.logDebug("Download info [type: '%s', waiting: %d, captcha: %d]" % (filetype, wait, captcha))
-
- # Waiting
- if wait > 0:
- self.logDebug("Waiting %d seconds." % wait)
- if wait < 120:
- self.wait(wait, False)
- else:
- self.wait(wait - 55, True)
- self.retry()
-
- # Resolve captcha
- if captcha == 1:
- self.logDebug("File is captcha protected")
- id = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1)
- # Try up to 3 times
- for i in xrange(3):
- self.logDebug("Resolving ReCaptcha with key [%s], round %d" % (id, i + 1))
- recaptcha = ReCaptcha(self)
- challenge, code = recaptcha.challenge(id)
- response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
- post={"request": "validateCaptcha", "ajaxid": self.ajaxid,
- "recaptcha_challenge_field": challenge, "recaptcha_response_field": code})
- if self.handleCaptchaErrors(response):
- break
-
- # Get download URL
- self.logDebug("Getting download url")
- response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
- post={"request": "getDownloadURL", "ajaxid": self.ajaxid})
- self.handleErrors(response, '#')
- url = response.split("#")[-1]
-
- return url
-
- def handleErrors(self, response, separator):
- self.logDebug("Checking response [%s]" % response)
- if "ERROR:Session timed out" in response:
- self.retry()
- elif "ERROR" in response:
- msg = response.split(separator)[-1]
- self.fail(msg)
-
- def handleCaptchaErrors(self, response):
- self.logDebug("Result of captcha resolving [%s]" % response)
- if "SUCCESS" in response:
- self.correctCaptcha()
- return True
- elif "ERROR:SESSION ERROR" in response:
- self.retry()
- self.logDebug("Wrong captcha")
- self.invalidCaptcha()
-
-
-getInfo = create_getInfo(BitshareCom)
diff --git a/module/plugins/hoster/BoltsharingCom.py b/module/plugins/hoster/BoltsharingCom.py
deleted file mode 100644
index d038c50ca..000000000
--- a/module/plugins/hoster/BoltsharingCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class BoltsharingCom(DeadHoster):
- __name__ = "BoltsharingCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?boltsharing.com/\w{12}'
-
- __description__ = """Boltsharing.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(BoltsharingCom)
diff --git a/module/plugins/hoster/CatShareNet.py b/module/plugins/hoster/CatShareNet.py
deleted file mode 100644
index 4bbdfce89..000000000
--- a/module/plugins/hoster/CatShareNet.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class CatShareNet(SimpleHoster):
- __name__ = "CatShareNet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?catshare.net/\w{16}.*'
-
- __description__ = """CatShare.net hoster plugin"""
- __author_name__ = "z00nx"
- __author_mail__ = "z00nx0@gmail.com"
-
- FILE_INFO_PATTERN = r'<h3 class="pull-left"[^>]+>(?P<N>.*)</h3>\s+<h3 class="pull-right"[^>]+>(?P<S>.*)</h3>'
- OFFLINE_PATTERN = r'Podany plik zosta'
-
- SECONDS_PATTERN = r'var\s+count\s+=\s+(\d+);'
-
- RECAPTCHA_KEY = "6Lfln9kSAAAAANZ9JtHSOgxUPB9qfDFeLUI_QMEy"
-
-
- def handleFree(self):
- m = re.search(self.SECONDS_PATTERN, self.html)
- seconds = int(m.group(1))
- self.logDebug("Seconds found", seconds)
- self.wait(seconds + 1)
- recaptcha = ReCaptcha(self)
- challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY)
- post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code}
- self.download(self.pyfile.url, post=post_data)
- check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")})
- if check == "html":
- self.logDebug("Wrong captcha entered")
- self.invalidCaptcha()
- self.retry()
-
-
-getInfo = create_getInfo(CatShareNet)
diff --git a/module/plugins/hoster/CloudzerNet.py b/module/plugins/hoster/CloudzerNet.py
deleted file mode 100644
index 72332c56f..000000000
--- a/module/plugins/hoster/CloudzerNet.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class CloudzerNet(DeadHoster):
- __name__ = "CloudzerNet"
- __type__ = "hoster"
- __version__ = "0.05"
-
- __pattern__ = r'https?://(?:www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)\w+'
-
- __description__ = """Cloudzer.net hoster plugin"""
- __author_name__ = ("gs", "z00nx", "stickell")
- __author_mail__ = ("I-_-I-_-I@web.de", "z00nx0@gmail.com", "l.stickell@yahoo.it")
-
-
-getInfo = create_getInfo(CloudzerNet)
diff --git a/module/plugins/hoster/CramitIn.py b/module/plugins/hoster/CramitIn.py
deleted file mode 100644
index 6a872ab34..000000000
--- a/module/plugins/hoster/CramitIn.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class CramitIn(XFileSharingPro):
- __name__ = "CramitIn"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?cramit.in/\w{12}'
-
- __description__ = """Cramit.in hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "cramit.in"
-
- FILE_INFO_PATTERN = r'<span class=t2>\s*(?P<N>.*?)</span>.*?<small>\s*\((?P<S>.*?)\)'
- LINK_PATTERN = r'href="(http://cramit.in/file_download/.*?)"'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
-
-
-getInfo = create_getInfo(CramitIn)
diff --git a/module/plugins/hoster/CrockoCom.py b/module/plugins/hoster/CrockoCom.py
deleted file mode 100644
index 80d9b3d61..000000000
--- a/module/plugins/hoster/CrockoCom.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class CrockoCom(SimpleHoster):
- __name__ = "CrockoCom"
- __type__ = "hoster"
- __version__ = "0.16"
-
- __pattern__ = r'http://(?:www\.)?(crocko|easy-share).com/\w+'
-
- __description__ = """Crocko hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<span class="fz24">Download:\s*<strong>(?P<N>.*)'
- FILE_SIZE_PATTERN = r'<span class="tip1"><span class="inner">(?P<S>[^<]+)</span></span>'
- OFFLINE_PATTERN = r"<h1>Sorry,<br />the page you're looking for <br />isn't here.</h1>|File not found"
-
- CAPTCHA_URL_PATTERN = re.compile(r"u='(/file_contents/captcha/\w+)';\s*w='(\d+)';")
- CAPTCHA_KEY_PATTERN = re.compile(r'Recaptcha.create\("([^"]+)"')
-
- FORM_PATTERN = r'<form method="post" action="([^"]+)">(.*?)</form>'
- FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>'
-
- FILE_NAME_REPLACEMENTS = [(r'<[^>]*>', '')]
-
-
- def handleFree(self):
- if "You need Premium membership to download this file." in self.html:
- self.fail("You need Premium membership to download this file.")
-
- for _ in xrange(5):
- m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
- if m:
- url, wait_time = 'http://crocko.com' + m.group(1), m.group(2)
- self.wait(wait_time)
- self.html = self.load(url)
- else:
- break
-
- m = re.search(self.CAPTCHA_KEY_PATTERN, self.html)
- if m is None:
- self.parseError('Captcha KEY')
- captcha_key = m.group(1)
-
- m = re.search(self.FORM_PATTERN, self.html, re.DOTALL)
- if m is None:
- self.parseError('ACTION')
- action, form = m.groups()
- inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
-
- recaptcha = ReCaptcha(self)
-
- for _ in xrange(5):
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key)
- self.download(action, post=inputs)
-
- check = self.checkDownload({
- "captcha_err": self.CAPTCHA_KEY_PATTERN
- })
-
- if check == "captcha_err":
- self.invalidCaptcha()
- else:
- break
- else:
- self.fail('No valid captcha solution received')
-
-
-getInfo = create_getInfo(CrockoCom)
diff --git a/module/plugins/hoster/CyberlockerCh.py b/module/plugins/hoster/CyberlockerCh.py
deleted file mode 100644
index bfab72b7c..000000000
--- a/module/plugins/hoster/CyberlockerCh.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class CyberlockerCh(DeadHoster):
- __name__ = "CyberlockerCh"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?cyberlocker\.ch/\w+'
-
- __description__ = """Cyberlocker.ch hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
-getInfo = create_getInfo(CyberlockerCh)
diff --git a/module/plugins/hoster/CzshareCom.py b/module/plugins/hoster/CzshareCom.py
deleted file mode 100644
index 4f581651b..000000000
--- a/module/plugins/hoster/CzshareCom.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://czshare.com/5278880/random.bin
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.utils import parseFileSize
-
-
-class CzshareCom(SimpleHoster):
- __name__ = "CzshareCom"
- __type__ = "hoster"
- __version__ = "0.94"
-
- __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download.php\?).*'
-
- __description__ = """CZshare.com hoster plugin, now Sdilej.cz"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>'
- FILE_SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B\s*</div>'
- OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">'
-
- FILE_SIZE_REPLACEMENTS = [(' ', '')]
- FILE_URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://sdilej.cz/\1/x/')]
-
- SH_CHECK_TRAFFIC = True
-
- FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>'
- FREE_FORM_PATTERN = r'<form action="download.php" method="post">\s*<img src="captcha.php" id="captcha" />(.*?)</form>'
- PREMIUM_FORM_PATTERN = r'<form action="/profi_down.php" method="post">(.*?)</form>'
- FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]+)"[^>]*/>'
- MULTIDL_PATTERN = r"<p><font color='red'>Z[^<]*PROFI.</font></p>"
- USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([0-9., ]+)([kKMG]i?B)</strong>\s*</div><!-- .credit -->'
-
-
- def checkTrafficLeft(self):
- # check if user logged in
- m = re.search(self.USER_CREDIT_PATTERN, self.html)
- if m is None:
- self.account.relogin(self.user)
- self.html = self.load(self.pyfile.url, cookies=True, decode=True)
- m = re.search(self.USER_CREDIT_PATTERN, self.html)
- if m is None:
- return False
-
- # check user credit
- try:
- credit = parseFileSize(m.group(1).replace(' ', ''), m.group(2))
- self.logInfo("Premium download for %i KiB of Credit" % (self.pyfile.size / 1024))
- self.logInfo("User %s has %i KiB left" % (self.user, credit / 1024))
- if credit < self.pyfile.size:
- self.logInfo("Not enough credit to download file %s" % self.pyfile.name)
- return False
- except Exception, e:
- # let's continue and see what happens...
- self.logError('Parse error (CREDIT): %s' % e)
-
- return True
-
- def handlePremium(self):
- # parse download link
- try:
- form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.DOTALL).group(1)
- inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
- except Exception, e:
- self.logError("Parse error (FORM): %s" % e)
- self.resetAccount()
-
- # download the file, destination is determined by pyLoad
- self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True)
- self.checkDownloadedFile()
-
- def handleFree(self):
- # get free url
- m = re.search(self.FREE_URL_PATTERN, self.html)
- if m is None:
- self.parseError('Free URL')
- parsed_url = "http://sdilej.cz" + m.group(1)
- self.logDebug("PARSED_URL:" + parsed_url)
-
- # get download ticket and parse html
- self.html = self.load(parsed_url, cookies=True, decode=True)
- if re.search(self.MULTIDL_PATTERN, self.html):
- self.longWait(5 * 60, 12)
-
- try:
- form = re.search(self.FREE_FORM_PATTERN, self.html, re.DOTALL).group(1)
- inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
- self.pyfile.size = int(inputs['size'])
- except Exception, e:
- self.logError(e)
- self.parseError('Form')
-
- # get and decrypt captcha
- captcha_url = 'http://sdilej.cz/captcha.php'
- for _ in xrange(5):
- inputs['captchastring2'] = self.decryptCaptcha(captcha_url)
- self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True)
- if u"<li>ZadanÜ ověřovací kód nesouhlasí!</li>" in self.html:
- self.invalidCaptcha()
- elif re.search(self.MULTIDL_PATTERN, self.html):
- self.longWait(5 * 60, 12)
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("No valid captcha code entered")
-
- m = re.search("countdown_number = (\d+);", self.html)
- self.setWait(int(m.group(1)) if m else 50)
-
- # download the file, destination is determined by pyLoad
- self.logDebug("WAIT URL", self.req.lastEffectiveURL)
- m = re.search("free_wait.php\?server=(.*?)&(.*)", self.req.lastEffectiveURL)
- if m is None:
- self.parseError('Download URL')
-
- url = "http://%s/download.php?%s" % (m.group(1), m.group(2))
-
- self.wait()
- self.download(url)
- self.checkDownloadedFile()
-
- def checkDownloadedFile(self):
- # check download
- check = self.checkDownload({
- "tempoffline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"),
- "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"),
- "multi_dl": re.compile(self.MULTIDL_PATTERN),
- "captcha_err": "<li>ZadanÜ ověřovací kód nesouhlasí!</li>"
- })
-
- if check == "tempoffline":
- self.fail("File not available - try later")
- if check == "credit":
- self.resetAccount()
- elif check == "multi_dl":
- self.longWait(5 * 60, 12)
- elif check == "captcha_err":
- self.invalidCaptcha()
- self.retry()
-
-
-getInfo = create_getInfo(CzshareCom)
diff --git a/module/plugins/hoster/DailymotionCom.py b/module/plugins/hoster/DailymotionCom.py
deleted file mode 100644
index 79b7acb45..000000000
--- a/module/plugins/hoster/DailymotionCom.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.PyFile import statusMap
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-
-
-def getInfo(urls):
- result = [] #: [ .. (name, size, status, url) .. ]
- regex = re.compile(DailymotionCom.__pattern__)
- apiurl = "https://api.dailymotion.com/video/"
- request = {"fields": "access_error,status,title"}
- for url in urls:
- id = regex.search(url).group("ID")
- page = getURL(apiurl + id, get=request)
- info = json_loads(page)
-
- if "title" in info:
- name = info['title'] + ".mp4"
- else:
- name = url
-
- if "error" in info or info['access_error']:
- status = "offline"
- else:
- status = info['status']
- if status in ("ready", "published"):
- status = "online"
- elif status in ("waiting", "processing"):
- status = "temp. offline"
- else:
- status = "offline"
-
- result.append((name, 0, statusMap[status], url))
- return result
-
-
-class DailymotionCom(Hoster):
- __name__ = "DailymotionCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'https?://(?:www\.)?dailymotion\.com/.*?video/(?P<ID>[\w^_]+)'
- __config__ = [("quality", "Lowest;LD 144p;LD 240p;SD 384p;HQ 480p;HD 720p;HD 1080p;Highest", "Quality", "Highest")]
-
- __description__ = """Dailymotion.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def getStreams(self):
- streams = []
- for result in re.finditer(r"\"(?P<URL>http:\\/\\/www.dailymotion.com\\/cdn\\/H264-(?P<QF>.*?)\\.*?)\"",
- self.html):
- url = result.group("URL")
- qf = result.group("QF")
- link = url.replace("\\", "")
- quality = tuple(int(x) for x in qf.split("x"))
- streams.append((quality, link))
- return sorted(streams, key=lambda x: x[0][::-1])
-
- def getQuality(self):
- q = self.getConfig("quality")
- if q == "Lowest":
- quality = 0
- elif q == "Highest":
- quality = -1
- else:
- quality = int(q.rsplit(" ")[1][:-1])
- return quality
-
- def getLink(self, streams, quality):
- if quality > 0:
- for x, s in reversed([item for item in enumerate(streams)]):
- qf = s[0][1]
- if qf <= quality:
- idx = x
- break
- else:
- idx = 0
- else:
- idx = quality
-
- s = streams[idx]
- self.logInfo("Download video quality %sx%s" % s[0])
- return s[1]
-
- def checkInfo(self, pyfile):
- pyfile.name, pyfile.size, pyfile.status, pyfile.url = getInfo([pyfile.url])[0]
- if pyfile.status == 1:
- self.offline()
- elif pyfile.status == 6:
- self.tempOffline()
-
- def process(self, pyfile):
- self.checkInfo(pyfile)
-
- id = re.match(self.__pattern__, pyfile.url).group("ID")
- self.html = self.load("http://www.dailymotion.com/embed/video/" + id, decode=True)
-
- streams = self.getStreams()
- quality = self.getQuality()
- link = self.getLink(streams, quality)
-
- self.download(link)
diff --git a/module/plugins/hoster/DataHu.py b/module/plugins/hoster/DataHu.py
deleted file mode 100644
index 3dc01eef3..000000000
--- a/module/plugins/hoster/DataHu.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://data.hu/get/6381232/random.bin
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class DataHu(SimpleHoster):
- __name__ = "DataHu"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?data.hu/get/\w+'
-
- __description__ = """Data.hu hoster plugin"""
- __author_name__ = ("crash", "stickell")
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_INFO_PATTERN = ur'<title>(?P<N>.*) \((?P<S>[^)]+)\) let\xf6lt\xe9se</title>'
- OFFLINE_PATTERN = ur'Az adott f\xe1jl nem l\xe9tezik'
- LINK_PATTERN = r'<div class="download_box_button"><a href="([^"]+)">'
-
-
- def handleFree(self):
- self.resumeDownload = True
- self.html = self.load(self.pyfile.url, decode=True)
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- url = m.group(1)
- self.logDebug('Direct link: ' + url)
- else:
- self.parseError('Unable to get direct link')
-
- self.download(url, disposition=True)
-
-
-getInfo = create_getInfo(DataHu)
diff --git a/module/plugins/hoster/DataportCz.py b/module/plugins/hoster/DataportCz.py
deleted file mode 100644
index 56b2c2398..000000000
--- a/module/plugins/hoster/DataportCz.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class DataportCz(SimpleHoster):
- __name__ = "DataportCz"
- __type__ = "hoster"
- __version__ = "0.37"
-
- __pattern__ = r'http://(?:www\.)?dataport.cz/file/(.*)'
-
- __description__ = """Dataport.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<span itemprop="name">(?P<N>[^<]+)</span>'
- FILE_SIZE_PATTERN = r'<td class="fil">Velikost</td>\s*<td>(?P<S>[^<]+)</td>'
- OFFLINE_PATTERN = r'<h2>Soubor nebyl nalezen</h2>'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.dataport.cz/file/\1')]
-
- CAPTCHA_URL_PATTERN = r'<section id="captcha_bg">\s*<img src="(.*?)"'
- FREE_SLOTS_PATTERN = ur'Počet volnÜch slotů: <span class="darkblue">(\d+)</span><br />'
-
-
- def handleFree(self):
- captchas = {"1": "jkeG", "2": "hMJQ", "3": "vmEK", "4": "ePQM", "5": "blBd"}
-
- for _ in xrange(60):
- action, inputs = self.parseHtmlForm('free_download_form')
- self.logDebug(action, inputs)
- if not action or not inputs:
- self.parseError('free_download_form')
-
- if "captchaId" in inputs and inputs['captchaId'] in captchas:
- inputs['captchaCode'] = captchas[inputs['captchaId']]
- else:
- self.parseError('captcha')
-
- self.html = self.download("http://www.dataport.cz%s" % action, post=inputs)
-
- check = self.checkDownload({"captcha": 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");',
- "slot": 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'})
- if check == "captcha":
- self.parseError('invalid captcha')
- elif check == "slot":
- self.logDebug("No free slots - wait 60s and retry")
- self.wait(60, False)
- self.html = self.load(self.pyfile.url, decode=True)
- continue
- else:
- break
-
-
-create_getInfo(DataportCz)
diff --git a/module/plugins/hoster/DateiTo.py b/module/plugins/hoster/DateiTo.py
deleted file mode 100644
index ff8c430ee..000000000
--- a/module/plugins/hoster/DateiTo.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class DateiTo(SimpleHoster):
- __name__ = "DateiTo"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P<ID>\w+)\.html'
-
- __description__ = """Datei.to hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'Dateiname:</td>\s*<td colspan="2"><strong>(?P<N>.*?)</'
- FILE_SIZE_PATTERN = r'Dateigr&ouml;&szlig;e:</td>\s*<td colspan="2">(?P<S>.*?)</'
- OFFLINE_PATTERN = r'>Datei wurde nicht gefunden<|>Bitte wÀhle deine Datei aus... <'
- PARALELL_PATTERN = r'>Du lÀdst bereits eine Datei herunter<'
-
- WAIT_PATTERN = r'countdown\({seconds: (\d+)'
- DATA_PATTERN = r'url: "(.*?)", data: "(.*?)",'
- RECAPTCHA_KEY_PATTERN = r'Recaptcha.create\("(.*?)"'
-
-
- def handleFree(self):
- url = 'http://datei.to/ajax/download.php'
- data = {'P': 'I', 'ID': self.file_info['ID']}
-
- recaptcha = ReCaptcha(self)
-
- for _ in xrange(10):
- self.logDebug("URL", url, "POST", data)
- self.html = self.load(url, post=data)
- self.checkErrors()
-
- if url.endswith('download.php') and 'P' in data:
- if data['P'] == 'I':
- self.doWait()
-
- elif data['P'] == 'IV':
- break
-
- m = re.search(self.DATA_PATTERN, self.html)
- if m is None:
- self.parseError('data')
- url = 'http://datei.to/' + m.group(1)
- data = dict(x.split('=') for x in m.group(2).split('&'))
-
- if url.endswith('recaptcha.php'):
- m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
- recaptcha_key = m.group(1) if m else "6LdBbL8SAAAAAI0vKUo58XRwDd5Tu_Ze1DA7qTao"
-
- data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key)
-
- else:
- self.fail('Too bad...')
-
- download_url = self.html
- self.logDebug('Download URL', download_url)
- self.download(download_url)
-
- def checkErrors(self):
- m = re.search(self.PARALELL_PATTERN, self.html)
- if m:
- m = re.search(self.WAIT_PATTERN, self.html)
- wait_time = int(m.group(1)) if m else 30
- self.wait(wait_time + 1, False)
- self.retry()
-
- def doWait(self):
- m = re.search(self.WAIT_PATTERN, self.html)
- wait_time = int(m.group(1)) if m else 30
-
- self.load('http://datei.to/ajax/download.php', post={'P': 'Ads'})
- self.wait(wait_time + 1, False)
-
-
-getInfo = create_getInfo(DateiTo)
diff --git a/module/plugins/hoster/DdlstorageCom.py b/module/plugins/hoster/DdlstorageCom.py
deleted file mode 100644
index 4d77289d7..000000000
--- a/module/plugins/hoster/DdlstorageCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class DdlstorageCom(DeadHoster):
- __name__ = "DdlstorageCom"
- __type__ = "hoster"
- __version__ = "1.02"
-
- __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/\w+'
-
- __description__ = """DDLStorage.com hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
-getInfo = create_getInfo(DdlstorageCom)
diff --git a/module/plugins/hoster/DebridItaliaCom.py b/module/plugins/hoster/DebridItaliaCom.py
deleted file mode 100644
index 5880b2738..000000000
--- a/module/plugins/hoster/DebridItaliaCom.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class DebridItaliaCom(Hoster):
- __name__ = "DebridItaliaCom"
- __type__ = "hoster"
- __version__ = "0.05"
-
- __pattern__ = r'https?://(?:[^/]*\.)?debriditalia\.com'
-
- __description__ = """Debriditalia.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia")
- self.fail("No DebridItalia account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- url = "http://debriditalia.com/linkgen2.php?xjxfun=convertiLink&xjxargs[]=S<![CDATA[%s]]>" % pyfile.url
- page = self.load(url)
- self.logDebug("XML data: %s" % page)
-
- if 'File not available' in page:
- self.fail('File not available')
- else:
- new_url = re.search(r'<a href="(?:[^"]+)">(?P<direct>[^<]+)</a>', page).group('direct')
-
- if new_url != pyfile.url:
- self.logDebug("New URL: %s" % new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload({"empty": re.compile(r"^$")})
-
- if check == "empty":
- self.retry(5, 2 * 60, "Empty file downloaded")
diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py
deleted file mode 100644
index e2b2d46fd..000000000
--- a/module/plugins/hoster/DepositfilesCom.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class DepositfilesCom(SimpleHoster):
- __name__ = "DepositfilesCom"
- __type__ = "hoster"
- __version__ = "0.48"
-
- __pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)'
-
- __description__ = """Depositfiles.com hoster plugin"""
- __author_name__ = ("spoob", "zoidberg", "Walter Purcaro")
- __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "vuolter@gmail.com")
-
- FILE_NAME_PATTERN = r'<script type="text/javascript">eval\( unescape\(\'(?P<N>.*?)\''
- FILE_SIZE_PATTERN = r': <b>(?P<S>[0-9.]+)&nbsp;(?P<U>[kKMG])i?B</b>'
- OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>'
-
- FILE_NAME_REPLACEMENTS = [(r'\%u([0-9A-Fa-f]{4})', lambda m: unichr(int(m.group(1), 16))),
- (r'.*<b title="(?P<N>[^"]+).*', "\g<N>")]
- FILE_URL_REPLACEMENTS = [(__pattern__, "https://dfiles.eu/files/\g<ID>")]
-
- SH_COOKIES = [(".dfiles.eu", "lang_current", "en")]
-
- RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)'"
-
- FREE_LINK_PATTERN = r'<form id="downloader_file_form" action="(http://.+?\.(dfiles\.eu|depositfiles\.com)/.+?)" method="post"'
- PREMIUM_LINK_PATTERN = r'class="repeat"><a href="(.+?)"'
- PREMIUM_MIRROR_PATTERN = r'class="repeat_mirror"><a href="(.+?)"'
-
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, post={"gateway_result": "1"}, cookies=True)
-
- if re.search(r'File is checked, please try again in a minute.', self.html) is not None:
- self.logInfo("DepositFiles.com: The file is being checked. Waiting 1 minute.")
- self.wait(61)
- self.retry()
-
- wait = re.search(r'html_download_api-limit_interval\">(\d+)</span>', self.html)
- if wait:
- wait_time = int(wait.group(1))
- self.logInfo("%s: Traffic used up. Waiting %d seconds." % (self.__name__, wait_time))
- self.wait(wait_time, True)
- self.retry()
-
- wait = re.search(r'>Try in (\d+) minutes or use GOLD account', self.html)
- if wait:
- wait_time = int(wait.group(1))
- self.logInfo("%s: All free slots occupied. Waiting %d minutes." % (self.__name__, wait_time))
- self.setWait(wait_time * 60, False)
-
- wait = re.search(r'Please wait (\d+) sec', self.html)
- if wait:
- self.setWait(int(wait.group(1)))
-
- m = re.search(r"var fid = '(\w+)';", self.html)
- if m is None:
- self.retry(wait_time=5)
- params = {'fid': m.group(1)}
- self.logDebug("FID: %s" % params['fid'])
-
- captcha_key = '6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m'
- m = re.search(self.RECAPTCHA_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- self.logDebug("CAPTCHA_KEY: %s" % captcha_key)
-
- self.wait()
- recaptcha = ReCaptcha(self)
-
- for _ in xrange(5):
- self.html = self.load("https://dfiles.eu/get_file.php", get=params)
-
- if '<input type=button value="Continue" onclick="check_recaptcha' in self.html:
- if not captcha_key:
- self.parseError('Captcha key')
- if 'response' in params:
- self.invalidCaptcha()
- params['challenge'], params['response'] = recaptcha.challenge(captcha_key)
- self.logDebug(params)
- continue
-
- m = re.search(self.FREE_LINK_PATTERN, self.html)
- if m:
- if 'response' in params:
- self.correctCaptcha()
- link = unquote(m.group(1))
- self.logDebug("LINK: %s" % link)
- break
- else:
- self.parseError('Download link')
- else:
- self.fail('No valid captcha response received')
-
- try:
- self.download(link, disposition=True)
- except:
- self.retry(wait_time=60)
-
- def handlePremium(self):
- self.html = self.load(self.pyfile.url, cookies=self.SH_COOKIES)
-
- if '<span class="html_download_api-gold_traffic_limit">' in self.html:
- self.logWarning("Download limit reached")
- self.retry(25, 60 * 60, "Download limit reached")
- elif 'onClick="show_gold_offer' in self.html:
- self.account.relogin(self.user)
- self.retry()
- else:
- link = re.search(self.PREMIUM_LINK_PATTERN, self.html)
- mirror = re.search(self.PREMIUM_MIRROR_PATTERN, self.html)
- if link:
- dlink = link.group(1)
- elif mirror:
- dlink = mirror.group(1)
- else:
- self.parseError("No direct download link or mirror found")
- self.download(dlink, disposition=True)
-
-
-getInfo = create_getInfo(DepositfilesCom)
diff --git a/module/plugins/hoster/DlFreeFr.py b/module/plugins/hoster/DlFreeFr.py
deleted file mode 100644
index e25de18b4..000000000
--- a/module/plugins/hoster/DlFreeFr.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import pycurl
-import re
-
-from module.common.json_layer import json_loads
-from module.network.Browser import Browser
-from module.network.CookieJar import CookieJar
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns
-
-
-class CustomBrowser(Browser):
-
- def __init__(self, bucket=None, options={}):
- Browser.__init__(self, bucket, options)
-
- def load(self, *args, **kwargs):
- post = kwargs.get("post")
-
- if post is None and len(args) > 2:
- post = args[2]
-
- if post:
- self.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
- self.http.c.setopt(pycurl.POST, 1)
- self.http.c.setopt(pycurl.CUSTOMREQUEST, "POST")
- else:
- self.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
- self.http.c.setopt(pycurl.POST, 0)
- self.http.c.setopt(pycurl.CUSTOMREQUEST, "GET")
-
- return Browser.load(self, *args, **kwargs)
-
-
-class AdYouLike:
- """
- Class to support adyoulike captcha service
- """
- ADYOULIKE_INPUT_PATTERN = r'Adyoulike.create\((.*?)\);'
- ADYOULIKE_CALLBACK = r'Adyoulike.g._jsonp_5579316662423138'
- ADYOULIKE_CHALLENGE_PATTERN = ADYOULIKE_CALLBACK + r'\((.*?)\)'
-
- def __init__(self, plugin, engine="adyoulike"):
- self.plugin = plugin
- self.engine = engine
-
- def challenge(self, html):
- adyoulike_data_string = None
- m = re.search(self.ADYOULIKE_INPUT_PATTERN, html)
- if m:
- adyoulike_data_string = m.group(1)
- else:
- self.plugin.fail("Can't read AdYouLike input data")
-
- # {"adyoulike":{"key":"P~zQ~O0zV0WTiAzC-iw0navWQpCLoYEP"},
- # "all":{"element_id":"ayl_private_cap_92300","lang":"fr","env":"prod"}}
- ayl_data = json_loads(adyoulike_data_string)
-
- res = self.plugin.load(
- r'http://api-ayl.appspot.com/challenge?key=%(ayl_key)s&env=%(ayl_env)s&callback=%(callback)s' % {
- "ayl_key": ayl_data[self.engine]['key'], "ayl_env": ayl_data['all']['env'],
- "callback": self.ADYOULIKE_CALLBACK})
-
- m = re.search(self.ADYOULIKE_CHALLENGE_PATTERN, res)
- challenge_string = None
- if m:
- challenge_string = m.group(1)
- else:
- self.plugin.fail("Invalid AdYouLike challenge")
- challenge_data = json_loads(challenge_string)
-
- return ayl_data, challenge_data
-
- def result(self, ayl, challenge):
- """
- Adyoulike.g._jsonp_5579316662423138
- ({"translations":{"fr":{"instructions_visual":"Recopiez « Soonnight » ci-dessous :"}},
- "site_under":true,"clickable":true,"pixels":{"VIDEO_050":[],"DISPLAY":[],"VIDEO_000":[],"VIDEO_100":[],
- "VIDEO_025":[],"VIDEO_075":[]},"medium_type":"image/adyoulike",
- "iframes":{"big":"<iframe src=\"http://www.soonnight.com/campagn.html\" scrolling=\"no\"
- height=\"250\" width=\"300\" frameborder=\"0\"></iframe>"},"shares":{},"id":256,
- "token":"e6QuI4aRSnbIZJg02IsV6cp4JQ9~MjA1","formats":{"small":{"y":300,"x":0,"w":300,"h":60},
- "big":{"y":0,"x":0,"w":300,"h":250},"hover":{"y":440,"x":0,"w":300,"h":60}},
- "tid":"SqwuAdxT1EZoi4B5q0T63LN2AkiCJBg5"})
- """
- response = None
- try:
- instructions_visual = challenge['translations'][ayl['all']['lang']]['instructions_visual']
- m = re.search(u".*«(.*)».*", instructions_visual)
- if m:
- response = m.group(1).strip()
- else:
- self.plugin.fail("Can't parse instructions visual")
- except KeyError:
- self.plugin.fail("No instructions visual")
-
- #TODO: Supports captcha
-
- if not response:
- self.plugin.fail("AdYouLike result failed")
-
- return {"_ayl_captcha_engine": self.engine,
- "_ayl_env": ayl['all']['env'],
- "_ayl_tid": challenge['tid'],
- "_ayl_token_challenge": challenge['token'],
- "_ayl_response": response}
-
-
-class DlFreeFr(SimpleHoster):
- __name__ = "DlFreeFr"
- __type__ = "hoster"
- __version__ = "0.25"
-
- __pattern__ = r'http://(?:www\.)?dl\.free\.fr/([a-zA-Z0-9]+|getfile\.pl\?file=/[a-zA-Z0-9]+)'
-
- __description__ = """Dl.free.fr hoster plugin"""
- __author_name__ = ("the-razer", "zoidberg", "Toilal")
- __author_mail__ = ("daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", "toilal.dev@gmail.com")
-
- FILE_NAME_PATTERN = r'Fichier:</td>\s*<td[^>]*>(?P<N>[^>]*)</td>'
- FILE_SIZE_PATTERN = r'Taille:</td>\s*<td[^>]*>(?P<S>[\d.]+[KMG])o'
- OFFLINE_PATTERN = r"Erreur 404 - Document non trouv|Fichier inexistant|Le fichier demand&eacute; n'a pas &eacute;t&eacute; trouv&eacute;"
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
- self.limitDL = 5
- self.chunkLimit = 1
-
- def init(self):
- factory = self.core.requestFactory
- self.req = CustomBrowser(factory.bucket, factory.getOptions())
-
- def process(self, pyfile):
- self.req.setCookieJar(None)
-
- pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
- valid_url = pyfile.url
- headers = self.load(valid_url, just_header=True)
-
- self.html = None
- if headers.get('code') == 302:
- valid_url = headers.get('location')
- headers = self.load(valid_url, just_header=True)
-
- if headers.get('code') == 200:
- content_type = headers.get('content-type')
- if content_type and content_type.startswith("text/html"):
- # Undirect acces to requested file, with a web page providing it (captcha)
- self.html = self.load(valid_url)
- self.handleFree()
- else:
- # Direct access to requested file for users using free.fr as Internet Service Provider.
- self.download(valid_url, disposition=True)
- elif headers.get('code') == 404:
- self.offline()
- else:
- self.fail("Invalid return code: " + str(headers.get('code')))
-
- def handleFree(self):
- action, inputs = self.parseHtmlForm('action="getfile.pl"')
-
- adyoulike = AdYouLike(self)
- ayl, challenge = adyoulike.challenge(self.html)
- result = adyoulike.result(ayl, challenge)
- inputs.update(result)
-
- self.load("http://dl.free.fr/getfile.pl", post=inputs)
- headers = self.getLastHeaders()
- if headers.get("code") == 302 and "set-cookie" in headers and "location" in headers:
- m = re.search("(.*?)=(.*?); path=(.*?); domain=(.*?)", headers.get("set-cookie"))
- cj = CookieJar(__name__)
- if m:
- cj.setCookie(m.group(4), m.group(1), m.group(2), m.group(3))
- else:
- self.fail("Cookie error")
- location = headers.get("location")
- self.req.setCookieJar(cj)
- self.download(location, disposition=True)
- else:
- self.fail("Invalid response")
-
- def getLastHeaders(self):
- #parse header
- header = {"code": self.req.code}
- for line in self.req.http.header.splitlines():
- line = line.strip()
- if not line or ":" not in line:
- continue
-
- key, none, value = line.partition(":")
- key = key.lower().strip()
- value = value.strip()
-
- if key in header:
- if type(header[key]) == list:
- header[key].append(value)
- else:
- header[key] = [header[key], value]
- else:
- header[key] = value
- return header
-
-
-getInfo = create_getInfo(DlFreeFr)
diff --git a/module/plugins/hoster/DuploadOrg.py b/module/plugins/hoster/DuploadOrg.py
deleted file mode 100644
index c11d694c5..000000000
--- a/module/plugins/hoster/DuploadOrg.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class DuploadOrg(XFileSharingPro):
- __name__ = "DuploadOrg"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?dupload\.org/\w{12}'
-
- __description__ = """Dupload.grg hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- HOSTER_NAME = "dupload.org"
-
- FILE_INFO_PATTERN = r'<h3[^>]*>(?P<N>.+) \((?P<S>[\d.]+) (?P<U>\w+)\)</h3>'
-
-
-getInfo = create_getInfo(DuploadOrg)
diff --git a/module/plugins/hoster/EasybytezCom.py b/module/plugins/hoster/EasybytezCom.py
deleted file mode 100644
index f9dfe6a13..000000000
--- a/module/plugins/hoster/EasybytezCom.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class EasybytezCom(XFileSharingPro):
- __name__ = "EasybytezCom"
- __type__ = "hoster"
- __version__ = "0.18"
-
- __pattern__ = r'http://(?:www\.)?easybytez.com/(\w+).*'
-
- __description__ = """Easybytez.com hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- HOSTER_NAME = "easybytez.com"
-
- FILE_INFO_PATTERN = r'<span class="name">(?P<N>.+)</span><br>\s*<span class="size">(?P<S>[^<]+)</span>'
- OFFLINE_PATTERN = r'<h1>File not available</h1>'
-
- LINK_PATTERN = r'(http://(\w+\.(easyload|easybytez|zingload)\.(com|to)|\d+\.\d+\.\d+\.\d+)/files/\d+/\w+/[^"<]+)'
- OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)'
- ERROR_PATTERN = r'(?:class=["\']err["\'][^>]*>|<Center><b>)(.*?)</'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
-
-
-getInfo = create_getInfo(EasybytezCom)
diff --git a/module/plugins/hoster/EdiskCz.py b/module/plugins/hoster/EdiskCz.py
deleted file mode 100644
index 449dc0050..000000000
--- a/module/plugins/hoster/EdiskCz.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class EdiskCz(SimpleHoster):
- __name__ = "EdiskCz"
- __type__ = "hoster"
- __version__ = "0.21"
-
- __pattern__ = r'http://(?:www\.)?edisk.(cz|sk|eu)/(stahni|sk/stahni|en/download)/.*'
-
- __description__ = """Edisk.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<span class="fl" title="(?P<N>[^"]+)">\s*.*?\((?P<S>[0-9.]*) (?P<U>[kKMG])i?B\)</h1></span>'
- OFFLINE_PATTERN = r'<h3>This file does not exist due to one of the following:</h3><ul><li>'
-
- ACTION_PATTERN = r'/en/download/(\d+/.*\.html)'
- LINK_PATTERN = r'http://.*edisk.cz.*\.html'
-
-
- def setup(self):
- self.multiDL = False
-
- def process(self, pyfile):
- url = re.sub("/(stahni|sk/stahni)/", "/en/download/", pyfile.url)
-
- self.logDebug('URL:' + url)
-
- m = re.search(self.ACTION_PATTERN, url)
- if m is None:
- self.parseError("ACTION")
- action = m.group(1)
-
- self.html = self.load(url, decode=True)
- self.getFileInfo()
-
- self.html = self.load(re.sub("/en/download/", "/en/download-slow/", url))
-
- url = self.load(re.sub("/en/download/", "/x-download/", url), post={
- "action": action
- })
-
- if not re.match(self.LINK_PATTERN, url):
- self.fail("Unexpected server response")
-
- self.download(url)
-
-
-getInfo = create_getInfo(EdiskCz)
diff --git a/module/plugins/hoster/EgoFilesCom.py b/module/plugins/hoster/EgoFilesCom.py
deleted file mode 100644
index 547f042e4..000000000
--- a/module/plugins/hoster/EgoFilesCom.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class EgoFilesCom(SimpleHoster):
- __name__ = "EgoFilesCom"
- __type__ = "hoster"
- __version__ = "0.15"
-
- __pattern__ = r'https?://(?:www\.)?egofiles.com/(\w+)'
-
- __description__ = """Egofiles.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_INFO_PATTERN = r'<div class="down-file">\s+(?P<N>[^\t]+)\s+<div class="file-properties">\s+(File size|Rozmiar): (?P<S>[\w.]+) (?P<U>\w+) \|'
- OFFLINE_PATTERN = r'(File size|Rozmiar): 0 KB'
- WAIT_TIME_PATTERN = r'For next free download you have to wait <strong>((?P<m>\d*)m)? ?((?P<s>\d+)s)?</strong>'
- LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>'
- RECAPTCHA_KEY = "6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX"
-
-
- def setup(self):
- # Set English language
- self.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True)
-
- def process(self, pyfile):
- if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
- self.handlePremium()
- else:
- self.handleFree()
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
- self.getFileInfo()
-
- # Wait time between free downloads
- if 'For next free download you have to wait' in self.html:
- m = re.search(self.WAIT_TIME_PATTERN, self.html).groupdict('0')
- waittime = int(m['m']) * 60 + int(m['s'])
- self.wait(waittime, True)
-
- downloadURL = r''
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- post_data = {'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': response}
- self.html = self.load(self.pyfile.url, post=post_data, decode=True)
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.logInfo('Wrong captcha')
- self.invalidCaptcha()
- elif hasattr(m, 'group'):
- downloadURL = m.group('link')
- self.correctCaptcha()
- break
- else:
- self.fail('Unknown error - Plugin may be out of date')
-
- if not downloadURL:
- self.fail("No Download url retrieved/all captcha attempts failed")
-
- self.download(downloadURL, disposition=True)
-
- def handlePremium(self):
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header:
- self.logDebug('DIRECT LINK from header: ' + header['location'])
- self.download(header['location'])
- else:
- self.html = self.load(self.pyfile.url, decode=True)
- self.getFileInfo()
- m = re.search(r'<a href="(?P<link>[^"]+)">Download ></a>', self.html)
- if m is None:
- self.parseError('Unable to detect direct download url')
- else:
- self.logDebug('DIRECT URL from html: ' + m.group('link'))
- self.download(m.group('link'), disposition=True)
-
-
-getInfo = create_getInfo(EgoFilesCom)
diff --git a/module/plugins/hoster/EpicShareNet.py b/module/plugins/hoster/EpicShareNet.py
deleted file mode 100644
index 73b16c08e..000000000
--- a/module/plugins/hoster/EpicShareNet.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://epicshare.net/fch3m2bk6ihp/BigBuckBunny_320x180.mp4.html
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class EpicShareNet(XFileSharingPro):
- __name__ = "EpicShareNet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?epicshare\.net/\w{12}'
-
- __description__ = """EpicShare.net hoster plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- HOSTER_NAME = "epicshare.net"
-
- OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
- FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>'
-
-
-getInfo = create_getInfo(EpicShareNet)
diff --git a/module/plugins/hoster/EuroshareEu.py b/module/plugins/hoster/EuroshareEu.py
deleted file mode 100644
index fdb76cd5c..000000000
--- a/module/plugins/hoster/EuroshareEu.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class EuroshareEu(SimpleHoster):
- __name__ = "EuroshareEu"
- __type__ = "hoster"
- __version__ = "0.25"
-
- __pattern__ = r'http://(?:www\.)?euroshare.(eu|sk|cz|hu|pl)/file/.*'
-
- __description__ = """Euroshare.eu hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<span style="float: left;"><strong>(?P<N>.+?)</strong> \((?P<S>.+?)\)</span>'
- OFFLINE_PATTERN = ur'<h2>S.bor sa nena.iel</h2>|Poşadovaná stránka neexistuje!'
-
- FREE_URL_PATTERN = r'<a href="(/file/\d+/[^/]*/download/)"><div class="downloadButton"'
- ERR_PARDL_PATTERN = r'<h2>Prebieha s.ahovanie</h2>|<p>Naraz je z jednej IP adresy mo.n. s.ahova. iba jeden s.bor'
- ERR_NOT_LOGGED_IN_PATTERN = r'href="/customer-zone/login/"'
-
- FILE_URL_REPLACEMENTS = [(r"(http://[^/]*\.)(sk|cz|hu|pl)/", r"\1eu/")]
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = self.premium
- self.req.setOption("timeout", 120)
-
- def handlePremium(self):
- if self.ERR_NOT_LOGGED_IN_PATTERN in self.html:
- self.account.relogin(self.user)
- self.retry(reason="User not logged in")
-
- self.download(self.pyfile.url.rstrip('/') + "/download/")
-
- check = self.checkDownload({"login": re.compile(self.ERR_NOT_LOGGED_IN_PATTERN),
- "json": re.compile(r'\{"status":"error".*?"message":"(.*?)"')})
- if check == "login" or (check == "json" and self.lastCheck.group(1) == "Access token expired"):
- self.account.relogin(self.user)
- self.retry(reason="Access token expired")
- elif check == "json":
- self.fail(self.lastCheck.group(1))
-
- def handleFree(self):
- if re.search(self.ERR_PARDL_PATTERN, self.html) is not None:
- self.longWait(5 * 60, 12)
-
- m = re.search(self.FREE_URL_PATTERN, self.html)
- if m is None:
- self.parseError("Parse error (URL)")
- parsed_url = "http://euroshare.eu%s" % m.group(1)
- self.logDebug("URL", parsed_url)
- self.download(parsed_url, disposition=True)
-
- check = self.checkDownload({"multi_dl": re.compile(self.ERR_PARDL_PATTERN)})
- if check == "multi_dl":
- self.longWait(5 * 60, 12)
-
-
-getInfo = create_getInfo(EuroshareEu)
diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py
deleted file mode 100644
index 2409d8517..000000000
--- a/module/plugins/hoster/ExtabitCom.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class ExtabitCom(SimpleHoster):
- __name__ = "ExtabitCom"
- __type__ = "hoster"
- __version__ = "0.6"
-
- __pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)'
-
- __description__ = """Extabit.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<th>File:</th>\s*<td class="col-fileinfo">\s*<div title="(?P<N>[^"]+)">'
- FILE_SIZE_PATTERN = r'<th>Size:</th>\s*<td class="col-fileinfo">(?P<S>[^<]+)</td>'
- OFFLINE_PATTERN = r'>File not found<'
- TEMP_OFFLINE_PATTERN = r'>(File is temporary unavailable|No download mirror)<'
-
- LINK_PATTERN = r'[\'"](http://guest\d+\.extabit\.com/[a-z0-9]+/.*?)[\'"]'
-
-
- def handleFree(self):
- if r">Only premium users can download this file" in self.html:
- self.fail("Only premium users can download this file")
-
- m = re.search(r"Next free download from your ip will be available in <b>(\d+)\s*minutes", self.html)
- if m:
- self.wait(int(m.group(1)) * 60, True)
- elif "The daily downloads limit from your IP is exceeded" in self.html:
- self.logWarning("You have reached your daily downloads limit for today")
- self.wait(secondsToMidnight(gmt=2), True)
-
- self.logDebug("URL: " + self.req.http.lastEffectiveURL)
- m = re.match(self.__pattern__, self.req.http.lastEffectiveURL)
- fileID = m.group('ID') if m else self.file_info('ID')
-
- m = re.search(r'recaptcha/api/challenge\?k=(\w+)', self.html)
- if m:
- recaptcha = ReCaptcha(self)
- captcha_key = m.group(1)
-
- for _ in xrange(5):
- get_data = {"type": "recaptcha"}
- get_data['challenge'], get_data['capture'] = recaptcha.challenge(captcha_key)
- response = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data))
- if "ok" in response:
- self.correctCaptcha()
- break
- else:
- self.invalidCaptcha()
- else:
- self.fail("Invalid captcha")
- else:
- self.parseError('Captcha')
-
- if not "href" in response:
- self.parseError('JSON')
-
- self.html = self.load("http://extabit.com/file/%s%s" % (fileID, response['href']))
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError('Download URL')
- url = m.group(1)
- self.logDebug("Download URL: " + url)
- self.download(url)
-
-
-getInfo = create_getInfo(ExtabitCom)
diff --git a/module/plugins/hoster/FastixRu.py b/module/plugins/hoster/FastixRu.py
deleted file mode 100644
index 199544840..000000000
--- a/module/plugins/hoster/FastixRu.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import randrange
-from urllib import unquote
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-class FastixRu(Hoster):
- __name__ = "FastixRu"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?fastix\.(ru|it)/file/(?P<ID>[a-zA-Z0-9]{24})'
-
- __description__ = """Fastix hoster plugin"""
- __author_name__ = "Massimo Rosamilia"
- __author_mail__ = "max@spiritix.eu"
-
-
- def getFilename(self, url):
- try:
- name = unquote(url.rsplit("/", 1)[1])
- except IndexError:
- name = "Unknown_Filename..."
- if name.endswith("..."): # incomplete filename, append random stuff
- name += "%s.tmp" % randrange(100, 999)
- return name
-
- def setup(self):
- self.chunkLimit = 3
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix")
- self.fail("No Fastix account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- api_key = self.account.getAccountData(self.user)
- api_key = api_key['api']
- url = "http://fastix.ru/api_v2/?apikey=%s&sub=getdirectlink&link=%s" % (api_key, pyfile.url)
- page = self.load(url)
- data = json_loads(page)
- self.logDebug("Json data: %s" % str(data))
- if "error\":true" in page:
- self.offline()
- else:
- new_url = data['downloadlink']
-
- if new_url != pyfile.url:
- self.logDebug("New URL: %s" % new_url)
-
- if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):
- #only use when name wasnt already set
- pyfile.name = self.getFilename(new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload({"error": "<title>An error occurred while processing your request</title>",
- "empty": re.compile(r"^$")})
-
- if check == "error":
- self.retry(wait_time=60, reason="An error occurred while generating link.")
- elif check == "empty":
- self.retry(wait_time=60, reason="Downloaded File was empty.")
diff --git a/module/plugins/hoster/FastshareCz.py b/module/plugins/hoster/FastshareCz.py
deleted file mode 100644
index 7a847fdc4..000000000
--- a/module/plugins/hoster/FastshareCz.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://www.fastshare.cz/2141189/random.bin
-
-import re
-
-from urlparse import urljoin
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FastshareCz(SimpleHoster):
- __name__ = "FastshareCz"
- __type__ = "hoster"
- __version__ = "0.22"
-
- __pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+'
-
- __description__ = """FastShare.cz hoster plugin"""
- __author_name__ = ("zoidberg", "stickell", "Walter Purcaro")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com")
-
- FILE_INFO_PATTERN = r'<h1 class="dwp">(?P<N>[^<]+)</h1>\s*<div class="fileinfo">\s*Size\s*: (?P<S>\d+) (?P<U>\w+),'
- OFFLINE_PATTERN = r'>(The file has been deleted|Requested page not found)'
-
- FILE_URL_REPLACEMENTS = [("#.*", "")]
-
- SH_COOKIES = [(".fastshare.cz", "lang", "en")]
-
- FREE_URL_PATTERN = r'action=(/free/.*?)>\s*<img src="([^"]*)"><br'
- PREMIUM_URL_PATTERN = r'(http://data\d+\.fastshare\.cz/download\.php\?id=\d+&)'
- CREDIT_PATTERN = r' credit for '
-
-
- def handleFree(self):
- if "> 100% of FREE slots are full" in self.html:
- self.retry(120, 60, "No free slots")
-
- m = re.search(self.FREE_URL_PATTERN, self.html)
- if m:
- action, captcha_src = m.groups()
- else:
- self.parseError("Free URL")
-
- baseurl = "http://www.fastshare.cz"
- captcha = self.decryptCaptcha(urljoin(baseurl, captcha_src))
- self.download(urljoin(baseurl, action), post={"code": captcha, "btn.x": 77, "btn.y": 18})
-
- check = self.checkDownload({
- "paralell_dl":
- "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)",
- "wrong_captcha": "Download for FREE"
- })
-
- if check == "paralell_dl":
- self.retry(6, 10 * 60, "Paralell download")
- elif check == "wrong_captcha":
- self.retry(max_tries=5, reason="Wrong captcha")
-
- def handlePremium(self):
- header = self.load(self.pyfile.url, just_header=True)
- if "location" in header:
- url = header['location']
- else:
- self.html = self.load(self.pyfile.url)
-
- self.getFileInfo() #
-
- if self.CREDIT_PATTERN in self.html:
- self.logWarning("Not enough traffic left")
- self.resetAccount()
- else:
- m = re.search(self.PREMIUM_URL_PATTERN, self.html)
- if m:
- url = m.group(1)
- else:
- self.parseError("Premium URL")
-
- self.logDebug("PREMIUM URL: " + url)
- self.download(url, disposition=True)
-
- check = self.checkDownload({"credit": re.compile(self.CREDIT_PATTERN)})
- if check == "credit":
- self.resetAccount()
-
-
-getInfo = create_getInfo(FastshareCz)
diff --git a/module/plugins/hoster/File4safeCom.py b/module/plugins/hoster/File4safeCom.py
deleted file mode 100644
index 7ec775103..000000000
--- a/module/plugins/hoster/File4safeCom.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class File4safeCom(XFileSharingPro):
- __name__ = "File4safeCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:www\.)?file4safe\.com/\w+'
-
- __description__ = """File4safe.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- HOSTER_NAME = "file4safe.com"
-
-
- def handlePremium(self):
- self.req.http.lastURL = self.pyfile.url
-
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.load(self.pyfile.url, post=self.getPostParameters(), decode=True)
- self.header = self.req.http.header
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
-
- m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
- if m and re.match(self.LINK_PATTERN, m.group(1)):
- location = m.group(1).strip()
- self.startDownload(location)
- else:
- self.parseError("Unable to detect premium download link")
-
-
-getInfo = create_getInfo(File4safeCom)
diff --git a/module/plugins/hoster/FileApeCom.py b/module/plugins/hoster/FileApeCom.py
deleted file mode 100644
index 91744c7c2..000000000
--- a/module/plugins/hoster/FileApeCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class FileApeCom(DeadHoster):
- __name__ = "FileApeCom"
- __type__ = "hoster"
- __version__ = "0.12"
-
- __pattern__ = r'http://(?:www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+'
-
- __description__ = """FileApe.com hoster plugin"""
- __author_name__ = "espes"
- __author_mail__ = None
-
-
-getInfo = create_getInfo(FileApeCom)
diff --git a/module/plugins/hoster/FileParadoxIn.py b/module/plugins/hoster/FileParadoxIn.py
deleted file mode 100644
index d6395b130..000000000
--- a/module/plugins/hoster/FileParadoxIn.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class FileParadoxIn(XFileSharingPro):
- __name__ = "FileParadoxIn"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?fileparadox\.in/\w+'
-
- __description__ = """FileParadox.in hoster plugin"""
- __author_name__ = "RazorWing"
- __author_mail__ = "muppetuk1@hotmail.com"
-
- HOSTER_NAME = "fileparadox.in"
-
- FILE_SIZE_PATTERN = r'</font>\s*\(\s*(?P<S>[^)]+)\s*\)</font>'
- LINK_PATTERN = r'(http://([^/]*?fileparadox.in|\d+\.\d+\.\d+\.\d+)(:\d+/d/|/files/\w+/\w+/)[^"\'<]+)'
-
-
-getInfo = create_getInfo(FileParadoxIn)
diff --git a/module/plugins/hoster/FileStoreTo.py b/module/plugins/hoster/FileStoreTo.py
deleted file mode 100644
index 98d67609a..000000000
--- a/module/plugins/hoster/FileStoreTo.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FileStoreTo(SimpleHoster):
- __name__ = "FileStoreTo"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?filestore\.to/\?d=(?P<ID>\w+)'
-
- __description__ = """FileStore.to hoster plugin"""
- __author_name__ = ("Walter Purcaro", "stickell")
- __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it")
-
- FILE_INFO_PATTERN = r'File: <span[^>]*>(?P<N>.+)</span><br />Size: (?P<S>[\d,.]+) (?P<U>\w+)'
- OFFLINE_PATTERN = r'>Download-Datei wurde nicht gefunden<'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def handleFree(self):
- self.wait(10)
- ldc = re.search(r'wert="(\w+)"', self.html).group(1)
- link = self.load("http://filestore.to/ajax/download.php", get={"LDC": ldc})
- self.logDebug("Download link = " + link)
- self.download(link)
-
-
-getInfo = create_getInfo(FileStoreTo)
diff --git a/module/plugins/hoster/FilebeerInfo.py b/module/plugins/hoster/FilebeerInfo.py
deleted file mode 100644
index 3e8cfb6a3..000000000
--- a/module/plugins/hoster/FilebeerInfo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class FilebeerInfo(DeadHoster):
- __name__ = "FilebeerInfo"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?filebeer\.info/(?!\d*~f)(?P<ID>\w+).*'
-
- __description__ = """Filebeer.info plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(FilebeerInfo)
diff --git a/module/plugins/hoster/FilecloudIo.py b/module/plugins/hoster/FilecloudIo.py
deleted file mode 100644
index 025bd483f..000000000
--- a/module/plugins/hoster/FilecloudIo.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FilecloudIo(SimpleHoster):
- __name__ = "FilecloudIo"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+).*'
-
- __description__ = """Filecloud.io hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- FILE_SIZE_PATTERN = r'{var __ab1 = (?P<S>\d+);}'
- FILE_NAME_PATTERN = r'id="aliasSpan">(?P<N>.*?)&nbsp;&nbsp;<'
- OFFLINE_PATTERN = r'l10n.(FILES__DOESNT_EXIST|REMOVED)'
- TEMP_OFFLINE_PATTERN = r'l10n.FILES__WARNING'
-
- UKEY_PATTERN = r"'ukey'\s*:'(\w+)',"
- AB1_PATTERN = r"if\( __ab1 == '(\w+)' \)"
- ERROR_MSG_PATTERN = r'var __error_msg\s*=\s*l10n\.(.*?);'
- LINK_PATTERN = r'"(http://s\d+.filecloud.io/%s/\d+/.*?)"'
- RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';"
- RECAPTCHA_KEY = "6Lf5OdISAAAAAEZObLcx5Wlv4daMaASRov1ysDB1"
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = 1
-
- def handleFree(self):
- data = {"ukey": self.file_info['ID']}
-
- m = re.search(self.AB1_PATTERN, self.html)
- if m is None:
- self.parseError("__AB1")
- data['__ab1'] = m.group(1)
-
- if not self.account:
- self.fail("User not logged in")
- elif not self.account.logged_in:
- recaptcha = ReCaptcha(self)
- captcha_challenge, captcha_response = recaptcha.challenge(self.RECAPTCHA_KEY)
- self.account.form_data = {"recaptcha_challenge_field": captcha_challenge,
- "recaptcha_response_field": captcha_response}
- self.account.relogin(self.user)
- self.retry(2)
-
- json_url = "http://filecloud.io/download-request.json"
- response = self.load(json_url, post=data)
- self.logDebug(response)
- response = json_loads(response)
-
- if "error" in response and response['error']:
- self.fail(response)
-
- self.logDebug(response)
- if response['captcha']:
- recaptcha = ReCaptcha(self)
- m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
- captcha_key = m.group(1) if m else self.RECAPTCHA_KEY
- data['ctype'] = "recaptcha"
-
- for _ in xrange(5):
- data['recaptcha_challenge'], data['recaptcha_response'] = recaptcha.challenge(captcha_key)
-
- json_url = "http://filecloud.io/download-request.json"
- response = self.load(json_url, post=data)
- self.logDebug(response)
- response = json_loads(response)
-
- if "retry" in response and response['retry']:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("Incorrect captcha")
-
- if response['dl']:
- self.html = self.load('http://filecloud.io/download.html')
- m = re.search(self.LINK_PATTERN % self.file_info['ID'], self.html)
- if m is None:
- self.parseError("Download URL")
- download_url = m.group(1)
- self.logDebug("Download URL: %s" % download_url)
-
- if "size" in self.file_info and self.file_info['size']:
- self.check_data = {"size": int(self.file_info['size'])}
- self.download(download_url)
- else:
- self.fail("Unexpected server response")
-
- def handlePremium(self):
- akey = self.account.getAccountData(self.user)['akey']
- ukey = self.file_info['ID']
- self.logDebug("Akey: %s | Ukey: %s" % (akey, ukey))
- rep = self.load("http://api.filecloud.io/api-fetch_download_url.api",
- post={"akey": akey, "ukey": ukey})
- self.logDebug("FetchDownloadUrl: " + rep)
- rep = json_loads(rep)
- if rep['status'] == 'ok':
- self.download(rep['download_url'], disposition=True)
- else:
- self.fail(rep['message'])
-
-
-getInfo = create_getInfo(FilecloudIo)
diff --git a/module/plugins/hoster/FilefactoryCom.py b/module/plugins/hoster/FilefactoryCom.py
deleted file mode 100644
index 1ac7550fc..000000000
--- a/module/plugins/hoster/FilefactoryCom.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
-
-
-def getInfo(urls):
- for url in urls:
- h = getURL(url, just_header=True)
- m = re.search(r'Location: (.+)\r\n', h)
- if m and not re.match(m.group(1), FilefactoryCom.__pattern__): # It's a direct link! Skipping
- yield (url, 0, 3, url)
- else: # It's a standard html page
- file_info = parseFileInfo(FilefactoryCom, url, getURL(url))
- yield file_info
-
-
-class FilefactoryCom(SimpleHoster):
- __name__ = "FilefactoryCom"
- __type__ = "hoster"
- __version__ = "0.50"
-
- __pattern__ = r'https?://(?:www\.)?filefactory\.com/file/(?P<id>[a-zA-Z0-9]+)'
-
- __description__ = """Filefactory.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_INFO_PATTERN = r'<div id="file_name"[^>]*>\s*<h2>(?P<N>[^<]+)</h2>\s*<div id="file_info">\s*(?P<S>[\d.]+) (?P<U>\w+) uploaded'
- LINK_PATTERN = r'<a href="(https?://[^"]+)"[^>]*><i[^>]*></i> Download with FileFactory Premium</a>'
- OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available'
- PREMIUM_ONLY_PATTERN = r'>Premium Account Required<'
-
- SH_COOKIES = [(".filefactory.com", "locale", "en_US.utf8")]
-
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
- if "Currently only Premium Members can download files larger than" in self.html:
- self.fail("File too large for free download")
- elif "All free download slots on this server are currently in use" in self.html:
- self.retry(50, 15 * 60, "All free slots are busy")
-
- m = re.search(r'data-href(?:-direct)?="(http://[^"]+)"', self.html)
- if m:
- t = re.search(r'<div id="countdown_clock" data-delay="(\d+)">', self.html)
- if t:
- t = t.group(1)
- else:
- self.logDebug("Unable to detect countdown duration. Guessing 60 seconds")
- t = 60
- self.wait(t)
- direct = m.group(1)
- else: # This section could be completely useless now
- # Load the page that contains the direct link
- url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html)
- if url is None:
- self.parseError('Unable to detect free link')
- url = 'http://www.filefactory.com' + url.group(1)
- self.html = self.load(url, decode=True)
-
- # Free downloads wait time
- waittime = re.search(r'id="startWait" value="(\d+)"', self.html)
- if not waittime:
- self.parseError('Unable to detect wait time')
- self.wait(int(waittime.group(1)))
-
- # Parse the direct link and download it
- direct = re.search(r'data-href(?:-direct)?="(.*)" class="button', self.html)
- if not direct:
- self.parseError('Unable to detect free direct link')
- direct = direct.group(1)
-
- self.logDebug('DIRECT LINK: ' + direct)
- self.download(direct, disposition=True)
-
- check = self.checkDownload({"multiple": "You are currently downloading too many files at once.",
- "error": '<div id="errorMessage">'})
-
- if check == "multiple":
- self.logDebug("Parallel downloads detected; waiting 15 minutes")
- self.retry(wait_time=15 * 60, reason="Parallel downloads")
- elif check == "error":
- self.fail("Unknown error")
-
- def handlePremium(self):
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header:
- url = header['location'].strip()
- if not url.startswith("http://"):
- url = "http://www.filefactory.com" + url
- elif 'content-disposition' in header:
- url = self.pyfile.url
- else:
- self.logInfo('You could enable "Direct Downloads" on http://filefactory.com/account/')
- html = self.load(self.pyfile.url)
- m = re.search(self.LINK_PATTERN, html)
- if m:
- url = m.group(1)
- else:
- self.parseError('Unable to detect premium direct link')
-
- self.logDebug('DIRECT PREMIUM LINK: ' + url)
- self.download(url, disposition=True)
diff --git a/module/plugins/hoster/FilejungleCom.py b/module/plugins/hoster/FilejungleCom.py
deleted file mode 100644
index 9380be90e..000000000
--- a/module/plugins/hoster/FilejungleCom.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.FileserveCom import FileserveCom, checkFile
-from module.plugins.Plugin import chunks
-
-
-class FilejungleCom(FileserveCom):
- __name__ = "FilejungleCom"
- __type__ = "hoster"
- __version__ = "0.51"
-
- __pattern__ = r'http://(?:www\.)?filejungle\.com/f/(?P<id>[^/]+).*'
-
- __description__ = """Filejungle.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- URLS = ["http://www.filejungle.com/f/", "http://www.filejungle.com/check_links.php",
- "http://www.filejungle.com/checkReCaptcha.php"]
- LINKCHECK_TR = r'<li>\s*(<div class="col1">.*?)</li>'
- LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>|&nbsp;)*([^<]*)'
-
- LONG_WAIT_PATTERN = r'<h1>Please wait for (\d+) (\w+)\s*to download the next file\.</h1>'
-
-
-def getInfo(urls):
- for chunk in chunks(urls, 100):
- yield checkFile(FilejungleCom, chunk)
diff --git a/module/plugins/hoster/FileomCom.py b/module/plugins/hoster/FileomCom.py
deleted file mode 100644
index 2f876466b..000000000
--- a/module/plugins/hoster/FileomCom.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://fileom.com/gycaytyzdw3g/random.bin.html
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class FileomCom(XFileSharingPro):
- __name__ = "FileomCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?fileom\.com/\w+'
-
- __description__ = """Fileom.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- HOSTER_NAME = "fileom.com"
-
- FILE_URL_REPLACEMENTS = [(r'/$', "")]
- SH_COOKIES = [(".fileom.com", "lang", "english")]
-
- FILE_NAME_PATTERN = r'Filename: <span>(?P<N>.+?)<'
- FILE_SIZE_PATTERN = r'File Size: <span class="size">(?P<S>[\d\.]+) (?P<U>\w+)'
-
- ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)(?:\'|</)'
-
- LINK_PATTERN = r"var url2 = '(.+?)';"
-
-
- def setup(self):
- self.resumeDownload = self.premium
- self.multiDL = True
- self.chunkLimit = 1
-
-
-getInfo = create_getInfo(FileomCom)
diff --git a/module/plugins/hoster/FilepostCom.py b/module/plugins/hoster/FilepostCom.py
deleted file mode 100644
index 0e1b6ea5a..000000000
--- a/module/plugins/hoster/FilepostCom.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import time
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FilepostCom(SimpleHoster):
- __name__ = "FilepostCom"
- __type__ = "hoster"
- __version__ = "0.28"
-
- __pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp.io)/([^/]+).*'
-
- __description__ = """Filepost.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<input type="text" id="url" value=\'<a href[^>]*>(?P<N>[^>]+?) - (?P<S>[0-9\.]+ [kKMG]i?B)</a>\' class="inp_text"/>'
- OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>|<div class="file_info file_info_deleted">'
-
- PREMIUM_ONLY_PATTERN = r'members only. Please upgrade to premium|a premium membership is required to download this file'
- RECAPTCHA_KEY_PATTERN = r"Captcha.init\({\s*key:\s*'([^']+)'"
- FLP_TOKEN_PATTERN = r"set_store_options\({token: '([^']+)'"
-
-
- def handleFree(self):
- # Find token and captcha key
- file_id = re.match(self.__pattern__, self.pyfile.url).group(1)
-
- m = re.search(self.FLP_TOKEN_PATTERN, self.html)
- if m is None:
- self.parseError("Token")
- flp_token = m.group(1)
-
- m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
- if m is None:
- self.parseError("Captcha key")
- captcha_key = m.group(1)
-
- # Get wait time
- get_dict = {'SID': self.req.cj.getCookie('SID'), 'JsHttpRequest': str(int(time() * 10000)) + '-xml'}
- post_dict = {'action': 'set_download', 'token': flp_token, 'code': file_id}
- wait_time = int(self.getJsonResponse(get_dict, post_dict, 'wait_time'))
-
- if wait_time > 0:
- self.wait(wait_time)
-
- post_dict = {"token": flp_token, "code": file_id, "file_pass": ''}
-
- if 'var is_pass_exists = true;' in self.html:
- # Solve password
- for file_pass in self.getPassword().splitlines():
- get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml'
- post_dict['file_pass'] = file_pass
- self.logInfo("Password protected link, trying " + file_pass)
-
- download_url = self.getJsonResponse(get_dict, post_dict, 'link')
- if download_url:
- break
-
- else:
- self.fail("No or incorrect password")
-
- else:
- # Solve recaptcha
- recaptcha = ReCaptcha(self)
-
- for i in xrange(5):
- get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml'
- if i:
- post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'] = recaptcha.challenge(
- captcha_key)
- self.logDebug(u"RECAPTCHA: %s : %s : %s" % (
- captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field']))
-
- download_url = self.getJsonResponse(get_dict, post_dict, 'link')
- if download_url:
- if i:
- self.correctCaptcha()
- break
- elif i:
- self.invalidCaptcha()
-
- else:
- self.fail("Invalid captcha")
-
- # Download
- self.download(download_url)
-
- def getJsonResponse(self, get_dict, post_dict, field):
- json_response = json_loads(self.load('https://filepost.com/files/get/', get=get_dict, post=post_dict))
- self.logDebug(json_response)
-
- if not 'js' in json_response:
- self.parseError('JSON %s 1' % field)
-
- # i changed js_answer to json_response['js'] since js_answer is nowhere set.
- # i don't know the JSON-HTTP specs in detail, but the previous author
- # accessed json_response['js']['error'] as well as js_answer['error'].
- # see the two lines commented out with "# ~?".
- if 'error' in json_response['js']:
- if json_response['js']['error'] == 'download_delay':
- self.retry(wait_time=json_response['js']['params']['next_download'])
- # ~? self.retry(wait_time=js_answer['params']['next_download'])
- elif 'Wrong file password' in json_response['js']['error']:
- return None
- elif 'You entered a wrong CAPTCHA code' in json_response['js']['error']:
- return None
- elif 'CAPTCHA Code nicht korrekt' in json_response['js']['error']:
- return None
- elif 'CAPTCHA' in json_response['js']['error']:
- self.logDebug('error response is unknown, but mentions CAPTCHA -> return None')
- return None
- else:
- self.fail(json_response['js']['error'])
- # ~? self.fail(js_answer['error'])
-
- if not 'answer' in json_response['js'] or not field in json_response['js']['answer']:
- self.parseError('JSON %s 2' % field)
-
- return json_response['js']['answer'][field]
-
-
-getInfo = create_getInfo(FilepostCom)
diff --git a/module/plugins/hoster/FilerNet.py b/module/plugins/hoster/FilerNet.py
deleted file mode 100644
index a36607f8a..000000000
--- a/module/plugins/hoster/FilerNet.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://filer.net/get/ivgf5ztw53et3ogd
-# http://filer.net/get/hgo14gzcng3scbvv
-
-import pycurl
-import re
-
-from urlparse import urljoin
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FilerNet(SimpleHoster):
- __name__ = "FilerNet"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'https?://(?:www\.)?filer\.net/get/(\w+)'
-
- __description__ = """Filer.net hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_INFO_PATTERN = r'<h1 class="page-header">Free Download (?P<N>\S+) <small>(?P<S>[\w.]+) (?P<U>\w+)</small></h1>'
- OFFLINE_PATTERN = r'Nicht gefunden'
- RECAPTCHA_KEY = "6LcFctISAAAAAAgaeHgyqhNecGJJRnxV1m_vAz3V"
- LINK_PATTERN = r'href="([^"]+)">Get download</a>'
-
-
- def process(self, pyfile):
- if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
- self.handlePremium()
- else:
- self.handleFree()
-
- def handleFree(self):
- self.req.setOption("timeout", 120)
- self.html = self.load(self.pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
-
- # Wait between downloads
- m = re.search(r'musst du <span id="time">(\d+)</span> Sekunden warten', self.html)
- if m:
- waittime = int(m.group(1))
- self.retry(3, waittime, "Wait between free downloads")
-
- self.getFileInfo()
-
- self.html = self.load(self.pyfile.url, decode=True)
-
- inputs = self.parseHtmlForm(input_names='token')[1]
- if 'token' not in inputs:
- self.parseError('Unable to detect token')
- token = inputs['token']
- self.logDebug('Token: ' + token)
-
- self.html = self.load(self.pyfile.url, post={'token': token}, decode=True)
-
- inputs = self.parseHtmlForm(input_names='hash')[1]
- if 'hash' not in inputs:
- self.parseError('Unable to detect hash')
- hash_data = inputs['hash']
- self.logDebug('Hash: ' + hash_data)
-
- downloadURL = r''
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- post_data = {'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': response,
- 'hash': hash_data}
-
- # Workaround for 0.4.9 just_header issue. In 0.5 clean the code using just_header
- self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
- self.load(self.pyfile.url, post=post_data)
- self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
-
- if 'location' in self.req.http.header.lower():
- location = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1)
- downloadURL = urljoin('http://filer.net', location)
- self.correctCaptcha()
- break
- else:
- self.logInfo('Wrong captcha')
- self.invalidCaptcha()
-
- if not downloadURL:
- self.fail("No Download url retrieved/all captcha attempts failed")
-
- self.download(downloadURL, disposition=True)
-
- def handlePremium(self):
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header: # Direct Download ON
- dl = self.pyfile.url
- else: # Direct Download OFF
- html = self.load(self.pyfile.url)
- m = re.search(self.LINK_PATTERN, html)
- if m is None:
- self.parseError("Unable to detect direct link, try to enable 'Direct download' in your user settings")
- dl = 'http://filer.net' + m.group(1)
-
- self.logDebug('Direct link: ' + dl)
- self.download(dl, disposition=True)
-
-
-getInfo = create_getInfo(FilerNet)
diff --git a/module/plugins/hoster/FilerioCom.py b/module/plugins/hoster/FilerioCom.py
deleted file mode 100644
index 5cac34b04..000000000
--- a/module/plugins/hoster/FilerioCom.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class FilerioCom(XFileSharingPro):
- __name__ = "FilerioCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?(filerio\.(in|com)|filekeen\.com)/\w{12}'
-
- __description__ = """FileRio.in hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "filerio.in"
-
- OFFLINE_PATTERN = r'<b>&quot;File Not Found&quot;</b>|File has been removed due to Copyright Claim'
- FILE_URL_REPLACEMENTS = [(r'http://.*?/', 'http://filerio.in/')]
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
-
-
-getInfo = create_getInfo(FilerioCom)
diff --git a/module/plugins/hoster/FilesMailRu.py b/module/plugins/hoster/FilesMailRu.py
deleted file mode 100644
index bbb6fa57b..000000000
--- a/module/plugins/hoster/FilesMailRu.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.plugins.Plugin import chunks
-
-
-def getInfo(urls):
- result = []
- for chunk in chunks(urls, 10):
- for url in chunk:
- src = getURL(url)
- if r'<div class="errorMessage mb10">' in src:
- result.append((url, 0, 1, url))
- elif r'Page cannot be displayed' in src:
- result.append((url, 0, 1, url))
- else:
- try:
- url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>'
- file_name = re.search(url_pattern, src).group(0).split(', event)">')[1].split('</a>')[0]
- result.append((file_name, 0, 2, url))
- except:
- pass
-
- # status 1=OFFLINE, 2=OK, 3=UNKNOWN
- # result.append((#name,#size,#status,#url))
- yield result
-
-
-class FilesMailRu(Hoster):
- __name__ = "FilesMailRu"
- __type__ = "hoster"
- __version__ = "0.31"
-
- __pattern__ = r'http://(?:www\.)?files\.mail\.ru/.*'
-
- __description__ = """Files.mail.ru hoster plugin"""
- __author_name__ = "oZiRiz"
- __author_mail__ = "ich@oziriz.de"
-
-
- def setup(self):
- if not self.account:
- self.multiDL = False
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url)
- self.url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>'
-
- #marks the file as "offline" when the pattern was found on the html-page'''
- if r'<div class="errorMessage mb10">' in self.html:
- self.offline()
-
- elif r'Page cannot be displayed' in self.html:
- self.offline()
-
- #the filename that will be showed in the list (e.g. test.part1.rar)'''
- pyfile.name = self.getFileName()
-
- #prepare and download'''
- if not self.account:
- self.prepare()
- self.download(self.getFileUrl())
- self.myPostProcess()
- else:
- self.download(self.getFileUrl())
- self.myPostProcess()
-
- def prepare(self):
- """You have to wait some seconds. Otherwise you will get a 40Byte HTML Page instead of the file you expected"""
- self.setWait(10)
- self.wait()
- return True
-
- def getFileUrl(self):
- """gives you the URL to the file. Extracted from the Files.mail.ru HTML-page stored in self.html"""
- return re.search(self.url_pattern, self.html).group(0).split('<a href="')[1].split('" onclick="return Act')[0]
-
- def getFileName(self):
- """gives you the Name for each file. Also extracted from the HTML-Page"""
- return re.search(self.url_pattern, self.html).group(0).split(', event)">')[1].split('</a>')[0]
-
- def myPostProcess(self):
- # searches the file for HTMl-Code. Sometimes the Redirect
- # doesn't work (maybe a curl Problem) and you get only a small
- # HTML file and the Download is marked as "finished"
- # then the download will be restarted. It's only bad for these
- # who want download a HTML-File (it's one in a million ;-) )
- #
- # The maximum UploadSize allowed on files.mail.ru at the moment is 100MB
- # so i set it to check every download because sometimes there are downloads
- # that contain the HTML-Text and 60MB ZEROs after that in a xyzfile.part1.rar file
- # (Loading 100MB in to ram is not an option)
- check = self.checkDownload({"html": "<meta name="}, read_size=50000)
- if check == "html":
- self.logInfo(_(
- "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." %
- self.pyfile.name))
- self.retry()
diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py
deleted file mode 100644
index b7f051d80..000000000
--- a/module/plugins/hoster/FileserveCom.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.plugins.Plugin import chunks
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.utils import parseFileSize
-
-
-def checkFile(plugin, urls):
- html = getURL(plugin.URLS[1], post={"urls": "\n".join(urls)}, decode=True)
-
- file_info = []
- for li in re.finditer(plugin.LINKCHECK_TR, html, re.DOTALL):
- try:
- cols = re.findall(plugin.LINKCHECK_TD, li.group(1))
- if cols:
- file_info.append((
- cols[1] if cols[1] != '--' else cols[0],
- parseFileSize(cols[2]) if cols[2] != '--' else 0,
- 2 if cols[3].startswith('Available') else 1,
- cols[0]))
- except Exception, e:
- continue
-
- return file_info
-
-
-class FileserveCom(Hoster):
- __name__ = "FileserveCom"
- __type__ = "hoster"
- __version__ = "0.52"
-
- __pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<id>[^/]+).*'
-
- __description__ = """Fileserve.com hoster plugin"""
- __author_name__ = ("jeix", "mkaay", "Paul King", "zoidberg")
- __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "", "zoidberg@mujmail.cz")
-
- URLS = ["http://www.fileserve.com/file/", "http://www.fileserve.com/link-checker.php",
- "http://www.fileserve.com/checkReCaptcha.php"]
- LINKCHECK_TR = r'<tr>\s*(<td>http://www.fileserve\.com/file/.*?)</tr>'
- LINKCHECK_TD = r'<td>(?:<[^>]*>|&nbsp;)*([^<]*)'
-
- CAPTCHA_KEY_PATTERN = r"var reCAPTCHA_publickey='(?P<key>[^']+)'"
- LONG_WAIT_PATTERN = r'<li class="title">You need to wait (\d+) (\w+) to start another download\.</li>'
- LINK_EXPIRED_PATTERN = r'Your download link has expired'
- DAILY_LIMIT_PATTERN = r'Your daily download limit has been reached'
- NOT_LOGGED_IN_PATTERN = r'<form (name="loginDialogBoxForm"|id="login_form")|<li><a href="/login.php">Login</a></li>'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
-
- self.file_id = re.match(self.__pattern__, self.pyfile.url).group('id')
- self.url = "%s%s" % (self.URLS[0], self.file_id)
- self.logDebug("File ID: %s URL: %s" % (self.file_id, self.url))
-
- def process(self, pyfile):
- pyfile.name, pyfile.size, status, self.url = checkFile(self, [self.url])[0]
- if status != 2:
- self.offline()
- self.logDebug("File Name: %s Size: %d" % (pyfile.name, pyfile.size))
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- def handleFree(self):
- self.html = self.load(self.url)
- action = self.load(self.url, post={"checkDownload": "check"}, decode=True)
- action = json_loads(action)
- self.logDebug(action)
-
- if "fail" in action:
- if action['fail'] == "timeLimit":
- self.html = self.load(self.url, post={"checkDownload": "showError", "errorType": "timeLimit"},
- decode=True)
-
- self.doLongWait(re.search(self.LONG_WAIT_PATTERN, self.html))
-
- elif action['fail'] == "parallelDownload":
- self.logWarning(_("Parallel download error, now waiting 60s."))
- self.retry(wait_time=60, reason="parallelDownload")
-
- else:
- self.fail("Download check returned %s" % action['fail'])
-
- elif "success" in action:
- if action['success'] == "showCaptcha":
- self.doCaptcha()
- self.doTimmer()
- elif action['success'] == "showTimmer":
- self.doTimmer()
-
- else:
- self.fail("Unknown server response")
-
- # show download link
- response = self.load(self.url, post={"downloadLink": "show"}, decode=True)
- self.logDebug("show downloadLink response : %s" % response)
- if "fail" in response:
- self.fail("Couldn't retrieve download url")
-
- # this may either download our file or forward us to an error page
- self.download(self.url, post={"download": "normal"})
- self.logDebug(self.req.http.lastEffectiveURL)
-
- check = self.checkDownload({"expired": self.LINK_EXPIRED_PATTERN,
- "wait": re.compile(self.LONG_WAIT_PATTERN),
- "limit": self.DAILY_LIMIT_PATTERN})
-
- if check == "expired":
- self.logDebug("Download link was expired")
- self.retry()
- elif check == "wait":
- self.doLongWait(self.lastCheck)
- elif check == "limit":
- self.logWarning("Download limited reached for today")
- self.setWait(secondsToMidnight(gmt=2), True)
- self.wait()
- self.retry()
-
- self.thread.m.reconnecting.wait(3) # Ease issue with later downloads appearing to be in parallel
-
- def doTimmer(self):
- response = self.load(self.url, post={"downloadLink": "wait"}, decode=True)
- self.logDebug("wait response : %s" % response[:80])
-
- if "fail" in response:
- self.fail("Failed getting wait time")
-
- if self.__name__ == "FilejungleCom":
- m = re.search(r'"waitTime":(\d+)', response)
- if m is None:
- self.fail("Cannot get wait time")
- wait_time = int(m.group(1))
- else:
- wait_time = int(response) + 3
-
- self.setWait(wait_time)
- self.wait()
-
- def doCaptcha(self):
- captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group("key")
- recaptcha = ReCaptcha(self)
-
- for _ in xrange(5):
- challenge, code = recaptcha.challenge(captcha_key)
-
- response = json_loads(self.load(self.URLS[2],
- post={'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': code,
- 'recaptcha_shortencode_field': self.file_id}))
- self.logDebug("reCaptcha response : %s" % response)
- if not response['success']:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("Invalid captcha")
-
- def doLongWait(self, m):
- wait_time = (int(m.group(1)) * {'seconds': 1, 'minutes': 60, 'hours': 3600}[m.group(2)]) if m else 12 * 60
- self.setWait(wait_time, True)
- self.wait()
- self.retry()
-
- def handlePremium(self):
- premium_url = None
- if self.__name__ == "FileserveCom":
- #try api download
- response = self.load("http://app.fileserve.com/api/download/premium/",
- post={"username": self.user,
- "password": self.account.getAccountData(self.user)['password'],
- "shorten": self.file_id},
- decode=True)
- if response:
- response = json_loads(response)
- if response['error_code'] == "302":
- premium_url = response['next']
- elif response['error_code'] in ["305", "500"]:
- self.tempOffline()
- elif response['error_code'] in ["403", "605"]:
- self.resetAccount()
- elif response['error_code'] in ["606", "607", "608"]:
- self.offline()
- else:
- self.logError(response['error_code'], response['error_message'])
-
- self.download(premium_url or self.pyfile.url)
-
- if not premium_url:
- check = self.checkDownload({"login": re.compile(self.NOT_LOGGED_IN_PATTERN)})
-
- if check == "login":
- self.account.relogin(self.user)
- self.retry(reason=_("Not logged in."))
-
-
-def getInfo(urls):
- for chunk in chunks(urls, 100):
- yield checkFile(FileserveCom, chunk)
diff --git a/module/plugins/hoster/FileshareInUa.py b/module/plugins/hoster/FileshareInUa.py
deleted file mode 100644
index f76942f6d..000000000
--- a/module/plugins/hoster/FileshareInUa.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.utils import parseFileSize
-
-
-class FileshareInUa(Hoster):
- __name__ = "FileshareInUa"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?fileshare.in.ua/[A-Za-z0-9]+'
-
- __description__ = """Fileshare.in.ua hoster plugin"""
- __author_name__ = "fwannmacher"
- __author_mail__ = "felipe@warhammerproject.com"
-
- PATTERN_FILENAME = r'<h3 class="b-filename">(.*?)</h3>'
- PATTERN_FILESIZE = r'<b class="b-filesize">(.*?)</b>'
- PATTERN_OFFLINE = r"This file doesn't exist, or has been removed."
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def process(self, pyfile):
- self.pyfile = pyfile
- self.html = self.load(pyfile.url, decode=True)
-
- if not self._checkOnline():
- self.offline()
-
- pyfile.name = self._getName()
-
- link = self._getLink()
-
- if not link.startswith('http://'):
- link = "http://fileshare.in.ua" + link
-
- self.download(link)
-
- def _checkOnline(self):
- if re.search(self.PATTERN_OFFLINE, self.html):
- return False
- else:
- return True
-
- def _getName(self):
- name = re.search(self.PATTERN_FILENAME, self.html)
- if name is None:
- self.fail("%s: Plugin broken." % self.__name__)
-
- return name.group(1)
-
- def _getLink(self):
- return re.search("<a href=\"(/get/.+)\" class=\"b-button m-blue m-big\" >", self.html).group(1)
-
-
-def getInfo(urls):
- result = []
-
- for url in urls:
- html = getURL(url)
-
- if re.search(FileshareInUa.PATTERN_OFFLINE, html):
- result.append((url, 0, 1, url))
- else:
- name = re.search(FileshareInUa.PATTERN_FILENAME, html)
-
- if name is None:
- result.append((url, 0, 1, url))
- continue
-
- name = name.group(1)
- size = re.search(FileshareInUa.PATTERN_FILESIZE, html)
- size = parseFileSize(size.group(1))
-
- result.append((name, size, 3, url))
-
- yield result
diff --git a/module/plugins/hoster/FilezyNet.py b/module/plugins/hoster/FilezyNet.py
deleted file mode 100644
index 969007a8a..000000000
--- a/module/plugins/hoster/FilezyNet.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class FilezyNet(XFileSharingPro):
- __name__ = "FilezyNet"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?filezy.net/.*/.*.html'
-
- __description__ = """Filezy.net hoster plugin"""
- __author_name__ = None
- __author_mail__ = None
-
- HOSTER_NAME = "filezy.net"
-
- FILE_SIZE_PATTERN = r'<span class="plansize">(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</span>'
- WAIT_PATTERN = r'<div id="countdown_str" class="seconds">\n<!--Wait--> <span id=".*?">(\d+)</span>'
- DOWNLOAD_JS_PATTERN = r"<script type='text/javascript'>eval(.*)"
-
-
- def setup(self):
- self.resumeDownload = True
- self.multiDL = self.premium
-
- def getDownloadLink(self):
- self.logDebug("Getting download link")
-
- data = self.getPostParameters()
- self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
-
- obfuscated_js = re.search(self.DOWNLOAD_JS_PATTERN, self.html)
- dl_file_now = self.js.eval(obfuscated_js.group(1))
- link = re.search(self.LINK_PATTERN, dl_file_now)
- return link.group(1)
-
-
-getInfo = create_getInfo(FilezyNet)
diff --git a/module/plugins/hoster/FiredriveCom.py b/module/plugins/hoster/FiredriveCom.py
deleted file mode 100644
index 47c6a4214..000000000
--- a/module/plugins/hoster/FiredriveCom.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FiredriveCom(SimpleHoster):
- __name__ = "FiredriveCom"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/(mobile/)?(file|embed)/(?P<ID>\w+)'
-
- __description__ = """Firedrive.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- FILE_NAME_PATTERN = r'<b>Name:</b> (?P<N>.+) <br>'
- FILE_SIZE_PATTERN = r'<b>Size:</b> (?P<S>[\d.]+) (?P<U>[a-zA-Z]+) <br>'
- OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<'
- TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.firedrive.com/file/\g<ID>')]
-
- LINK_PATTERN = r'<a href="(https?://dl\.firedrive\.com/\?key=.+?)"'
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
- self.chunkLimit = -1
-
- def handleFree(self):
- link = self._getLink()
- self.logDebug("Direct link: " + link)
- self.download(link, disposition=True)
-
- def _getLink(self):
- f = re.search(self.LINK_PATTERN, self.html)
- if f:
- return f.group(1)
- else:
- self.html = self.load(self.pyfile.url, post={"confirm": re.search(r'name="confirm" value="(.+?)"', self.html).group(1)})
- f = re.search(self.LINK_PATTERN, self.html)
- if f:
- return f.group(1)
- else:
- self.parseError("Direct download link not found")
-
-
-getInfo = create_getInfo(FiredriveCom)
diff --git a/module/plugins/hoster/FlyFilesNet.py b/module/plugins/hoster/FlyFilesNet.py
deleted file mode 100644
index 2bf9e0caf..000000000
--- a/module/plugins/hoster/FlyFilesNet.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.SimpleHoster import SimpleHoster
-
-
-class FlyFilesNet(SimpleHoster):
- __name__ = "FlyFilesNet"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?flyfiles\.net/.*'
-
- __description__ = """FlyFiles.net hoster plugin"""
- __author_name__ = None
- __author_mail__ = None
-
- SESSION_PATTERN = r'flyfiles\.net/(.*)/.*'
- FILE_NAME_PATTERN = r'flyfiles\.net/.*/(.*)'
-
-
- def process(self, pyfile):
- name = re.search(self.FILE_NAME_PATTERN, pyfile.url).group(1)
- pyfile.name = unquote_plus(name)
-
- session = re.search(self.SESSION_PATTERN, pyfile.url).group(1)
-
- url = "http://flyfiles.net"
-
- # get download URL
- parsed_url = getURL(url, post={"getDownLink": session}, cookies=True)
- self.logDebug("Parsed URL: %s" % parsed_url)
-
- if parsed_url == '#downlink|' or parsed_url == "#downlink|#":
- self.logWarning("Could not get the download URL. Please wait 10 minutes.")
- self.wait(10 * 60, True)
- self.retry()
-
- download_url = parsed_url.replace('#downlink|', '')
-
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
diff --git a/module/plugins/hoster/FourSharedCom.py b/module/plugins/hoster/FourSharedCom.py
deleted file mode 100644
index 2668a22d3..000000000
--- a/module/plugins/hoster/FourSharedCom.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class FourSharedCom(SimpleHoster):
- __name__ = "FourSharedCom"
- __type__ = "hoster"
- __version__ = "0.29"
-
- __pattern__ = r'https?://(?:www\.)?4shared(\-china)?\.com/(account/)?(download|get|file|document|photo|video|audio|mp3|office|rar|zip|archive|music)/.+?/.*'
-
- __description__ = """4Shared.com hoster plugin"""
- __author_name__ = ("jeix", "zoidberg")
- __author_mail__ = ("jeix@hasnomail.de", "zoidberg@mujmail.cz")
-
- FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.+?)"'
- FILE_SIZE_PATTERN = r'<span title="Size: (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B">'
- OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted.'
-
- FILE_NAME_REPLACEMENTS = [(r"&#(\d+).", lambda m: unichr(int(m.group(1))))]
- FILE_SIZE_REPLACEMENTS = [(",", "")]
-
- DOWNLOAD_URL_PATTERN = r'name="d3link" value="(.*?)"'
- DOWNLOAD_BUTTON_PATTERN = r'id="btnLink" href="(.*?)"'
- FID_PATTERN = r'name="d3fid" value="(.*?)"'
-
-
- def handleFree(self):
- if not self.account:
- self.fail("User not logged in")
-
- m = re.search(self.DOWNLOAD_BUTTON_PATTERN, self.html)
- if m:
- link = m.group(1)
- else:
- link = re.sub(r'/(download|get|file|document|photo|video|audio)/', r'/get/', self.pyfile.url)
-
- self.html = self.load(link)
-
- m = re.search(self.DOWNLOAD_URL_PATTERN, self.html)
- if m is None:
- self.parseError('Download link')
- link = m.group(1)
-
- try:
- m = re.search(self.FID_PATTERN, self.html)
- response = self.load('http://www.4shared.com/web/d2/getFreeDownloadLimitInfo?fileId=%s' % m.group(1))
- self.logDebug(response)
- except:
- pass
-
- self.wait(20)
- self.download(link)
-
-
-getInfo = create_getInfo(FourSharedCom)
diff --git a/module/plugins/hoster/FreakshareCom.py b/module/plugins/hoster/FreakshareCom.py
deleted file mode 100644
index 1b042bde3..000000000
--- a/module/plugins/hoster/FreakshareCom.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.CaptchaService import ReCaptcha
-
-
-class FreakshareCom(Hoster):
- __name__ = "FreakshareCom"
- __type__ = "hoster"
- __version__ = "0.39"
-
- __pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/'
-
- __description__ = """Freakshare.com hoster plugin"""
- __author_name__ = ("sitacuisses", "spoob", "mkaay", "Toilal")
- __author_mail__ = ("sitacuisses@yahoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "toilal.dev@gmail.com")
-
-
- def setup(self):
- self.multiDL = False
- self.req_opts = []
-
- def process(self, pyfile):
- self.pyfile = pyfile
-
- pyfile.url = pyfile.url.replace("freakshare.net/", "freakshare.com/")
-
- if self.account:
- self.html = self.load(pyfile.url, cookies=False)
- pyfile.name = self.get_file_name()
- self.download(pyfile.url)
-
- else:
- self.prepare()
- self.get_file_url()
-
- self.download(pyfile.url, post=self.req_opts)
-
- check = self.checkDownload({"bad": "bad try",
- "paralell": "> Sorry, you cant download more then 1 files at time. <",
- "empty": "Warning: Unknown: Filename cannot be empty",
- "wrong_captcha": "Wrong Captcha!",
- "downloadserver": "No Downloadserver. Please try again later!"})
-
- if check == "bad":
- self.fail("Bad Try.")
- elif check == "paralell":
- self.setWait(300, True)
- self.wait()
- self.retry()
- elif check == "empty":
- self.fail("File not downloadable")
- elif check == "wrong_captcha":
- self.invalidCaptcha()
- self.retry()
- elif check == "downloadserver":
- self.retry(5, 15 * 60, "No Download server")
-
- def prepare(self):
- pyfile = self.pyfile
-
- self.wantReconnect = False
-
- self.download_html()
-
- if not self.file_exists():
- self.offline()
-
- self.setWait(self.get_waiting_time())
-
- pyfile.name = self.get_file_name()
- pyfile.size = self.get_file_size()
-
- self.wait()
-
- return True
-
- def download_html(self):
- self.load("http://freakshare.com/index.php", {"language": "EN"}) # Set english language in server session
- self.html = self.load(self.pyfile.url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
- if not self.wantReconnect:
- self.req_opts = self.get_download_options() # get the Post options for the Request
- #file_url = self.pyfile.url
- #return file_url
- else:
- self.offline()
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
- if not self.wantReconnect:
- file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">([^ ]+)", self.html)
- if file_name is not None:
- file_name = file_name.group(1)
- else:
- file_name = self.pyfile.url
- return file_name
- else:
- return self.pyfile.url
-
- def get_file_size(self):
- size = 0
- if not self.html:
- self.download_html()
- if not self.wantReconnect:
- file_size_check = re.search(
- r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">[^ ]+ - ([^ ]+) (\w\w)yte", self.html)
- if file_size_check is not None:
- units = float(file_size_check.group(1).replace(",", ""))
- pow = {'KB': 1, 'MB': 2, 'GB': 3}[file_size_check.group(2)]
- size = int(units * 1024 ** pow)
-
- return size
-
- def get_waiting_time(self):
- if not self.html:
- self.download_html()
-
- if "Your Traffic is used up for today" in self.html:
- self.wantReconnect = True
- return secondsToMidnight(gmt=2)
-
- timestring = re.search('\s*var\s(?:downloadWait|time)\s=\s(\d*)[.\d]*;', self.html)
- if timestring:
- return int(timestring.group(1)) + 1 # add 1 sec as tenths of seconds are cut off
- else:
- return 60
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
- if re.search(r"This file does not exist!", self.html) is not None:
- return False
- else:
- return True
-
- def get_download_options(self):
- re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>",
- self.html).group(0) # get the whole request
- to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope)
- request_options = dict((n, v) for (v, n) in to_sort)
-
- herewego = self.load(self.pyfile.url, None, request_options) # the actual download-Page
-
- # comment this in, when it doesnt work
- # with open("DUMP__FS_.HTML", "w") as fp:
- # fp.write(herewego)
-
- to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego)
- request_options = dict((n, v) for (v, n) in to_sort)
-
- # comment this in, when it doesnt work as well
- #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort])
-
- challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego)
-
- if challenge:
- re_captcha = ReCaptcha(self)
- (request_options['recaptcha_challenge_field'],
- request_options['recaptcha_response_field']) = re_captcha.challenge(challenge.group(1))
-
- return request_options
diff --git a/module/plugins/hoster/FreeWayMe.py b/module/plugins/hoster/FreeWayMe.py
deleted file mode 100644
index dc9188f05..000000000
--- a/module/plugins/hoster/FreeWayMe.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Hoster import Hoster
-
-
-class FreeWayMe(Hoster):
- __name__ = "FreeWayMe"
- __type__ = "hoster"
- __version__ = "0.11"
-
- __pattern__ = r'https://(?:www\.)?free-way.me/.*'
-
- __description__ = """FreeWayMe hoster plugin"""
- __author_name__ = "Nicolas Giese"
- __author_mail__ = "james@free-way.me"
-
-
- def setup(self):
- self.resumeDownload = False
- self.chunkLimit = 1
- self.multiDL = self.premium
-
- def process(self, pyfile):
- if not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "FreeWayMe")
- self.fail("No FreeWay account provided")
-
- self.logDebug("Old URL: %s" % pyfile.url)
-
- (user, data) = self.account.selectAccount()
-
- self.download(
- "https://www.free-way.me/load.php",
- get={"multiget": 7, "url": pyfile.url, "user": user, "pw": self.account.getpw(user), "json": ""},
- disposition=True)
diff --git a/module/plugins/hoster/FreevideoCz.py b/module/plugins/hoster/FreevideoCz.py
deleted file mode 100644
index d6549a8df..000000000
--- a/module/plugins/hoster/FreevideoCz.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class FreevideoCz(DeadHoster):
- __name__ = "FreevideoCz"
- __type__ = "hoster"
- __version__ = "0.3"
-
- __pattern__ = r'http://(?:www\.)?freevideo\.cz/vase-videa/.+'
-
- __description__ = """Freevideo.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(FreevideoCz) \ No newline at end of file
diff --git a/module/plugins/hoster/FshareVn.py b/module/plugins/hoster/FshareVn.py
deleted file mode 100644
index bc042cbcc..000000000
--- a/module/plugins/hoster/FshareVn.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import strptime, mktime, gmtime
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
-
-
-def getInfo(urls):
- for url in urls:
- html = getURL('http://www.fshare.vn/check_link.php', post={
- "action": "check_link",
- "arrlinks": url
- }, decode=True)
-
- file_info = parseFileInfo(FshareVn, url, html)
-
- yield file_info
-
-
-def doubleDecode(m):
- return m.group(1).decode('raw_unicode_escape')
-
-
-class FshareVn(SimpleHoster):
- __name__ = "FshareVn"
- __type__ = "hoster"
- __version__ = "0.16"
-
- __pattern__ = r'http://(?:www\.)?fshare.vn/file/.*'
-
- __description__ = """FshareVn hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[0-9,.]+)\s*(?P<U>[kKMG])i?B<\\/p>'
- OFFLINE_PATTERN = r'<div class=\\"f_left file_w\\"|<\\/p>\\t\\t\\t\\t\\r\\n\\t\\t<p><\\/p>\\t\\t\\r\\n\\t\\t<p>0 KB<\\/p>'
-
- FILE_NAME_REPLACEMENTS = [("(.*)", doubleDecode)]
-
- LINK_PATTERN = r'action="(http://download.*?)[#"]'
- WAIT_PATTERN = ur'Lượt tải xuống kế tiếp là:\s*(.*?)\s*<'
-
-
- def process(self, pyfile):
- self.html = self.load('http://www.fshare.vn/check_link.php', post={
- "action": "check_link",
- "arrlinks": pyfile.url
- }, decode=True)
- self.getFileInfo()
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
- self.checkDownloadedFile()
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- self.checkErrors()
-
- action, inputs = self.parseHtmlForm('frm_download')
- self.url = self.pyfile.url + action
-
- if not inputs:
- self.parseError('FORM')
- elif 'link_file_pwd_dl' in inputs:
- for password in self.getPassword().splitlines():
- self.logInfo('Password protected link, trying "%s"' % password)
- inputs['link_file_pwd_dl'] = password
- self.html = self.load(self.url, post=inputs, decode=True)
- if not 'name="link_file_pwd_dl"' in self.html:
- break
- else:
- self.fail("No or incorrect password")
- else:
- self.html = self.load(self.url, post=inputs, decode=True)
-
- self.checkErrors()
-
- m = re.search(r'var count = (\d+)', self.html)
- self.setWait(int(m.group(1)) if m else 30)
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError('FREE DL URL')
- self.url = m.group(1)
- self.logDebug("FREE DL URL: %s" % self.url)
-
- self.wait()
- self.download(self.url)
-
- def handlePremium(self):
- self.download(self.pyfile.url)
-
- def checkErrors(self):
- if '/error.php?' in self.req.lastEffectiveURL or u"Liên kết bạn chọn khÃŽng tồn" in self.html:
- self.offline()
-
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- self.logInfo("Wait until %s ICT" % m.group(1))
- wait_until = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M"))
- self.wait(wait_until - mktime(gmtime()) - 7 * 60 * 60, True)
- self.retry()
- elif '<ul class="message-error">' in self.html:
- self.logError("Unknown error occured or wait time not parsed")
- self.retry(30, 2 * 60, "Unknown error")
-
- def checkDownloadedFile(self):
- # check download
- check = self.checkDownload({
- "not_found": "<head><title>404 Not Found</title></head>"
- })
-
- if check == "not_found":
- self.fail("File not m on server")
diff --git a/module/plugins/hoster/Ftp.py b/module/plugins/hoster/Ftp.py
deleted file mode 100644
index 8de3f4f47..000000000
--- a/module/plugins/hoster/Ftp.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import pycurl
-import re
-
-from urllib import quote, unquote
-from urlparse import urlparse
-
-from module.plugins.Hoster import Hoster
-
-
-class Ftp(Hoster):
- __name__ = "Ftp"
- __type__ = "hoster"
- __version__ = "0.41"
-
- __description__ = """Download from ftp directory"""
- __author_name__ = ("jeix", "mkaay", "zoidberg")
- __author_mail__ = ("jeix@hasnomail.com", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- parsed_url = urlparse(pyfile.url)
- netloc = parsed_url.netloc
-
- pyfile.name = parsed_url.path.rpartition('/')[2]
- try:
- pyfile.name = unquote(str(pyfile.name)).decode('utf8')
- except:
- pass
-
- if not "@" in netloc:
- servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else []
-
- if netloc in servers:
- self.logDebug("Logging on to %s" % netloc)
- self.req.addAuth(self.account.accounts[netloc]['password'])
- else:
- for pwd in pyfile.package().password.splitlines():
- if ":" in pwd:
- self.req.addAuth(pwd.strip())
- break
-
- self.req.http.c.setopt(pycurl.NOBODY, 1)
-
- try:
- response = self.load(pyfile.url)
- except pycurl.error, e:
- self.fail("Error %d: %s" % e.args)
-
- self.req.http.c.setopt(pycurl.NOBODY, 0)
- self.logDebug(self.req.http.header)
-
- m = re.search(r"Content-Length:\s*(\d+)", response)
- if m:
- pyfile.size = int(m.group(1))
- self.download(pyfile.url)
- else:
- #Naive ftp directory listing
- if re.search(r'^25\d.*?"', self.req.http.header, re.M):
- pyfile.url = pyfile.url.rstrip('/')
- pkgname = "/".join(pyfile.package().name, urlparse(pyfile.url).path.rpartition('/')[2])
- pyfile.url += '/'
- self.req.http.c.setopt(48, 1) # CURLOPT_DIRLISTONLY
- response = self.load(pyfile.url, decode=False)
- links = [pyfile.url + quote(x) for x in response.splitlines()]
- self.logDebug("LINKS", links)
- self.core.api.addPackage(pkgname, links)
- else:
- self.fail("Unexpected server response")
diff --git a/module/plugins/hoster/GamefrontCom.py b/module/plugins/hoster/GamefrontCom.py
deleted file mode 100644
index 66cef3013..000000000
--- a/module/plugins/hoster/GamefrontCom.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.utils import parseFileSize
-
-
-class GamefrontCom(Hoster):
- __name__ = "GamefrontCom"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?gamefront.com/files/[A-Za-z0-9]+'
-
- __description__ = """Gamefront.com hoster plugin"""
- __author_name__ = "fwannmacher"
- __author_mail__ = "felipe@warhammerproject.com"
-
- PATTERN_FILENAME = r'<title>(.*?) | Game Front'
- PATTERN_FILESIZE = r'<dt>File Size:</dt>[\n\s]*<dd>(.*?)</dd>'
- PATTERN_OFFLINE = r"This file doesn't exist, or has been removed."
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = -1
-
- def process(self, pyfile):
- self.pyfile = pyfile
- self.html = self.load(pyfile.url, decode=True)
-
- if not self._checkOnline():
- self.offline()
-
- pyfile.name = self._getName()
-
- link = self._getLink()
-
- if not link.startswith('http://'):
- link = "http://www.gamefront.com/" + link
-
- self.download(link)
-
- def _checkOnline(self):
- if re.search(self.PATTERN_OFFLINE, self.html):
- return False
- else:
- return True
-
- def _getName(self):
- name = re.search(self.PATTERN_FILENAME, self.html)
- if name is None:
- self.fail("%s: Plugin broken." % self.__name__)
-
- return name.group(1)
-
- def _getLink(self):
- self.html2 = self.load("http://www.gamefront.com/" + re.search("(files/service/thankyou\\?id=[A-Za-z0-9]+)",
- self.html).group(1))
- return re.search("<a href=\"(http://media[0-9]+\.gamefront.com/.*)\">click here</a>", self.html2).group(1).replace("&amp;", "&")
-
-
-def getInfo(urls):
- result = []
-
- for url in urls:
- html = getURL(url)
-
- if re.search(GamefrontCom.PATTERN_OFFLINE, html):
- result.append((url, 0, 1, url))
- else:
- name = re.search(GamefrontCom.PATTERN_FILENAME, html)
- if name is None:
- result.append((url, 0, 1, url))
- else:
- name = name.group(1)
- size = re.search(GamefrontCom.PATTERN_FILESIZE, html)
- size = parseFileSize(size.group(1))
-
- result.append((name, size, 3, url))
-
- yield result
diff --git a/module/plugins/hoster/GigapetaCom.py b/module/plugins/hoster/GigapetaCom.py
deleted file mode 100644
index 966ac8094..000000000
--- a/module/plugins/hoster/GigapetaCom.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION
-from random import randint
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class GigapetaCom(SimpleHoster):
- __name__ = "GigapetaCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?gigapeta\.com/dl/\w+'
-
- __description__ = """GigaPeta.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<img src=".*" alt="file" />-->\s*(?P<N>.*?)\s*</td>'
- FILE_SIZE_PATTERN = r'<th>\s*Size\s*</th>\s*<td>\s*(?P<S>.*?)\s*</td>'
- OFFLINE_PATTERN = r'<div id="page_error">'
-
- SH_COOKIES = [(".gigapeta.com", "lang", "us")]
-
-
- def handleFree(self):
- captcha_key = str(randint(1, 100000000))
- captcha_url = "http://gigapeta.com/img/captcha.gif?x=%s" % captcha_key
-
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
-
- for _ in xrange(5):
- self.checkErrors()
-
- captcha = self.decryptCaptcha(captcha_url)
- self.html = self.load(self.pyfile.url, post={
- "captcha_key": captcha_key,
- "captcha": captcha,
- "download": "Download"})
-
- m = re.search(r"Location\s*:\s*(.*)", self.req.http.header, re.I)
- if m:
- download_url = m.group(1)
- break
- elif "Entered figures don&#96;t coincide with the picture" in self.html:
- self.invalidCaptcha()
- else:
- self.fail("No valid captcha code entered")
-
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
-
- def checkErrors(self):
- if "All threads for IP" in self.html:
- self.logDebug("Your IP is already downloading a file - wait and retry")
- self.wait(5 * 60, True)
- self.retry()
-
-
-getInfo = create_getInfo(GigapetaCom)
diff --git a/module/plugins/hoster/GooIm.py b/module/plugins/hoster/GooIm.py
deleted file mode 100644
index c43bd0fc9..000000000
--- a/module/plugins/hoster/GooIm.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# https://goo.im/devs/liquidsmooth/3.x/codina/Nightly/LS-KK-v3.2-2014-08-01-codina.zip
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class GooIm(SimpleHoster):
- __name__ = "GooIm"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'https?://(?:www\.)?goo\.im/.+'
-
- __description__ = """Goo.im hoster plugin"""
- __author_name__ = "zapp-brannigan"
- __author_mail__ = "fuerst.reinje@web.de"
-
- FILE_NAME_PATTERN = r'You will be redirected to .*(?P<N>[^/ ]+) in'
- OFFLINE_PATTERN = r'The file you requested was not found'
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
-
- def handleFree(self):
- url = self.pyfile.url
- self.html = self.load(url, cookies=True)
- self.wait(10)
- self.download(url, cookies=True)
-
-
-getInfo = create_getInfo(GooIm)
diff --git a/module/plugins/hoster/HellshareCz.py b/module/plugins/hoster/HellshareCz.py
deleted file mode 100644
index 239d90f46..000000000
--- a/module/plugins/hoster/HellshareCz.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class HellshareCz(SimpleHoster):
- __name__ = "HellshareCz"
- __type__ = "hoster"
- __version__ = "0.82"
-
- __pattern__ = r'(http://(?:www\.)?hellshare\.(?:cz|com|sk|hu|pl)/[^?]*/\d+).*'
-
- __description__ = """Hellshare.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<h1 id="filename"[^>]*>(?P<N>[^<]+)</h1>'
- FILE_SIZE_PATTERN = r'<strong id="FileSize_master">(?P<S>[0-9.]*)&nbsp;(?P<U>[kKMG])i?B</strong>'
- OFFLINE_PATTERN = r'<h1>File not found.</h1>'
- SHOW_WINDOW_PATTERN = r'<a href="([^?]+/(\d+)/\?do=(fileDownloadButton|relatedFileDownloadButton-\2)-showDownloadWindow)"'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True if self.account else False
- self.chunkLimit = 1
-
- def process(self, pyfile):
- if not self.account:
- self.fail("User not logged in")
- pyfile.url = re.match(self.__pattern__, pyfile.url).group(1)
- self.html = self.load(pyfile.url, decode=True)
- self.getFileInfo()
- if not self.checkTrafficLeft():
- self.fail("Not enough traffic left for user %s." % self.user)
-
- m = re.search(self.SHOW_WINDOW_PATTERN, self.html)
- if m is None:
- self.parseError('SHOW WINDOW')
- self.url = "http://www.hellshare.com" + m.group(1)
- self.logDebug("DOWNLOAD URL: " + self.url)
-
- self.download(self.url)
-
-
-getInfo = create_getInfo(HellshareCz)
diff --git a/module/plugins/hoster/HellspyCz.py b/module/plugins/hoster/HellspyCz.py
deleted file mode 100644
index 5800f28a0..000000000
--- a/module/plugins/hoster/HellspyCz.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class HellspyCz(DeadHoster):
- __name__ = "HellspyCz"
- __type__ = "hoster"
- __version__ = "0.28"
-
- __pattern__ = r'http://(?:www\.)?(?:hellspy\.(?:cz|com|sk|hu|pl)|sciagaj.pl)(/\S+/\d+)/?.*'
-
- __description__ = """HellSpy.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(HellspyCz)
diff --git a/module/plugins/hoster/HotfileCom.py b/module/plugins/hoster/HotfileCom.py
deleted file mode 100644
index aac312a6b..000000000
--- a/module/plugins/hoster/HotfileCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class HotfileCom(DeadHoster):
- __name__ = "HotfileCom"
- __type__ = "hoster"
- __version__ = "0.37"
-
- __pattern__ = r'https?://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+/'
-
- __description__ = """Hotfile.com hoster plugin"""
- __author_name__ = ("sitacuisses", "spoob", "mkaay", "JoKoT3")
- __author_mail__ = ("sitacuisses@yhoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "jokot3@gmail.com")
-
-
-getInfo = create_getInfo(HotfileCom)
diff --git a/module/plugins/hoster/HugefilesNet.py b/module/plugins/hoster/HugefilesNet.py
deleted file mode 100644
index bf0a26c68..000000000
--- a/module/plugins/hoster/HugefilesNet.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://hugefiles.net/prthf9ya4w6s
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class HugefilesNet(XFileSharingPro):
- __name__ = "HugefilesNet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?hugefiles\.net/\w{12}'
-
- __description__ = """Hugefiles.net hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- HOSTER_NAME = "hugefiles.net"
-
- FILE_SIZE_PATTERN = r'File Size:</span>\s*<span[^>]*>(?P<S>[^<]+)</span></div>'
-
-
-getInfo = create_getInfo(HugefilesNet)
diff --git a/module/plugins/hoster/HundredEightyUploadCom.py b/module/plugins/hoster/HundredEightyUploadCom.py
deleted file mode 100644
index e2e34ad00..000000000
--- a/module/plugins/hoster/HundredEightyUploadCom.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://180upload.com/js9qdm6kjnrs
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class HundredEightyUploadCom(XFileSharingPro):
- __name__ = "HundredEightyUploadCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?180upload\.com/(\w+).*'
-
- __description__ = """180upload.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- HOSTER_NAME = "180upload.com"
-
- FILE_NAME_PATTERN = r'Filename:</b></td><td nowrap>(?P<N>.+)</td></tr>-->'
- FILE_SIZE_PATTERN = r'Size:</b></td><td>(?P<S>[\d.]+) (?P<U>[A-Z]+)\s*<small>'
-
-
-getInfo = create_getInfo(HundredEightyUploadCom)
diff --git a/module/plugins/hoster/IFileWs.py b/module/plugins/hoster/IFileWs.py
deleted file mode 100644
index 94d3e599e..000000000
--- a/module/plugins/hoster/IFileWs.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class IFileWs(XFileSharingPro):
- __name__ = "IFileWs"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?ifile\.ws/\w+(/.+)?'
-
- __description__ = """Ifile.ws hoster plugin"""
- __author_name__ = "z00nx"
- __author_mail__ = "z00nx0@gmail.com"
-
- HOSTER_NAME = "ifile.ws"
-
- FILE_INFO_PATTERN = r'<h1\s+style="display:inline;">(?P<N>[^<]+)</h1>\s+\[(?P<S>[^]]+)\]'
- OFFLINE_PATTERN = r'File Not Found|The file was removed by administrator'
-
-
-getInfo = create_getInfo(IFileWs)
diff --git a/module/plugins/hoster/IcyFilesCom.py b/module/plugins/hoster/IcyFilesCom.py
deleted file mode 100644
index a7c69009e..000000000
--- a/module/plugins/hoster/IcyFilesCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class IcyFilesCom(DeadHoster):
- __name__ = "IcyFilesCom"
- __type__ = "hoster"
- __version__ = "0.06"
-
- __pattern__ = r'http://(?:www\.)?icyfiles\.com/(.*)'
-
- __description__ = """IcyFiles.com hoster plugin"""
- __author_name__ = "godofdream"
- __author_mail__ = "soilfiction@gmail.com"
-
-
-getInfo = create_getInfo(IcyFilesCom)
diff --git a/module/plugins/hoster/IfileIt.py b/module/plugins/hoster/IfileIt.py
deleted file mode 100644
index 5dfd14d82..000000000
--- a/module/plugins/hoster/IfileIt.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class IfileIt(SimpleHoster):
- __name__ = "IfileIt"
- __type__ = "hoster"
- __version__ = "0.27"
-
- __pattern__ = r'^unmatchable$'
-
- __description__ = """Ifile.it"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- LINK_PATTERN = r'</span> If it doesn\'t, <a target="_blank" href="([^"]+)">'
- RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';"
- FILE_INFO_PATTERN = r'<span style="cursor: default;[^>]*>\s*(?P<N>.*?)\s*&nbsp;\s*<strong>\s*(?P<S>[0-9.]+)\s*(?P<U>[kKMG])i?B\s*</strong>\s*</span>'
- OFFLINE_PATTERN = r'<span style="cursor: default;[^>]*>\s*&nbsp;\s*<strong>\s*</strong>\s*</span>'
- TEMP_OFFLINE_PATTERN = r'<span class="msg_red">Downloading of this file is temporarily disabled</span>'
-
-
- def handleFree(self):
- ukey = re.match(self.__pattern__, self.pyfile.url).group(1)
- json_url = 'http://ifile.it/new_download-request.json'
- post_data = {"ukey": ukey, "ab": "0"}
-
- json_response = json_loads(self.load(json_url, post=post_data))
- self.logDebug(json_response)
- if json_response['status'] == 3:
- self.offline()
-
- if json_response['captcha']:
- captcha_key = re.search(self.RECAPTCHA_KEY_PATTERN, self.html).group(1)
- recaptcha = ReCaptcha(self)
- post_data['ctype'] = "recaptcha"
-
- for _ in xrange(5):
- post_data['recaptcha_challenge'], post_data['recaptcha_response'] = recaptcha.challenge(captcha_key)
- json_response = json_loads(self.load(json_url, post=post_data))
- self.logDebug(json_response)
-
- if json_response['retry']:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("Incorrect captcha")
-
- if not "ticket_url" in json_response:
- self.parseError("Download URL")
-
- self.download(json_response['ticket_url'])
-
-
-getInfo = create_getInfo(IfileIt)
diff --git a/module/plugins/hoster/IfolderRu.py b/module/plugins/hoster/IfolderRu.py
deleted file mode 100644
index efa8d8ab9..000000000
--- a/module/plugins/hoster/IfolderRu.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class IfolderRu(SimpleHoster):
- __name__ = "IfolderRu"
- __type__ = "hoster"
- __version__ = "0.38"
-
- __pattern__ = r'http://(?:www\.)?(?:ifolder\.ru|rusfolder\.(?:com|net|ru))/(?:files/)?(?P<ID>\d+).*'
-
- __description__ = """Ifolder.ru hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_SIZE_REPLACEMENTS = [(u'Кб', 'KB'), (u'Мб', 'MB'), (u'Гб', 'GB')]
- FILE_NAME_PATTERN = ur'(?:<div><span>)?НазваМОе:(?:</span>)? <b>(?P<N>[^<]+)</b><(?:/div|br)>'
- FILE_SIZE_PATTERN = ur'(?:<div><span>)?РазЌер:(?:</span>)? <b>(?P<S>[^<]+)</b><(?:/div|br)>'
- OFFLINE_PATTERN = ur'<p>Ѐайл МПЌер <b>[^<]*</b> (Ме МайЎеМ|уЎалеМ) !!!</p>'
-
- SESSION_ID_PATTERN = r'<a href=(http://ints.(?:rusfolder.com|ifolder.ru)/ints/sponsor/\?bi=\d*&session=([^&]+)&u=[^>]+)>'
- INTS_SESSION_PATTERN = r'\(\'ints_session\'\);\s*if\(tag\)\{tag.value = "([^"]+)";\}'
- HIDDEN_INPUT_PATTERN = r"var v = .*?name='([^']+)' value='1'"
- LINK_PATTERN = r'<a id="download_file_href" href="([^"]+)"'
- WRONG_CAPTCHA_PATTERN = ur'<font color=Red>МеверМый кПЎ,<br>ввеЎОте еще раз</font><br>'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True if self.account else False
- self.chunkLimit = 1
-
- def process(self, pyfile):
- file_id = re.match(self.__pattern__, pyfile.url).group('ID')
- self.html = self.load("http://rusfolder.com/%s" % file_id, cookies=True, decode=True)
- self.getFileInfo()
-
- url = re.search(r"location\.href = '(http://ints\..*?=)'", self.html).group(1)
- self.html = self.load(url, cookies=True, decode=True)
-
- url, session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups()
- self.html = self.load(url, cookies=True, decode=True)
-
- url = "http://ints.rusfolder.com/ints/frame/?session=%s" % session_id
- self.html = self.load(url, cookies=True)
-
- self.wait(31, False)
-
- captcha_url = "http://ints.rusfolder.com/random/images/?session=%s" % session_id
- for _ in xrange(5):
- self.html = self.load(url, cookies=True)
- action, inputs = self.parseHtmlForm('ID="Form1"')
- inputs['ints_session'] = re.search(self.INTS_SESSION_PATTERN, self.html).group(1)
- inputs[re.search(self.HIDDEN_INPUT_PATTERN, self.html).group(1)] = '1'
- inputs['confirmed_number'] = self.decryptCaptcha(captcha_url, cookies=True)
- inputs['action'] = '1'
- self.logDebug(inputs)
-
- self.html = self.load(url, decode=True, cookies=True, post=inputs)
- if self.WRONG_CAPTCHA_PATTERN in self.html:
- self.invalidCaptcha()
- else:
- break
- else:
- self.fail("Invalid captcha")
-
- download_url = re.search(self.LINK_PATTERN, self.html).group(1)
- self.correctCaptcha()
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
-
-
-getInfo = create_getInfo(IfolderRu)
diff --git a/module/plugins/hoster/JumbofilesCom.py b/module/plugins/hoster/JumbofilesCom.py
deleted file mode 100644
index 2c9e4418b..000000000
--- a/module/plugins/hoster/JumbofilesCom.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class JumbofilesCom(SimpleHoster):
- __name__ = "JumbofilesCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?jumbofiles.com/(\w{12}).*'
-
- __description__ = """JumboFiles.com hoster plugin"""
- __author_name__ = "godofdream"
- __author_mail__ = "soilfiction@gmail.com"
-
- FILE_INFO_PATTERN = r'<TR><TD>(?P<N>[^<]+?)\s*<small>\((?P<S>[\d.]+)\s*(?P<U>[KMG][bB])\)</small></TD></TR>'
- OFFLINE_PATTERN = r'Not Found or Deleted / Disabled due to inactivity or DMCA'
- LINK_PATTERN = r'<meta http-equiv="refresh" content="10;url=(.+)">'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def handleFree(self):
- ukey = re.match(self.__pattern__, self.pyfile.url).group(1)
- post_data = {"id": ukey, "op": "download3", "rand": ""}
- html = self.load(self.pyfile.url, post=post_data, decode=True)
- url = re.search(self.LINK_PATTERN, html).group(1)
- self.logDebug("Download " + url)
- self.download(url)
-
-
-getInfo = create_getInfo(JumbofilesCom)
diff --git a/module/plugins/hoster/Keep2shareCC.py b/module/plugins/hoster/Keep2shareCC.py
deleted file mode 100644
index c1ec66435..000000000
--- a/module/plugins/hoster/Keep2shareCC.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://k2s.cc/file/55fb73e1c00c5/random.bin
-
-import re
-
-from urlparse import urlparse, urljoin
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class Keep2shareCC(SimpleHoster):
- __name__ = "Keep2shareCC"
- __type__ = "hoster"
- __version__ = "0.10"
-
- __pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
-
- __description__ = """Keep2share.cc hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_NAME_PATTERN = r'File: <span>(?P<N>.+)</span>'
- FILE_SIZE_PATTERN = r'Size: (?P<S>[^<]+)</div>'
- OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404'
-
- LINK_PATTERN = r'To download this file with slow speed, use <a href="([^"]+)">this link</a>'
- WAIT_PATTERN = r'Please wait ([\d:]+) to download this file'
- ALREADY_DOWNLOADING_PATTERN = r'Free account does not allow to download more than one file at the same time'
-
- RECAPTCHA_KEY = "6LcYcN0SAAAAABtMlxKj7X0hRxOY8_2U86kI1vbb"
-
-
- def handleFree(self):
- self.sanitize_url()
- self.html = self.load(self.pyfile.url)
-
- self.fid = re.search(r'<input type="hidden" name="slow_id" value="([^"]+)">', self.html).group(1)
- self.html = self.load(self.pyfile.url, post={'yt0': '', 'slow_id': self.fid})
-
- m = re.search(r"function download\(\){.*window\.location\.href = '([^']+)';", self.html, re.DOTALL)
- if m: # Direct mode
- self.startDownload(m.group(1))
- else:
- self.handleCaptcha()
-
- self.wait(30)
-
- self.html = self.load(self.pyfile.url, post={'uniqueId': self.fid, 'free': 1})
-
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- self.logDebug('Hoster told us to wait for %s' % m.group(1))
- # string to time convert courtesy of https://stackoverflow.com/questions/10663720
- ftr = [3600, 60, 1]
- wait_time = sum([a * b for a, b in zip(ftr, map(int, m.group(1).split(':')))])
- self.wait(wait_time, reconnect=True)
- self.retry()
-
- m = re.search(self.ALREADY_DOWNLOADING_PATTERN, self.html)
- if m:
- # if someone is already downloading on our line, wait 30min and retry
- self.logDebug('Already downloading, waiting for 30 minutes')
- self.wait(30 * 60, reconnect=True)
- self.retry()
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError("Unable to detect direct link")
- self.startDownload(m.group(1))
-
- def handleCaptcha(self):
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- post_data = {'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': response,
- 'CaptchaForm%5Bcode%5D': '',
- 'free': 1,
- 'freeDownloadRequest': 1,
- 'uniqueId': self.fid,
- 'yt0': ''}
-
- self.html = self.load(self.pyfile.url, post=post_data)
-
- if 'recaptcha' not in self.html:
- self.correctCaptcha()
- break
- else:
- self.logInfo('Wrong captcha')
- self.invalidCaptcha()
- else:
- self.fail("All captcha attempts failed")
-
- def startDownload(self, url):
- d = urljoin(self.base_url, url)
- self.logDebug('Direct Link: ' + d)
- self.download(d, disposition=True)
-
- def sanitize_url(self):
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header:
- self.pyfile.url = header['location']
- p = urlparse(self.pyfile.url)
- self.base_url = "%s://%s" % (p.scheme, p.hostname)
-
-
-getInfo = create_getInfo(Keep2shareCC)
diff --git a/module/plugins/hoster/LemUploadsCom.py b/module/plugins/hoster/LemUploadsCom.py
deleted file mode 100644
index b8a6062cb..000000000
--- a/module/plugins/hoster/LemUploadsCom.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://lemuploads.com/uwol0aly9dld
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class LemUploadsCom(XFileSharingPro):
- __name__ = "LemUploadsCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?lemuploads.com/\w{12}'
-
- __description__ = """LemUploads.com hoster plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- HOSTER_NAME = "lemuploads.com"
-
- OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
- FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>'
-
-
-getInfo = create_getInfo(LemUploadsCom)
diff --git a/module/plugins/hoster/LetitbitNet.py b/module/plugins/hoster/LetitbitNet.py
deleted file mode 100644
index 3159be4f1..000000000
--- a/module/plugins/hoster/LetitbitNet.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# API Documentation:
-# http://api.letitbit.net/reg/static/api.pdf
-#
-# Test links:
-# http://letitbit.net/download/07874.0b5709a7d3beee2408bb1f2eefce/random.bin.html
-
-import re
-
-from urllib import urlencode, urlopen
-
-from module.common.json_layer import json_loads, json_dumps
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster
-
-
-def api_download_info(url):
- json_data = ["yw7XQy2v9", ["download/info", {"link": url}]]
- post_data = urlencode({'r': json_dumps(json_data)})
- api_rep = urlopen("http://api.letitbit.net/json", data=post_data).read()
- return json_loads(api_rep)
-
-
-def getInfo(urls):
- for url in urls:
- api_rep = api_download_info(url)
- if api_rep['status'] == 'OK':
- info = api_rep['data'][0]
- yield (info['name'], info['size'], 2, url)
- else:
- yield (url, 0, 1, url)
-
-
-class LetitbitNet(SimpleHoster):
- __name__ = "LetitbitNet"
- __type__ = "hoster"
- __version__ = "0.24"
-
- __pattern__ = r'http://(?:www\.)?(letitbit|shareflare).net/download/.*'
-
- __description__ = """Letitbit.net hoster plugin"""
- __author_name__ = ("zoidberg", "z00nx")
- __author_mail__ = ("zoidberg@mujmail.cz", "z00nx0@gmail.com")
-
- FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "letitbit.net")]
-
- HOSTER_NAME = "letitbit.net"
-
- SECONDS_PATTERN = r'seconds\s*=\s*(\d+);'
- CAPTCHA_CONTROL_FIELD = r"recaptcha_control_field\s=\s'(?P<value>[^']+)'"
- RECAPTCHA_KEY = "6Lc9zdMSAAAAAF-7s2wuQ-036pLRbM0p8dDaQdAM"
-
-
- def setup(self):
- self.resumeDownload = True
- #TODO confirm that resume works
-
- def getFileInfo(self):
- api_rep = api_download_info(self.pyfile.url)
- if api_rep['status'] == 'OK':
- self.api_data = api_rep['data'][0]
- self.pyfile.name = self.api_data['name']
- self.pyfile.size = self.api_data['size']
- else:
- self.offline()
-
- def handleFree(self):
- action, inputs = self.parseHtmlForm('id="ifree_form"')
- if not action:
- self.parseError("page 1 / ifree_form")
-
- domain = "http://www." + self.HOSTER_NAME
- self.pyfile.size = float(inputs['sssize'])
- self.logDebug(action, inputs)
- inputs['desc'] = ""
-
- self.html = self.load(domain + action, post=inputs, cookies=True)
-
- # action, inputs = self.parseHtmlForm('id="d3_form"')
- # if not action:
- # self.parseError("page 2 / d3_form")
- # self.logDebug(action, inputs)
- #
- # self.html = self.load(action, post = inputs, cookies = True)
- #
- # try:
- # ajax_check_url, captcha_url = re.search(self.CHECK_URL_PATTERN, self.html).groups()
- # m = re.search(self.SECONDS_PATTERN, self.html)
- # seconds = int(m.group(1)) if m else 60
- # self.wait(seconds+1)
- # except Exception, e:
- # self.logError(e)
- # self.parseError("page 3 / js")
-
- m = re.search(self.SECONDS_PATTERN, self.html)
- seconds = int(m.group(1)) if m else 60
- self.logDebug("Seconds found", seconds)
- m = re.search(self.CAPTCHA_CONTROL_FIELD, self.html)
- recaptcha_control_field = m.group(1)
- self.logDebug("ReCaptcha control field found", recaptcha_control_field)
- self.wait(seconds + 1)
-
- response = self.load("%s/ajax/download3.php" % domain, post=" ", cookies=True)
- if response != '1':
- self.parseError('Unknown response - ajax_check_url')
- self.logDebug(response)
-
- recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response,
- "recaptcha_control_field": recaptcha_control_field}
- self.logDebug("Post data to send", post_data)
- response = self.load('%s/ajax/check_recaptcha.php' % domain, post=post_data, cookies=True)
- self.logDebug(response)
- if not response:
- self.invalidCaptcha()
- if response == "error_free_download_blocked":
- self.logWarning("Daily limit reached")
- self.wait(secondsToMidnight(gmt=2), True)
- if response == "error_wrong_captcha":
- self.logError("Wrong Captcha")
- self.invalidCaptcha()
- self.retry()
- elif response.startswith('['):
- urls = json_loads(response)
- elif response.startswith('http://'):
- urls = [response]
- else:
- self.parseError("Unknown response - captcha check")
-
- self.correctCaptcha()
-
- for download_url in urls:
- try:
- self.logDebug("Download URL", download_url)
- self.download(download_url)
- break
- except Exception, e:
- self.logError(e)
- else:
- self.fail("Download did not finish correctly")
-
- def handlePremium(self):
- api_key = self.user
- premium_key = self.account.getAccountData(self.user)['password']
-
- json_data = [api_key, ["download/direct_links", {"pass": premium_key, "link": self.pyfile.url}]]
- api_rep = self.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
- self.logDebug('API Data: ' + api_rep)
- api_rep = json_loads(api_rep)
-
- if api_rep['status'] == 'FAIL':
- self.fail(api_rep['data'])
-
- direct_link = api_rep['data'][0][0]
- self.logDebug('Direct Link: ' + direct_link)
-
- self.download(direct_link, disposition=True)
diff --git a/module/plugins/hoster/LinksnappyCom.py b/module/plugins/hoster/LinksnappyCom.py
deleted file mode 100644
index e4200e9f2..000000000
--- a/module/plugins/hoster/LinksnappyCom.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urlparse import urlsplit
-
-from module.common.json_layer import json_loads, json_dumps
-from module.plugins.Hoster import Hoster
-
-
-class LinksnappyCom(Hoster):
- __name__ = "LinksnappyCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:[^/]*\.)?linksnappy\.com'
-
- __description__ = """Linksnappy.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- SINGLE_CHUNK_HOSTERS = ('easybytez.com')
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Linksnappy.com")
- self.fail("No Linksnappy.com account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- host = self._get_host(pyfile.url)
- json_params = json_dumps({'link': pyfile.url,
- 'type': host,
- 'username': self.user,
- 'password': self.account.getAccountData(self.user)['password']})
- r = self.load('http://gen.linksnappy.com/genAPI.php',
- post={'genLinks': json_params})
- self.logDebug("JSON data: " + r)
-
- j = json_loads(r)['links'][0]
-
- if j['error']:
- self.logError('Error converting the link: %s' % j['error'])
- self.fail('Error converting the link')
-
- pyfile.name = j['filename']
- new_url = j['generated']
-
- if host in self.SINGLE_CHUNK_HOSTERS:
- self.chunkLimit = 1
- else:
- self.setup()
-
- if new_url != pyfile.url:
- self.logDebug("New URL: " + new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload({"html302": "<title>302 Found</title>"})
- if check == "html302":
- self.retry(wait_time=5, reason="Linksnappy returns only HTML data.")
-
- @staticmethod
- def _get_host(url):
- host = urlsplit(url).netloc
- return re.search(r'[\w-]+\.\w+$', host).group(0)
diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py
deleted file mode 100644
index 18398e905..000000000
--- a/module/plugins/hoster/LoadTo.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://www.load.to/JWydcofUY6/random.bin
-# http://www.load.to/oeSmrfkXE/random100.bin
-
-import re
-
-from module.plugins.internal.CaptchaService import SolveMedia
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class LoadTo(SimpleHoster):
- __name__ = "LoadTo"
- __type__ = "hoster"
- __version__ = "0.16"
-
- __pattern__ = r'http://(?:www\.)?load\.to/\w+'
-
- __description__ = """ Load.to hoster plugin """
- __author_name__ = ("halfman", "stickell")
- __author_mail__ = ("Pulpan3@gmail.com", "l.stickell@yahoo.it")
-
- FILE_NAME_PATTERN = r'<h1>(?P<N>.+)</h1>'
- FILE_SIZE_PATTERN = r'Size: (?P<S>[\d.]+) (?P<U>\w+)'
- OFFLINE_PATTERN = r'>Can\'t find file'
-
- LINK_PATTERN = r'<form method="post" action="(.+?)"'
- WAIT_PATTERN = r'type="submit" value="Download \((\d+)\)"'
- SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)'
-
- FILE_URL_REPLACEMENTS = [(r'(\w)$', r'\1/')]
-
-
- def setup(self):
- self.multiDL = True
- self.chunkLimit = 1
-
-
- def handleFree(self):
- # Search for Download URL
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError("Unable to detect download URL")
-
- download_url = m.group(1)
-
- # Set Timer - may be obsolete
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- self.wait(m.group(1))
-
- # Load.to is using solvemedia captchas since ~july 2014:
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m is None:
- self.download(download_url)
- else:
- captcha_key = m.group(1)
- solvemedia = SolveMedia(self)
- captcha_challenge, captcha_response = solvemedia.challenge(captcha_key)
- self.download(download_url, post={"adcopy_challenge": captcha_challenge, "adcopy_response": captcha_response})
- check = self.checkDownload({"404": re.compile("\A<h1>404 Not Found</h1>")})
- if check == "404":
- self.logWarning("The captcha you entered was incorrect. Please try again.")
- self.invalidCaptcha()
- self.retry()
-
-
-getInfo = create_getInfo(LoadTo)
diff --git a/module/plugins/hoster/LomafileCom.py b/module/plugins/hoster/LomafileCom.py
deleted file mode 100644
index 372d42fd3..000000000
--- a/module/plugins/hoster/LomafileCom.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class LomafileCom(SimpleHoster):
- __name__ = "LomafileCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'https?://lomafile\.com/.+/[\w\.]+'
-
- __description__ = """ Lomafile.com hoster plugin """
- __author_name__ = "nath_schwarz"
- __author_mail__ = "nathan.notwhite@gmail.com"
-
- FILE_NAME_PATTERN = r'Filename:[^>]*>(?P<N>[\w\.]+)'
- FILE_SIZE_PATTERN = r'\((?P<S>\d+)\s(?P<U>\w+)\)'
- OFFLINE_PATTERN = r'Software error'
-
-
- def handleFree(self):
- for _ in range(3):
- captcha_id = re.search(r'src="http://lomafile\.com/captchas/(?P<id>\w+)\.jpg"', self.html)
- if not captcha_id:
- self.parseError("Unable to parse captcha id.")
- else:
- captcha_id = captcha_id.group("id")
-
- form_id = re.search(r'name="id" value="(?P<id>\w+)"', self.html)
- if not form_id:
- self.parseError("Unable to parse form id")
- else:
- form_id = form_id.group("id")
-
- captcha = self.decryptCaptcha("http://lomafile.com/captchas/" + captcha_id + ".jpg")
-
- self.wait(60)
-
- self.html = self.load(self.pyfile.url, post={
- "op": "download2",
- "id": form_id,
- "rand": captcha_id,
- "code": captcha,
- "down_direct": "1"})
-
- download_url = re.search(r'http://[\d\.]+:\d+/d/\w+/[\w\.]+', self.html)
- if download_url is None:
- self.invalidCaptcha()
- self.logDebug("Invalid captcha.")
- else:
- download_url = download_url.group(0)
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
- else:
- self.fail("Invalid captcha-code entered.")
-
-
-getInfo = create_getInfo(LomafileCom)
diff --git a/module/plugins/hoster/LuckyShareNet.py b/module/plugins/hoster/LuckyShareNet.py
deleted file mode 100644
index 60f1204e5..000000000
--- a/module/plugins/hoster/LuckyShareNet.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.lib.bottle import json_loads
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class LuckyShareNet(SimpleHoster):
- __name__ = "LuckyShareNet"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:www\.)?luckyshare.net/(?P<ID>\d{10,})'
-
- __description__ = """LuckyShare.net hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- FILE_INFO_PATTERN = r"<h1 class='file_name'>(?P<N>\S+)</h1>\s*<span class='file_size'>Filesize: (?P<S>[\d.]+)(?P<U>\w+)</span>"
- OFFLINE_PATTERN = r'There is no such file available'
- RECAPTCHA_KEY = "6LdivsgSAAAAANWh-d7rPE1mus4yVWuSQIJKIYNw"
-
-
- def parseJson(self, rep):
- if 'AJAX Error' in rep:
- html = self.load(self.pyfile.url, decode=True)
- m = re.search(r"waitingtime = (\d+);", html)
- if m:
- waittime = int(m.group(1))
- self.logDebug('You have to wait %d seconds between free downloads' % waittime)
- self.retry(wait_time=waittime)
- else:
- self.parseError('Unable to detect wait time between free downloads')
- elif 'Hash expired' in rep:
- self.retry(reason="Hash expired")
- return json_loads(rep)
-
- # TODO: There should be a filesize limit for free downloads
- # TODO: Some files could not be downloaded in free mode
- def handleFree(self):
- file_id = re.match(self.__pattern__, self.pyfile.url).group('ID')
- self.logDebug('File ID: ' + file_id)
- rep = self.load(r"http://luckyshare.net/download/request/type/time/file/" + file_id, decode=True)
- self.logDebug('JSON: ' + rep)
- json = self.parseJson(rep)
-
- self.wait(int(json['time']))
-
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" %
- (challenge, response, json['hash']), decode=True)
- self.logDebug('JSON: ' + rep)
- if 'link' in rep:
- json.update(self.parseJson(rep))
- self.correctCaptcha()
- break
- elif 'Verification failed' in rep:
- self.logInfo('Wrong captcha')
- self.invalidCaptcha()
- else:
- self.parseError('Unable to get downlaod link')
-
- if not json['link']:
- self.fail("No Download url retrieved/all captcha attempts failed")
-
- self.logDebug('Direct URL: ' + json['link'])
- self.download(json['link'])
-
-
-getInfo = create_getInfo(LuckyShareNet)
diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py
deleted file mode 100644
index d0878a34d..000000000
--- a/module/plugins/hoster/MediafireCom.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.CaptchaService import SolveMedia
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
-from module.network.RequestFactory import getURL
-
-
-def replace_eval(js_expr):
- return js_expr.replace(r'eval("', '').replace(r"\'", r"'").replace(r'\"', r'"')
-
-
-def checkHTMLHeader(url):
- try:
- for _ in xrange(3):
- header = getURL(url, just_header=True)
- for line in header.splitlines():
- line = line.lower()
- if 'location' in line:
- url = line.split(':', 1)[1].strip()
- if 'error.php?errno=320' in url:
- return url, 1
- if not url.startswith('http://'):
- url = 'http://www.mediafire.com' + url
- break
- elif 'content-disposition' in line:
- return url, 2
- else:
- break
- except:
- return url, 3
-
- return url, 0
-
-
-def getInfo(urls):
- for url in urls:
- location, status = checkHTMLHeader(url)
- if status:
- file_info = (url, 0, status, url)
- else:
- file_info = parseFileInfo(MediafireCom, url, getURL(url, decode=True))
- yield file_info
-
-
-class MediafireCom(SimpleHoster):
- __name__ = "MediafireCom"
- __type__ = "hoster"
- __version__ = "0.79"
-
- __pattern__ = r'http://(?:www\.)?mediafire\.com/(file/|(view/?|download.php)?\?)(\w{11}|\w{15})($|/)'
-
- __description__ = """Mediafire.com hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- LINK_PATTERN = r'<div class="download_link"[^>]*(?:z-index:(?P<zindex>\d+))?[^>]*>\s*<a href="(?P<href>http://[^"]+)"'
- JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);[^{]*{((\w+)='';.*?)eval\(\2\);"
- JS_ZMODULO_PATTERN = r"\('z-index'\)\) \% (\d+)\)\);"
- SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)'
- PAGE1_ACTION_PATTERN = r'<link rel="canonical" href="([^"]+)"/>'
- PASSWORD_PATTERN = r'<form name="form_password"'
-
- FILE_NAME_PATTERN = r'<META NAME="description" CONTENT="(?P<N>[^"]+)"/>'
- FILE_INFO_PATTERN = r"oFileSharePopup\.ald\('(?P<ID>[^']*)','(?P<N>[^']*)','(?P<S>[^']*)','','(?P<sha256>[^']*)'\)"
- OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>'
-
-
- def setup(self):
- self.multiDL = False
-
- def process(self, pyfile):
- pyfile.url = re.sub(r'/view/?\?', '/?', pyfile.url)
-
- self.url, result = checkHTMLHeader(pyfile.url)
- self.logDebug('Location (%d): %s' % (result, self.url))
-
- if result == 0:
- self.html = self.load(self.url, decode=True)
- self.checkCaptcha()
- self.multiDL = True
- self.check_data = self.getFileInfo()
-
- if self.account:
- self.handlePremium()
- else:
- self.handleFree()
- elif result == 1:
- self.offline()
- else:
- self.multiDL = True
- self.download(self.url, disposition=True)
-
- def handleFree(self):
- passwords = self.getPassword().splitlines()
- while self.PASSWORD_PATTERN in self.html:
- if len(passwords):
- password = passwords.pop(0)
- self.logInfo("Password protected link, trying " + password)
- self.html = self.load(self.url, post={"downloadp": password})
- else:
- self.fail("No or incorrect password")
-
- m = re.search(r'kNO = r"(http://.*?)";', self.html)
- if m is None:
- self.parseError("Download URL")
- download_url = m.group(1)
- self.logDebug("DOWNLOAD LINK:", download_url)
-
- self.download(download_url)
-
- def checkCaptcha(self):
- for _ in xrange(5):
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- solvemedia = SolveMedia(self)
- captcha_challenge, captcha_response = solvemedia.challenge(captcha_key)
- self.html = self.load(self.url, post={"adcopy_challenge": captcha_challenge,
- "adcopy_response": captcha_response}, decode=True)
- else:
- break
- else:
- self.fail("No valid recaptcha solution received")
diff --git a/module/plugins/hoster/MegaDebridEu.py b/module/plugins/hoster/MegaDebridEu.py
deleted file mode 100644
index 13415d063..000000000
--- a/module/plugins/hoster/MegaDebridEu.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote_plus
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-class MegaDebridEu(Hoster):
- __name__ = "MegaDebridEu"
- __type__ = "hoster"
- __version__ = "0.4"
-
- __pattern__ = r'^https?://(?:w{3}\d+\.mega-debrid.eu|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/download/file/[^/]+/.+$'
-
- __description__ = """mega-debrid.eu hoster plugin"""
- __author_name__ = "D.Ducatel"
- __author_mail__ = "dducatel@je-geek.fr"
-
- API_URL = "https://www.mega-debrid.eu/api.php"
-
-
- def getFilename(self, url):
- try:
- return unquote_plus(url.rsplit("/", 1)[1])
- except IndexError:
- return ""
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.exitOnFail(_("Please enter your %s account or deactivate this plugin") % "Mega-debrid.eu")
- else:
- if not self.connectToApi():
- self.exitOnFail(_("Unable to connect to %s") % "Mega-debrid.eu")
-
- self.logDebug("Old URL: %s" % pyfile.url)
- new_url = self.debridLink(pyfile.url)
- self.logDebug("New URL: " + new_url)
-
- filename = self.getFilename(new_url)
- if filename != "":
- pyfile.name = filename
- self.download(new_url, disposition=True)
-
- def connectToApi(self):
- """
- Connexion to the mega-debrid API
- Return True if succeed
- """
- user, data = self.account.selectAccount()
- jsonResponse = self.load(self.API_URL,
- get={'action': 'connectUser', 'login': user, 'password': data['password']})
- response = json_loads(jsonResponse)
-
- if response['response_code'] == "ok":
- self.token = response['token']
- return True
- else:
- return False
-
- def debridLink(self, linkToDebrid):
- """
- Debrid a link
- Return The debrided link if succeed or original link if fail
- """
- jsonResponse = self.load(self.API_URL, get={'action': 'getLink', 'token': self.token},
- post={"link": linkToDebrid})
- response = json_loads(jsonResponse)
-
- if response['response_code'] == "ok":
- debridedLink = response['debridLink'][1:-1]
- return debridedLink
- else:
- self.exitOnFail("Unable to debrid %s" % linkToDebrid)
-
- def exitOnFail(self, msg):
- """
- exit the plugin on fail case
- And display the reason of this failure
- """
- if self.getConfig("unloadFailing"):
- self.logError(msg)
- self.resetAccount()
- else:
- self.fail(msg)
diff --git a/module/plugins/hoster/MegaFilesSe.py b/module/plugins/hoster/MegaFilesSe.py
deleted file mode 100644
index 975708597..000000000
--- a/module/plugins/hoster/MegaFilesSe.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class MegaFilesSe(XFileSharingPro):
- __name__ = "MegaFilesSe"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?megafiles\.se/\w{12}'
-
- __description__ = """MegaFiles.se hoster plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- HOSTER_NAME = "megafiles.se"
-
- OFFLINE_PATTERN = r'<b><font[^>]*>File Not Found</font></b><br><br>'
- FILE_NAME_PATTERN = r'<div[^>]+>\s*<b>(?P<N>[^<]+)</b>\s*</div>'
-
-
-getInfo = create_getInfo(MegaFilesSe)
diff --git a/module/plugins/hoster/MegaNz.py b/module/plugins/hoster/MegaNz.py
deleted file mode 100644
index 5562aad06..000000000
--- a/module/plugins/hoster/MegaNz.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import random
-import re
-
-from Crypto.Cipher import AES
-from Crypto.Util import Counter
-from array import array
-from base64 import standard_b64decode
-from os import remove
-
-from module.common.json_layer import json_loads, json_dumps
-from module.plugins.Hoster import Hoster
-
-
-class MegaNz(Hoster):
- __name__ = "MegaNz"
- __type__ = "hoster"
- __version__ = "0.14"
-
- __pattern__ = r'https?://([a-z0-9]+\.)?mega\.co\.nz/#!([a-zA-Z0-9!_\-]+)'
-
- __description__ = """Mega.co.nz hoster plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "ranan@pyload.org"
-
- API_URL = "https://g.api.mega.co.nz/cs?id=%d"
- FILE_SUFFIX = ".crypted"
-
-
- def b64_decode(self, data):
- data = data.replace("-", "+").replace("_", "/")
- return standard_b64decode(data + '=' * (-len(data) % 4))
-
- def getCipherKey(self, key):
- """ Construct the cipher key from the given data """
- a = array("I", key)
- key_array = array("I", [a[0] ^ a[4], a[1] ^ a[5], a[2] ^ a[6], a[3] ^ a[7]])
- return key_array
-
- def callApi(self, **kwargs):
- """ Dispatch a call to the api, see https://mega.co.nz/#developers """
- # generate a session id, no idea where to obtain elsewhere
- uid = random.randint(10 << 9, 10 ** 10)
-
- resp = self.load(self.API_URL % uid, post=json_dumps([kwargs]))
- self.logDebug("Api Response: " + resp)
- return json_loads(resp)
-
- def decryptAttr(self, data, key):
-
- cbc = AES.new(self.getCipherKey(key), AES.MODE_CBC, "\0" * 16)
- attr = cbc.decrypt(self.b64_decode(data))
- self.logDebug("Decrypted Attr: " + attr)
- if not attr.startswith("MEGA"):
- self.fail(_("Decryption failed"))
-
- # Data is padded, 0-bytes must be stripped
- return json_loads(attr.replace("MEGA", "").rstrip("\0").strip())
-
- def decryptFile(self, key):
- """ Decrypts the file at lastDownload` """
-
- # upper 64 bit of counter start
- n = key[16:24]
-
- # convert counter to long and shift bytes
- ctr = Counter.new(128, initial_value=long(n.encode("hex"), 16) << 64)
- cipher = AES.new(self.getCipherKey(key), AES.MODE_CTR, counter=ctr)
-
- self.pyfile.setStatus("decrypting")
-
- file_crypted = self.lastDownload
- file_decrypted = file_crypted.rsplit(self.FILE_SUFFIX)[0]
- f = open(file_crypted, "rb")
- df = open(file_decrypted, "wb")
-
- # TODO: calculate CBC-MAC for checksum
-
- size = 2 ** 15 # buffer size, 32k
- while True:
- buf = f.read(size)
- if not buf:
- break
-
- df.write(cipher.decrypt(buf))
-
- f.close()
- df.close()
- remove(file_crypted)
-
- self.lastDownload = file_decrypted
-
- def process(self, pyfile):
-
- key = None
-
- # match is guaranteed because plugin was chosen to handle url
- node = re.match(self.__pattern__, pyfile.url).group(2)
- if "!" in node:
- node, key = node.split("!")
-
- self.logDebug("File id: %s | Key: %s" % (node, key))
-
- if not key:
- self.fail(_("No file key provided in the URL"))
-
- # g is for requesting a download url
- # this is similar to the calls in the mega js app, documentation is very bad
- dl = self.callApi(a="g", g=1, p=node, ssl=1)[0]
-
- if "e" in dl:
- e = dl['e']
- # ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later
- if e == -18:
- self.retry()
- else:
- self.fail(_("Error code:") + e)
-
- # TODO: map other error codes, e.g
- # EACCESS (-11): Access violation (e.g., trying to write to a read-only share)
-
- key = self.b64_decode(key)
- attr = self.decryptAttr(dl['at'], key)
-
- pyfile.name = attr['n'] + self.FILE_SUFFIX
-
- self.download(dl['g'])
- self.decryptFile(key)
-
- # Everything is finished and final name can be set
- pyfile.name = attr['n']
diff --git a/module/plugins/hoster/MegacrypterCom.py b/module/plugins/hoster/MegacrypterCom.py
deleted file mode 100644
index 7a86dbf70..000000000
--- a/module/plugins/hoster/MegacrypterCom.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads, json_dumps
-from module.plugins.hoster.MegaNz import MegaNz
-
-
-class MegacrypterCom(MegaNz):
- __name__ = "MegacrypterCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'(https?://[a-z0-9]{0,10}\.?megacrypter\.com/[a-zA-Z0-9!_\-]+)'
-
- __description__ = """Megacrypter.com decrypter plugin"""
- __author_name__ = "GonzaloSR"
- __author_mail__ = "gonzalo@gonzalosr.com"
-
- API_URL = "http://megacrypter.com/api"
- FILE_SUFFIX = ".crypted"
-
-
- def callApi(self, **kwargs):
- """ Dispatch a call to the api, see megacrypter.com/api_doc """
- self.logDebug("JSON request: " + json_dumps(kwargs))
- resp = self.load(self.API_URL, post=json_dumps(kwargs))
- self.logDebug("API Response: " + resp)
- return json_loads(resp)
-
- def process(self, pyfile):
- # match is guaranteed because plugin was chosen to handle url
- node = re.match(self.__pattern__, pyfile.url).group(1)
-
- # get Mega.co.nz link info
- info = self.callApi(link=node, m="info")
-
- # get crypted file URL
- dl = self.callApi(link=node, m="dl")
-
- # TODO: map error codes, implement password protection
- # if info['pass'] is True:
- # crypted_file_key, md5_file_key = info['key'].split("#")
-
- key = self.b64_decode(info['key'])
-
- pyfile.name = info['name'] + self.FILE_SUFFIX
-
- self.download(dl['url'])
- self.decryptFile(key)
-
- # Everything is finished and final name can be set
- pyfile.name = info['name']
diff --git a/module/plugins/hoster/MegareleaseOrg.py b/module/plugins/hoster/MegareleaseOrg.py
deleted file mode 100644
index 05b05c3b5..000000000
--- a/module/plugins/hoster/MegareleaseOrg.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class MegareleaseOrg(XFileSharingPro):
- __name__ = "MegareleaseOrg"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?megarelease.org/\w{12}'
-
- __description__ = """Megarelease.org hoster plugin"""
- __author_name__ = ("derek3x", "stickell")
- __author_mail__ = ("derek3x@vmail.me", "l.stickell@yahoo.it")
-
- HOSTER_NAME = "megarelease.org"
-
- FILE_INFO_PATTERN = r'<font color="red">%s/(?P<N>.+)</font> \((?P<S>[^)]+)\)</font>' % __pattern__
-
-
-getInfo = create_getInfo(MegareleaseOrg)
diff --git a/module/plugins/hoster/MegasharesCom.py b/module/plugins/hoster/MegasharesCom.py
deleted file mode 100644
index c12897ed0..000000000
--- a/module/plugins/hoster/MegasharesCom.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import time
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class MegasharesCom(SimpleHoster):
- __name__ = "MegasharesCom"
- __type__ = "hoster"
- __version__ = "0.24"
-
- __pattern__ = r'http://(?:www\.)?megashares.com/.*'
-
- __description__ = """Megashares.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<h1 class="black xxl"[^>]*title="(?P<N>[^"]+)">'
- FILE_SIZE_PATTERN = r'<strong><span class="black">Filesize:</span></strong> (?P<S>[0-9.]+) (?P<U>[kKMG])i?B<br />'
- OFFLINE_PATTERN = r'<dd class="red">(Invalid Link Request|Link has been deleted)'
-
- LINK_PATTERN = r'<div id="show_download_button_%d"[^>]*>\s*<a href="([^"]+)">'
- PASSPORT_LEFT_PATTERN = r'Your Download Passport is: <[^>]*>(\w+).*\s*You have\s*<[^>]*>\s*([0-9.]+) ([kKMG]i?B)'
- PASSPORT_RENEW_PATTERN = r'Your download passport will renew in\s*<strong>(\d+)</strong>:<strong>(\d+)</strong>:<strong>(\d+)</strong>'
- REACTIVATE_NUM_PATTERN = r'<input[^>]*id="random_num" value="(\d+)" />'
- REACTIVATE_PASSPORT_PATTERN = r'<input[^>]*id="passport_num" value="(\w+)" />'
- REQUEST_URI_PATTERN = r'var request_uri = "([^"]+)";'
- NO_SLOTS_PATTERN = r'<dd class="red">All download slots for this link are currently filled'
-
-
- def setup(self):
- self.resumeDownload = True
- self.multiDL = self.premium
-
- def handlePremium(self):
- self.handleDownload(True)
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- if self.NO_SLOTS_PATTERN in self.html:
- self.retry(wait_time=5 * 60)
-
- self.getFileInfo()
- # if self.pyfile.size > 576716800:
- # self.fail("This file is too large for free download")
-
- # Reactivate passport if needed
- m = re.search(self.REACTIVATE_PASSPORT_PATTERN, self.html)
- if m:
- passport_num = m.group(1)
- request_uri = re.search(self.REQUEST_URI_PATTERN, self.html).group(1)
-
- for _ in xrange(5):
- random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1)
-
- verifyinput = self.decryptCaptcha(
- "http://d01.megashares.com/index.php?secgfx=gfx&random_num=%s" % random_num)
- self.logInfo("Reactivating passport %s: %s %s" % (passport_num, random_num, verifyinput))
-
- url = ("http://d01.megashares.com%s&rs=check_passport_renewal" % request_uri +
- "&rsargs[]=%s&rsargs[]=%s&rsargs[]=%s" % (verifyinput, random_num, passport_num) +
- "&rsargs[]=replace_sec_pprenewal&rsrnd=%s" % str(int(time() * 1000)))
- self.logDebug(url)
- response = self.load(url)
-
- if 'Thank you for reactivating your passport.' in response:
- self.correctCaptcha()
- self.retry()
- else:
- self.invalidCaptcha()
- else:
- self.fail("Failed to reactivate passport")
-
- # Check traffic left on passport
- m = re.search(self.PASSPORT_LEFT_PATTERN, self.html)
- if m is None:
- self.fail('Passport not found')
- self.logInfo("Download passport: %s" % m.group(1))
- data_left = float(m.group(2)) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[m.group(3)]
- self.logInfo("Data left: %s %s (%d MB needed)" % (m.group(2), m.group(3), self.pyfile.size / 1048576))
-
- if not data_left:
- m = re.search(self.PASSPORT_RENEW_PATTERN, self.html)
- renew = m.group(1) + m.group(2) + m.group(3) * 60 * 60 if m else 10 * 60
- self.retry(max_tries=15, wait_time=renew, reason="Unable to get passport")
-
- self.handleDownload(False)
-
- def handleDownload(self, premium=False):
- # Find download link;
- m = re.search(self.LINK_PATTERN % (1 if premium else 2), self.html)
- msg = '%s download URL' % ('Premium' if premium else 'Free')
- if m is None:
- self.parseError(msg)
-
- download_url = m.group(1)
- self.logDebug("%s: %s" % (msg, download_url))
- self.download(download_url)
-
-
-getInfo = create_getInfo(MegasharesCom)
diff --git a/module/plugins/hoster/MovReelCom.py b/module/plugins/hoster/MovReelCom.py
deleted file mode 100644
index 6b13422b0..000000000
--- a/module/plugins/hoster/MovReelCom.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class MovReelCom(XFileSharingPro):
- __name__ = "MovReelCom"
- __type__ = "hoster"
- __version__ = "1.20"
-
- __pattern__ = r'http://(?:www\.)?movreel.com/.*'
-
- __description__ = """MovReel.com hoster plugin"""
- __author_name__ = "JorisV83"
- __author_mail__ = "jorisv83-pyload@yahoo.com"
-
- HOSTER_NAME = "movreel.com"
-
- FILE_INFO_PATTERN = r'<h3>(?P<N>.+?) <small><sup>(?P<S>[\d.]+) (?P<U>..)</sup> </small></h3>'
- OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
- LINK_PATTERN = r'<a href="(http://[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/.*)">Download Link</a>'
-
-
-getInfo = create_getInfo(MovReelCom)
diff --git a/module/plugins/hoster/MultiDebridCom.py b/module/plugins/hoster/MultiDebridCom.py
deleted file mode 100644
index f70fa0f0e..000000000
--- a/module/plugins/hoster/MultiDebridCom.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-class MultiDebridCom(Hoster):
- __name__ = "MultiDebridCom"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/'
-
- __description__ = """Multi-debrid.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com")
- self.fail("No Multi-debrid.com account provided")
- else:
- self.logDebug("Original URL: %s" % pyfile.url)
- page = self.req.load('http://multi-debrid.com/api.php',
- get={'user': self.user, 'pass': self.account.getAccountData(self.user)['password'],
- 'link': pyfile.url})
- self.logDebug("JSON data: " + page)
- page = json_loads(page)
- if page['status'] != 'ok':
- self.fail('Unable to unrestrict link')
- new_url = page['link']
-
- if new_url != pyfile.url:
- self.logDebug("Unrestricted URL: " + new_url)
-
- self.download(new_url, disposition=True)
diff --git a/module/plugins/hoster/MultishareCz.py b/module/plugins/hoster/MultishareCz.py
deleted file mode 100644
index fdf5fbd70..000000000
--- a/module/plugins/hoster/MultishareCz.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import random
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class MultishareCz(SimpleHoster):
- __name__ = "MultishareCz"
- __type__ = "hoster"
- __version__ = "0.34"
-
- __pattern__ = r'http://(?:www\.)?multishare.cz/stahnout/(?P<ID>\d+).*'
-
- __description__ = """MultiShare.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = ur'(?:<li>Název|Soubor): <strong>(?P<N>[^<]+)</strong><(?:/li><li|br)>Velikost: <strong>(?P<S>[^<]+)</strong>'
- OFFLINE_PATTERN = ur'<h1>Stáhnout soubor</h1><p><strong>PoşadovanÜ soubor neexistuje.</strong></p>'
- FILE_SIZE_REPLACEMENTS = [('&nbsp;', '')]
-
-
- def process(self, pyfile):
- msurl = re.match(self.__pattern__, pyfile.url)
- if msurl:
- self.fileID = msurl.group('ID')
- self.html = self.load(pyfile.url, decode=True)
- self.getFileInfo()
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
- else:
- self.handleOverriden()
-
- def handleFree(self):
- self.download("http://www.multishare.cz/html/download_free.php?ID=%s" % self.fileID)
-
- def handlePremium(self):
- if not self.checkCredit():
- self.logWarning("Not enough credit left to download file")
- self.resetAccount()
-
- self.download("http://www.multishare.cz/html/download_premium.php?ID=%s" % self.fileID)
-
- def handleOverriden(self):
- if not self.premium:
- self.fail("Only premium users can download from other hosters")
-
- self.html = self.load('http://www.multishare.cz/html/mms_ajax.php', post={"link": self.pyfile.url}, decode=True)
- self.getFileInfo()
-
- if not self.checkCredit():
- self.fail("Not enough credit left to download file")
-
- url = "http://dl%d.mms.multishare.cz/html/mms_process.php" % round(random() * 10000 * random())
- params = {"u_ID": self.acc_info['u_ID'], "u_hash": self.acc_info['u_hash'], "link": self.pyfile.url}
- self.logDebug(url, params)
- self.download(url, get=params)
-
- def checkCredit(self):
- self.acc_info = self.account.getAccountInfo(self.user, True)
- self.logInfo("User %s has %i MB left" % (self.user, self.acc_info['trafficleft'] / 1024))
-
- return self.pyfile.size / 1024 <= self.acc_info['trafficleft']
-
-
-getInfo = create_getInfo(MultishareCz)
diff --git a/module/plugins/hoster/MyvideoDe.py b/module/plugins/hoster/MyvideoDe.py
deleted file mode 100644
index 630c97ec0..000000000
--- a/module/plugins/hoster/MyvideoDe.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-from module.unescape import unescape
-
-
-class MyvideoDe(Hoster):
- __name__ = "MyvideoDe"
- __type__ = "hoster"
- __version__ = "0.9"
-
- __pattern__ = r'http://(?:www\.)?myvideo.de/watch/'
-
- __description__ = """Myvideo.de hoster plugin"""
- __author_name__ = "spoob"
- __author_mail__ = "spoob@pyload.org"
-
-
- def process(self, pyfile):
- self.pyfile = pyfile
- self.download_html()
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- def download_html(self):
- self.html = self.load(self.pyfile.url)
-
- def get_file_url(self):
- videoId = re.search(r"addVariable\('_videoid','(.*)'\);p.addParam\('quality'", self.html).group(1)
- videoServer = re.search("rel='image_src' href='(.*)thumbs/.*' />", self.html).group(1)
- file_url = videoServer + videoId + ".flv"
- return file_url
-
- def get_file_name(self):
- file_name_pattern = r"<h1 class='globalHd'>(.*)</h1>"
- return unescape(re.search(file_name_pattern, self.html).group(1).replace("/", "") + '.flv')
-
- def file_exists(self):
- self.download_html()
- self.load(str(self.pyfile.url), cookies=False, just_header=True)
- if self.req.lastEffectiveURL == "http://www.myvideo.de/":
- return False
- return True
diff --git a/module/plugins/hoster/NarodRu.py b/module/plugins/hoster/NarodRu.py
deleted file mode 100644
index 18bed0231..000000000
--- a/module/plugins/hoster/NarodRu.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import random
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class NarodRu(SimpleHoster):
- __name__ = "NarodRu"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?narod(\.yandex)?\.ru/(disk|start/[0-9]+\.\w+-narod\.yandex\.ru)/(?P<ID>\d+)/.+'
-
- __description__ = """Narod.ru hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<dt class="name">(?:<[^<]*>)*(?P<N>[^<]+)</dt>'
- FILE_SIZE_PATTERN = r'<dd class="size">(?P<S>\d[^<]*)</dd>'
- OFFLINE_PATTERN = r'<title>404</title>|Ѐайл уЎалеМ с сервОса|ЗакПМчОлся срПк храМеМОя файла\.'
-
- FILE_SIZE_REPLACEMENTS = [(u'КБ', 'KB'), (u'МБ', 'MB'), (u'ГБ', 'GB')]
- FILE_URL_REPLACEMENTS = [("narod.yandex.ru/", "narod.ru/"),
- (r"/start/[0-9]+\.\w+-narod\.yandex\.ru/([0-9]{6,15})/\w+/(\w+)", r"/disk/\1/\2")]
-
- CAPTCHA_PATTERN = r'<number url="(.*?)">(\w+)</number>'
- LINK_PATTERN = r'<a class="h-link" rel="yandex_bar" href="(.+?)">'
-
-
- def handleFree(self):
- for _ in xrange(5):
- self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random() * 777))
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m is None:
- self.parseError('Captcha')
- post_data = {"action": "sendcapcha"}
- captcha_url, post_data['key'] = m.groups()
- post_data['rep'] = self.decryptCaptcha(captcha_url)
-
- self.html = self.load(self.pyfile.url, post=post_data, decode=True)
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- url = 'http://narod.ru' + m.group(1)
- self.correctCaptcha()
- break
- elif u'<b class="error-msg"><strong>ОшОблОсь?</strong>' in self.html:
- self.invalidCaptcha()
- else:
- self.parseError('Download link')
- else:
- self.fail("No valid captcha code entered")
-
- self.logDebug('Download link: ' + url)
- self.download(url)
-
-
-getInfo = create_getInfo(NarodRu)
diff --git a/module/plugins/hoster/NetloadIn.py b/module/plugins/hoster/NetloadIn.py
deleted file mode 100644
index a45aafa63..000000000
--- a/module/plugins/hoster/NetloadIn.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import sleep, time
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.plugins.Plugin import chunks
-
-
-def getInfo(urls):
- ## returns list of tupels (name, size (in bytes), status (see FileDatabase), url)
-
- apiurl = "http://api.netload.in/info.php?auth=Zf9SnQh9WiReEsb18akjvQGqT0I830e8&bz=1&md5=1&file_id="
- id_regex = re.compile(NetloadIn.__pattern__)
- urls_per_query = 80
-
- for chunk in chunks(urls, urls_per_query):
- ids = ""
- for url in chunk:
- match = id_regex.search(url)
- if match:
- ids = ids + match.group(1) + ";"
-
- api = getURL(apiurl + ids, decode=True)
-
- if api is None or len(api) < 10:
- print "Netload prefetch: failed "
- return
- if api.find("unknown_auth") >= 0:
- print "Netload prefetch: Outdated auth code "
- return
-
- result = []
-
- for i, r in enumerate(api.splitlines()):
- try:
- tmp = r.split(";")
- try:
- size = int(tmp[2])
- except:
- size = 0
- result.append((tmp[1], size, 2 if tmp[3] == "online" else 1, chunk[i]))
- except:
- print "Netload prefetch: Error while processing response: "
- print r
-
- yield result
-
-
-class NetloadIn(Hoster):
- __name__ = "NetloadIn"
- __type__ = "hoster"
- __version__ = "0.45"
-
- __pattern__ = r'https?://(?:[^/]*\.)?netload\.in/(?:datei(.*?)(?:\.htm|/)|index.php?id=10&file_id=)'
-
- __description__ = """Netload.in hoster plugin"""
- __author_name__ = ("spoob", "RaNaN", "Gregy")
- __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "gregy@gregy.cz")
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = self.premium
-
- def process(self, pyfile):
- self.url = pyfile.url
- self.prepare()
- pyfile.setStatus("downloading")
- self.proceed(self.url)
-
- def prepare(self):
- self.download_api_data()
-
- if self.api_data and self.api_data['filename']:
- self.pyfile.name = self.api_data['filename']
-
- if self.premium:
- self.logDebug("Netload: Use Premium Account")
- settings = self.load("http://www.netload.in/index.php?id=2&lang=en")
- if '<option value="2" selected="selected">Direkter Download' in settings:
- self.logDebug("Using direct download")
- return True
- else:
- self.logDebug("Direct downloads not enabled. Parsing html for a download URL")
-
- if self.download_html():
- return True
- else:
- self.fail("Failed")
- return False
-
- def download_api_data(self, n=0):
- url = self.url
- id_regex = re.compile(self.__pattern__)
- match = id_regex.search(url)
-
- if match:
- #normalize url
- self.url = 'http://www.netload.in/datei%s.htm' % match.group(1)
- self.logDebug("URL: %s" % self.url)
- else:
- self.api_data = False
- return
-
- apiurl = "http://api.netload.in/info.php"
- src = self.load(apiurl, cookies=False,
- get={"file_id": match.group(1), "auth": "Zf9SnQh9WiReEsb18akjvQGqT0I830e8", "bz": "1",
- "md5": "1"}, decode=True).strip()
- if not src and n <= 3:
- sleep(0.2)
- self.download_api_data(n + 1)
- return
-
- self.logDebug("Netload: APIDATA: " + src)
- self.api_data = {}
- if src and ";" in src and src not in ("unknown file_data", "unknown_server_data", "No input file specified."):
- lines = src.split(";")
- self.api_data['exists'] = True
- self.api_data['fileid'] = lines[0]
- self.api_data['filename'] = lines[1]
- self.api_data['size'] = lines[2]
- self.api_data['status'] = lines[3]
- if self.api_data['status'] == "online":
- self.api_data['checksum'] = lines[4].strip()
- else:
- self.api_data = False # check manually since api data is useless sometimes
-
- if lines[0] == lines[1] and lines[2] == "0": # useless api data
- self.api_data = False
- else:
- self.api_data = False
-
- def final_wait(self, page):
- wait_time = self.get_wait_time(page)
- self.setWait(wait_time)
- self.logDebug("Netload: final wait %d seconds" % wait_time)
- self.wait()
- self.url = self.get_file_url(page)
-
- def download_html(self):
- self.logDebug("Netload: Entering download_html")
- page = self.load(self.url, decode=True)
- t = time() + 30
-
- if "/share/templates/download_hddcrash.tpl" in page:
- self.logError("Netload HDD Crash")
- self.fail(_("File temporarily not available"))
-
- if not self.api_data:
- self.logDebug("API Data may be useless, get details from html page")
-
- if "* The file was deleted" in page:
- self.offline()
-
- name = re.search(r'class="dl_first_filename">([^<]+)', page, re.MULTILINE)
- # the found filename is not truncated
- if name:
- name = name.group(1).strip()
- if not name.endswith(".."):
- self.pyfile.name = name
-
- captchawaited = False
- for i in xrange(10):
-
- if not page:
- page = self.load(self.url)
- t = time() + 30
-
- if "/share/templates/download_hddcrash.tpl" in page:
- self.logError("Netload HDD Crash")
- self.fail(_("File temporarily not available"))
-
- self.logDebug("Netload: try number %d " % i)
-
- if ">Your download is being prepared.<" in page:
- self.logDebug("Netload: We will prepare your download")
- self.final_wait(page)
- return True
- if ">An access request has been made from IP address <" in page:
- wait = self.get_wait_time(page)
- if not wait:
- self.logDebug("Netload: Wait was 0 setting 30")
- wait = 30 * 60
- self.logInfo(_("Netload: waiting between downloads %d s." % wait))
- self.wantReconnect = True
- self.setWait(wait)
- self.wait()
-
- return self.download_html()
-
- self.logDebug("Netload: Trying to find captcha")
-
- try:
- url_captcha_html = "http://netload.in/" + re.search('(index.php\?id=10&amp;.*&amp;captcha=1)',
- page).group(1).replace("amp;", "")
- except:
- page = None
- continue
-
- try:
- page = self.load(url_captcha_html, cookies=True)
- captcha_url = "http://netload.in/" + re.search('(share/includes/captcha.php\?t=\d*)', page).group(1)
- except:
- self.logDebug("Netload: Could not find captcha, try again from beginning")
- captchawaited = False
- continue
-
- file_id = re.search('<input name="file_id" type="hidden" value="(.*)" />', page).group(1)
- if not captchawaited:
- wait = self.get_wait_time(page)
- if i == 0:
- self.pyfile.waitUntil = time() # dont wait contrary to time on website
- else:
- self.pyfile.waitUntil = t
- self.logInfo(_("Netload: waiting for captcha %d s.") % (self.pyfile.waitUntil - time()))
- #self.setWait(wait)
- self.wait()
- captchawaited = True
-
- captcha = self.decryptCaptcha(captcha_url)
- page = self.load("http://netload.in/index.php?id=10", post={"file_id": file_id, "captcha_check": captcha},
- cookies=True)
-
- return False
-
- def get_file_url(self, page):
- try:
- file_url_pattern = r"<a class=\"Orange_Link\" href=\"(http://.+)\".?>Or click here"
- attempt = re.search(file_url_pattern, page)
- if attempt is not None:
- return attempt.group(1)
- else:
- self.logDebug("Netload: Backup try for final link")
- file_url_pattern = r"<a href=\"(.+)\" class=\"Orange_Link\">Click here"
- attempt = re.search(file_url_pattern, page)
- return "http://netload.in/" + attempt.group(1)
- except:
- self.logDebug("Netload: Getting final link failed")
- return None
-
- def get_wait_time(self, page):
- wait_seconds = int(re.search(r"countdown\((.+),'change\(\)'\)", page).group(1)) / 100
- return wait_seconds
-
- def proceed(self, url):
- self.logDebug("Netload: Downloading..")
-
- self.download(url, disposition=True)
-
- check = self.checkDownload({"empty": re.compile(r"^$"), "offline": re.compile("The file was deleted")})
-
- if check == "empty":
- self.logInfo(_("Downloaded File was empty"))
- self.retry()
- elif check == "offline":
- self.offline()
diff --git a/module/plugins/hoster/NosuploadCom.py b/module/plugins/hoster/NosuploadCom.py
deleted file mode 100644
index 3187dd89f..000000000
--- a/module/plugins/hoster/NosuploadCom.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class NosuploadCom(XFileSharingPro):
- __name__ = "NosuploadCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?nosupload\.com/\?d=\w{12}'
-
- __description__ = """Nosupload.com hoster plugin"""
- __author_name__ = "igel"
- __author_mail__ = "igelkun@myopera.com"
-
- HOSTER_NAME = "nosupload.com"
-
- FILE_SIZE_PATTERN = r'<p><strong>Size:</strong> (?P<S>[0-9\.]+) (?P<U>[kKMG]?B)</p>'
- LINK_PATTERN = r'<a class="select" href="(http://.+?)">Download</a>'
- WAIT_PATTERN = r'Please wait.*?>(\d+)</span>'
-
-
- def getDownloadLink(self):
- # stage1: press the "Free Download" button
- data = self.getPostParameters()
- self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
-
- # stage2: wait some time and press the "Download File" button
- data = self.getPostParameters()
- wait_time = re.search(self.WAIT_PATTERN, self.html, re.MULTILINE | re.DOTALL).group(1)
- self.logDebug("hoster told us to wait %s seconds" % wait_time)
- self.wait(wait_time)
- self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
-
- # stage3: get the download link
- return re.search(self.LINK_PATTERN, self.html, re.S).group(1)
-
-
-getInfo = create_getInfo(NosuploadCom)
diff --git a/module/plugins/hoster/NovafileCom.py b/module/plugins/hoster/NovafileCom.py
deleted file mode 100644
index 4a89064ea..000000000
--- a/module/plugins/hoster/NovafileCom.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://novafile.com/vfun4z6o2cit
-# http://novafile.com/s6zrr5wemuz4
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class NovafileCom(XFileSharingPro):
- __name__ = "NovafileCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?novafile\.com/\w{12}'
-
- __description__ = """Novafile.com hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- HOSTER_NAME = "novafile.com"
-
- FILE_SIZE_PATTERN = r'<div class="size">(?P<S>.+?)</div>'
- ERROR_PATTERN = r'class="alert[^"]*alert-separate"[^>]*>\s*(?:<p>)?(.*?)\s*</'
- LINK_PATTERN = r'<a href="(http://s\d+\.novafile\.com/.*?)" class="btn btn-green">Download File</a>'
- WAIT_PATTERN = r'<p>Please wait <span id="count"[^>]*>(\d+)</span> seconds</p>'
-
-
- def setup(self):
- self.multiDL = False
-
-
-getInfo = create_getInfo(NovafileCom)
diff --git a/module/plugins/hoster/NowDownloadEu.py b/module/plugins/hoster/NowDownloadEu.py
deleted file mode 100644
index 193698f17..000000000
--- a/module/plugins/hoster/NowDownloadEu.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.utils import fixup
-
-
-class NowDownloadEu(SimpleHoster):
- __name__ = "NowDownloadEu"
- __type__ = "hoster"
- __version__ = "0.05"
-
- __pattern__ = r'http://(?:www\.)?nowdownload\.(ch|co|eu|sx)/(dl/|download\.php\?id=)(?P<ID>\w+)'
-
- __description__ = """NowDownload.ch hoster plugin"""
- __author_name__ = ("godofdream", "Walter Purcaro")
- __author_mail__ = ("soilfiction@gmail.com", "vuolter@gmail.com")
-
- FILE_INFO_PATTERN = r'Downloading</span> <br> (?P<N>.*) (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B </h4>'
- OFFLINE_PATTERN = r'(This file does not exist!)'
-
- TOKEN_PATTERN = r'"(/api/token\.php\?token=[a-z0-9]+)"'
- CONTINUE_PATTERN = r'"(/dl2/[a-z0-9]+/[a-z0-9]+)"'
- WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),'
- LINK_PATTERN = r'"(http://f\d+\.nowdownload\.ch/dl/[a-z0-9]+/[a-z0-9]+/[^<>"]*?)"'
-
- FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<[^>]*>', '')]
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
- self.chunkLimit = -1
-
- def handleFree(self):
- tokenlink = re.search(self.TOKEN_PATTERN, self.html)
- continuelink = re.search(self.CONTINUE_PATTERN, self.html)
- if tokenlink is None or continuelink is None:
- self.fail('Plugin out of Date')
-
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- wait = int(m.group(1))
- else:
- wait = 60
-
- baseurl = "http://www.nowdownload.ch"
- self.html = self.load(baseurl + str(tokenlink.group(1)))
- self.wait(wait)
-
- self.html = self.load(baseurl + str(continuelink.group(1)))
-
- url = re.search(self.LINK_PATTERN, self.html)
- if url is None:
- self.fail('Download Link not Found (Plugin out of Date?)')
- self.logDebug('Download link: ' + str(url.group(1)))
- self.download(str(url.group(1)))
-
-
-getInfo = create_getInfo(NowDownloadEu)
diff --git a/module/plugins/hoster/OboomCom.py b/module/plugins/hoster/OboomCom.py
deleted file mode 100644
index f30c64184..000000000
--- a/module/plugins/hoster/OboomCom.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# https://www.oboom.com/B7CYZIEB/10Mio.dat
-
-import re
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-from module.plugins.internal.CaptchaService import ReCaptcha
-
-
-class OboomCom(Hoster):
- __name__ = "OboomCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'https?://(?:www\.)?oboom\.com/(#(id=|/)?)?(?P<ID>[A-Z0-9]{8})'
-
- __description__ = """oboom.com hoster plugin"""
- __author_name__ = "stanley"
- __author_mail__ = "stanley.foerster@gmail.com"
-
- RECAPTCHA_KEY = "6LdqpO0SAAAAAJGHXo63HyalP7H4qlRs_vff0kJX"
-
-
- def loadUrl(self, url, get=None):
- if get is None:
- get = dict()
- return json_loads(self.load(url, get, decode=True))
-
- def getFileId(self, url):
- self.fileId = re.match(OboomCom.__pattern__, url).group('ID')
-
- def getSessionToken(self):
- if self.premium:
- accountInfo = self.account.getAccountInfo(self.user, True)
- if "session" in accountInfo:
- self.sessionToken = accountInfo['session']
- else:
- self.fail("Could not retrieve premium session")
- else:
- apiUrl = "https://www.oboom.com/1.0/guestsession"
- result = self.loadUrl(apiUrl)
- if result[0] == 200:
- self.sessionToken = result[1]
- else:
- self.fail("Could not retrieve token for guest session. Error code %s" % result[0])
-
- def solveCaptcha(self):
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
- apiUrl = "https://www.oboom.com/1.0/download/ticket"
- params = {"recaptcha_challenge_field": challenge,
- "recaptcha_response_field": response,
- "download_id": self.fileId,
- "token": self.sessionToken}
- result = self.loadUrl(apiUrl, params)
-
- if result[0] == 200:
- self.downloadToken = result[1]
- self.downloadAuth = result[2]
- self.correctCaptcha()
- self.setWait(30)
- self.wait()
- break
- elif result[0] == 400:
- if result[1] == "incorrect-captcha-sol":
- self.invalidCaptcha()
- elif result[1] == "captcha-timeout":
- self.invalidCaptcha()
- elif result[1] == "forbidden":
- self.retry(5, 15 * 60, "Service unavailable")
- elif result[0] == 403:
- if result[1] == -1: # another download is running
- self.setWait(15 * 60)
- else:
- self.setWait(result[1], reconnect=True)
- self.wait()
- self.retry(5)
- else:
- self.invalidCaptcha()
- self.fail("Received invalid captcha 5 times")
-
- def getFileInfo(self, token, fileId):
- apiUrl = "https://api.oboom.com/1.0/info"
- params = {"token": token, "items": fileId, "http_errors": 0}
-
- result = self.loadUrl(apiUrl, params)
- if result[0] == 200:
- item = result[1][0]
- if item['state'] == "online":
- self.fileSize = item['size']
- self.fileName = item['name']
- else:
- self.offline()
- else:
- self.fail("Could not retrieve file info. Error code %s: %s" % (result[0], result[1]))
-
- def getDownloadTicket(self):
- apiUrl = "https://api.oboom.com/1.0/dl"
- params = {"item": self.fileId, "http_errors": 0}
- if self.premium:
- params['token'] = self.sessionToken
- else:
- params['token'] = self.downloadToken
- params['auth'] = self.downloadAuth
-
- result = self.loadUrl(apiUrl, params)
- if result[0] == 200:
- self.downloadDomain = result[1]
- self.downloadTicket = result[2]
- else:
- self.fail("Could not retrieve download ticket. Error code %s" % result[0])
-
- def setup(self):
- self.chunkLimit = 1
- self.multiDL = self.premium
-
- def process(self, pyfile):
- self.pyfile.url.replace(".com/#id=", ".com/#")
- self.pyfile.url.replace(".com/#/", ".com/#")
- self.getFileId(self.pyfile.url)
- self.getSessionToken()
- self.getFileInfo(self.sessionToken, self.fileId)
- self.pyfile.name = self.fileName
- self.pyfile.size = self.fileSize
- if not self.premium:
- self.solveCaptcha()
- self.getDownloadTicket()
- self.download("https://%s/1.0/dlh" % self.downloadDomain, get={"ticket": self.downloadTicket, "http_errors": 0})
diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py
deleted file mode 100644
index 0536f7185..000000000
--- a/module/plugins/hoster/OneFichierCom.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://5pnm24ltcw.1fichier.com/
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class OneFichierCom(SimpleHoster):
- __name__ = "OneFichierCom"
- __type__ = "hoster"
- __version__ = "0.61"
-
- __pattern__ = r'(http://(?P<id>\w+)\.(?P<host>(1fichier|d(es)?fichiers|pjointe)\.(com|fr|net|org)|(cjoint|mesfichiers|piecejointe|oi)\.(org|net)|tenvoi\.(com|org|net)|dl4free\.com|alterupload\.com|megadl.fr))/?'
-
- __description__ = """1fichier.com hoster plugin"""
- __author_name__ = ("fragonib", "the-razer", "zoidberg", "imclem", "stickell", "Elrick69")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "daniel_ AT gmx DOT net", "zoidberg@mujmail.cz",
- "imclem on github", "l.stickell@yahoo.it", "elrick69[AT]rocketmail[DOT]com")
-
- FILE_NAME_PATTERN = r'">Filename :</th>\s*<td>(?P<N>[^<]+)</td>'
- FILE_SIZE_PATTERN = r'<th>Size :</th>\s*<td>(?P<S>[^<]+)</td>'
- OFFLINE_PATTERN = r'The (requested)? file (could not be found|has been deleted)'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'http://\g<id>.\g<host>/en/')]
-
- WAITING_PATTERN = r'Warning ! Without premium status, you must wait between each downloads'
- NOT_PARALLEL = r'Warning ! Without premium status, you can download only one file at a time'
- WAIT_TIME = 10 * 60 # Retry time between each free download
- RETRY_TIME = 15 * 60 # Default retry time in seconds (if detected parallel download)
-
-
- def setup(self):
- self.multiDL = self.premium
- self.resumeDownload = True
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- if self.WAITING_PATTERN in self.html:
- self.logInfo('You have to wait been each free download! Retrying in %d seconds.' % self.WAIT_TIME)
- self.waitAndRetry(self.WAIT_TIME)
- else: # detect parallel download
- m = re.search(self.NOT_PARALLEL, self.html)
- if m:
- self.waitAndRetry(self.RETRY_TIME)
-
- url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id'])
- if not url:
- self.parseError("Download link not found")
-
- # Check for protection
- if "pass" in inputs:
- inputs['pass'] = self.getPassword()
- inputs['submit'] = "Download"
-
- self.download(url, post=inputs)
-
- # Check download
- self.checkDownloadedFile()
-
- def handlePremium(self):
- url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id'])
- if not url:
- self.parseError("Download link not found")
-
- # Check for protection
- if "pass" in inputs:
- inputs['pass'] = self.getPassword()
- inputs['submit'] = "Download"
-
- self.download(url, post=inputs)
-
- # Check download
- self.checkDownloadedFile()
-
- def checkDownloadedFile(self):
- check = self.checkDownload({"wait": self.WAITING_PATTERN})
- if check == "wait":
- self.waitAndRetry(int(self.lastcheck.group(1)) * 60)
-
- def waitAndRetry(self, wait_time):
- self.wait(wait_time, True)
- self.retry()
-
-
-
-getInfo = create_getInfo(OneFichierCom)
diff --git a/module/plugins/hoster/OverLoadMe.py b/module/plugins/hoster/OverLoadMe.py
deleted file mode 100644
index 7b7c83893..000000000
--- a/module/plugins/hoster/OverLoadMe.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import randrange
-from urllib import unquote
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-from module.utils import parseFileSize
-
-
-class OverLoadMe(Hoster):
- __name__ = "OverLoadMe"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://.*overload\.me.*'
-
- __description__ = """Over-Load.me hoster plugin"""
- __author_name__ = "marley"
- __author_mail__ = "marley@over-load.me"
-
-
- def getFilename(self, url):
- try:
- name = unquote(url.rsplit("/", 1)[1])
- except IndexError:
- name = "Unknown_Filename..."
- if name.endswith("..."): # incomplete filename, append random stuff
- name += "%s.tmp" % randrange(100, 999)
- return name
-
- def setup(self):
- self.chunkLimit = 5
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Over-Load")
- self.fail("No Over-Load account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- data = self.account.getAccountData(self.user)
-
- page = self.load("https://api.over-load.me/getdownload.php",
- get={"auth": data['password'], "link": pyfile.url})
- data = json_loads(page)
-
- self.logDebug("Returned Data: %s" % data)
-
- if data['err'] == 1:
- self.logWarning(data['msg'])
- self.tempOffline()
- else:
- if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['filename']:
- pyfile.name = data['filename']
- pyfile.size = parseFileSize(data['filesize'])
- new_url = data['downloadlink']
-
- if self.getConfig("https"):
- new_url = new_url.replace("http://", "https://")
- else:
- new_url = new_url.replace("https://", "http://")
-
- if new_url != pyfile.url:
- self.logDebug("New URL: %s" % new_url)
-
- if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'):
- # only use when name wasn't already set
- pyfile.name = self.getFilename(new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload(
- {"error": "<title>An error occured while processing your request</title>"})
-
- if check == "error":
- # usual this download can safely be retried
- self.retry(reason="An error occured while generating link.", wait_time=60)
diff --git a/module/plugins/hoster/PandaPlanet.py b/module/plugins/hoster/PandaPlanet.py
deleted file mode 100644
index 6f852ac9a..000000000
--- a/module/plugins/hoster/PandaPlanet.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# test.bin - 214 B - http://pandapla.net/pew1cz3ot586
-# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://pandapla.net/tz0rgjfyyoh7
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class PandaPlanet(XFileSharingPro):
- __name__ = "PandaPlanet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?pandapla\.net/\w{12}'
-
- __description__ = """Pandapla.net hoster plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- HOSTER_NAME = "pandapla.net"
-
- FILE_SIZE_PATTERN = r'File Size:</b>\s*</td>\s*<td[^>]*>(?P<S>[^<]+)</td>\s*</tr>'
- FILE_NAME_PATTERN = r'File Name:</b>\s*</td>\s*<td[^>]*>(?P<N>[^<]+)</td>\s*</tr>'
- LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+\/(?!video\.mp4)[^"\'<]+)' % HOSTER_NAME
-
-
-getInfo = create_getInfo(PandaPlanet)
diff --git a/module/plugins/hoster/PornhostCom.py b/module/plugins/hoster/PornhostCom.py
deleted file mode 100644
index f0621c420..000000000
--- a/module/plugins/hoster/PornhostCom.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class PornhostCom(Hoster):
- __name__ = "PornhostCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)'
-
- __description__ = """Pornhost.com hoster plugin"""
- __author_name__ = "jeix"
- __author_mail__ = "jeix@hasnomail.de"
-
-
- def process(self, pyfile):
- self.download_html()
- if not self.file_exists():
- self.offline()
-
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- # Old interface
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html)
- if url is None:
- url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html)
- if url is None:
- url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html)
- if url is None:
- url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"',
- self.html) # TODO: fix this one since it doesn't match
-
- return url.group(1).strip()
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html)
- if name is None:
- name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html)
- if name is None:
- name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html)
- if name is None:
- name = re.search(r'"http://file[0-9]+\.pornhost\.com/.*?/(.*?)"', self.html)
-
- name = name.group(1).strip() + ".flv"
-
- return name
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
-
- if (re.search(r'gallery not found', self.html) is not None or
- re.search(r'You will be redirected to', self.html) is not None):
- return False
- else:
- return True
diff --git a/module/plugins/hoster/PornhubCom.py b/module/plugins/hoster/PornhubCom.py
deleted file mode 100644
index cecdc4339..000000000
--- a/module/plugins/hoster/PornhubCom.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class PornhubCom(Hoster):
- __name__ = "PornhubCom"
- __type__ = "hoster"
- __version__ = "0.5"
-
- __pattern__ = r'http://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=[\w\d]+'
-
- __description__ = """Pornhub.com hoster plugin"""
- __author_name__ = "jeix"
- __author_mail__ = "jeix@hasnomail.de"
-
-
- def process(self, pyfile):
- self.download_html()
- if not self.file_exists():
- self.offline()
-
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- url = "http://www.pornhub.com//gateway.php"
- video_id = self.pyfile.url.split('=')[-1]
- # thanks to jD team for this one v
- post_data = "\x00\x03\x00\x00\x00\x01\x00\x0c\x70\x6c\x61\x79\x65\x72\x43\x6f\x6e\x66\x69\x67\x00\x02\x2f\x31\x00\x00\x00\x44\x0a\x00\x00\x00\x03\x02\x00"
- post_data += chr(len(video_id))
- post_data += video_id
- post_data += "\x02\x00\x02\x2d\x31\x02\x00\x20"
- post_data += "add299463d4410c6d1b1c418868225f7"
-
- content = self.req.load(url, post=str(post_data))
-
- new_content = ""
- for x in content:
- if ord(x) < 32 or ord(x) > 176:
- new_content += '#'
- else:
- new_content += x
-
- content = new_content
-
- return re.search(r'flv_url.*(http.*?)##post_roll', content).group(1)
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- m = re.search(r'<title[^>]+>([^<]+) - ', self.html)
- if m:
- name = m.group(1)
- else:
- matches = re.findall('<h1>(.*?)</h1>', self.html)
- if len(matches) > 1:
- name = matches[1]
- else:
- name = matches[0]
-
- return name + '.flv'
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
-
- if re.search(r'This video is no longer in our database or is in conversion', self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/PotloadCom.py b/module/plugins/hoster/PotloadCom.py
deleted file mode 100644
index 087b7a265..000000000
--- a/module/plugins/hoster/PotloadCom.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class PotloadCom(XFileSharingPro):
- __name__ = "PotloadCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?potload\.com/\w{12}'
-
- __description__ = """Potload.com hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
- HOSTER_NAME = "potload.com"
-
- FILE_INFO_PATTERN = r'<h[1-6]>(?P<N>.+) \((?P<S>\d+) (?P<U>\w+)\)</h'
-
-
-getInfo = create_getInfo(PotloadCom)
diff --git a/module/plugins/hoster/Premium4Me.py b/module/plugins/hoster/Premium4Me.py
deleted file mode 100644
index ea841338a..000000000
--- a/module/plugins/hoster/Premium4Me.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from os import remove
-from os.path import exists
-from urllib import quote
-
-from module.plugins.Hoster import Hoster
-from module.utils import fs_encode
-
-
-class Premium4Me(Hoster):
- __name__ = "Premium4Me"
- __type__ = "hoster"
- __version__ = "0.08"
-
- __pattern__ = r'http://(?:www\.)?premium.to/.*'
-
- __description__ = """Premium.to hoster plugin"""
- __author_name__ = ("RaNaN", "zoidberg", "stickell")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
-
- def setup(self):
- self.resumeDownload = True
- self.chunkLimit = 1
-
- def process(self, pyfile):
- if not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "premium.to")
- self.fail("No premium.to account provided")
-
- self.logDebug("premium.to: Old URL: %s" % pyfile.url)
-
- tra = self.getTraffic()
-
- #raise timeout to 2min
- self.req.setOption("timeout", 120)
-
- self.download(
- "http://premium.to/api/getfile.php?authcode=%s&link=%s" % (self.account.authcode, quote(pyfile.url, "")),
- disposition=True)
-
- check = self.checkDownload({"nopremium": "No premium account available"})
-
- if check == "nopremium":
- self.retry(60, 5 * 60, "No premium account available")
-
- err = ''
- if self.req.http.code == '420':
- # Custom error code send - fail
- lastDownload = fs_encode(self.lastDownload)
-
- if exists(lastDownload):
- f = open(lastDownload, "rb")
- err = f.read(256).strip()
- f.close()
- remove(lastDownload)
- else:
- err = 'File does not exist'
-
- trb = self.getTraffic()
- self.logInfo("Filesize: %d, Traffic used %d, traffic left %d" % (pyfile.size, tra - trb, trb))
-
- if err:
- self.fail(err)
-
- def getTraffic(self):
- try:
- traffic = int(self.load("http://premium.to/api/traffic.php?authcode=%s" % self.account.authcode))
- except:
- traffic = 0
- return traffic
diff --git a/module/plugins/hoster/PremiumizeMe.py b/module/plugins/hoster/PremiumizeMe.py
deleted file mode 100644
index 7d0ca9ed2..000000000
--- a/module/plugins/hoster/PremiumizeMe.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-class PremiumizeMe(Hoster):
- __name__ = "PremiumizeMe"
- __type__ = "hoster"
- __version__ = "0.12"
-
- __pattern__ = None #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady
-
- __description__ = """Premiumize.me hoster plugin"""
- __author_name__ = "Florian Franzen"
- __author_mail__ = "FlorianFranzen@gmail.com"
-
-
- def process(self, pyfile):
- # Check account
- if not self.account or not self.account.canUse():
- self.logError(_("Please enter your %s account or deactivate this plugin") % "premiumize.me")
- self.fail("No valid premiumize.me account provided")
-
- # In some cases hostsers do not supply us with a filename at download, so we
- # are going to set a fall back filename (e.g. for freakshare or xfileshare)
- pyfile.name = pyfile.name.split('/').pop() # Remove everthing before last slash
-
- # Correction for automatic assigned filename: Removing html at end if needed
- suffix_to_remove = ["html", "htm", "php", "php3", "asp", "shtm", "shtml", "cfml", "cfm"]
- temp = pyfile.name.split('.')
- if temp.pop() in suffix_to_remove:
- pyfile.name = ".".join(temp)
-
- # Get account data
- (user, data) = self.account.selectAccount()
-
- # Get rewritten link using the premiumize.me api v1 (see https://secure.premiumize.me/?show=api)
- answer = self.load(
- "https://api.premiumize.me/pm-api/v1.php?method=directdownloadlink&params[login]=%s&params[pass]=%s&params[link]=%s" % (
- user, data['password'], pyfile.url))
- data = json_loads(answer)
-
- # Check status and decide what to do
- status = data['status']
- if status == 200:
- self.download(data['result']['location'], disposition=True)
- elif status == 400:
- self.fail("Invalid link")
- elif status == 404:
- self.offline()
- elif status >= 500:
- self.tempOffline()
- else:
- self.fail(data['statusmessage'])
diff --git a/module/plugins/hoster/PromptfileCom.py b/module/plugins/hoster/PromptfileCom.py
deleted file mode 100644
index d16af7e5a..000000000
--- a/module/plugins/hoster/PromptfileCom.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class PromptfileCom(SimpleHoster):
- __name__ = "PromptfileCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'https?://(?:www\.)?promptfile\.com/'
-
- __description__ = """Promptfile.com hoster plugin"""
- __author_name__ = "igel"
- __author_mail__ = "igelkun@myopera.com"
-
- FILE_INFO_PATTERN = r'<span style="[^"]*" title="[^"]*">(?P<N>.*?) \((?P<S>[\d.]+) (?P<U>\w+)\)</span>'
- OFFLINE_PATTERN = r'<span style="[^"]*" title="File Not Found">File Not Found</span>'
-
- CHASH_PATTERN = r'<input type="hidden" name="chash" value="([^"]*)" />'
- LINK_PATTERN = r"clip: {\s*url: '(https?://(?:www\.)promptfile[^']*)',"
-
-
- def handleFree(self):
- # STAGE 1: get link to continue
- m = re.search(self.CHASH_PATTERN, self.html)
- if m is None:
- self.parseError("Unable to detect chash")
- chash = m.group(1)
- self.logDebug("read chash %s" % chash)
- # continue to stage2
- self.html = self.load(self.pyfile.url, decode=True, post={'chash': chash})
-
- # STAGE 2: get the direct link
- m = re.search(self.LINK_PATTERN, self.html, re.MULTILINE | re.DOTALL)
- if m is None:
- self.parseError("Unable to detect direct link")
- direct = m.group(1)
- self.logDebug("found direct link: " + direct)
- self.download(direct, disposition=True)
-
-
-getInfo = create_getInfo(PromptfileCom)
diff --git a/module/plugins/hoster/QuickshareCz.py b/module/plugins/hoster/QuickshareCz.py
deleted file mode 100644
index 972effffb..000000000
--- a/module/plugins/hoster/QuickshareCz.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class QuickshareCz(SimpleHoster):
- __name__ = "QuickshareCz"
- __type__ = "hoster"
- __version__ = "0.54"
-
- __pattern__ = r'http://(?:[^/]*\.)?quickshare.cz/stahnout-soubor/.*'
-
- __description__ = """Quickshare.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<th width="145px">Název:</th>\s*<td style="word-wrap:break-word;">(?P<N>[^<]+)</td>'
- FILE_SIZE_PATTERN = r'<th>Velikost:</th>\s*<td>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</td>'
- OFFLINE_PATTERN = r'<script type="text/javascript">location.href=\'/chyba\';</script>'
-
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
- self.getFileInfo()
-
- # parse js variables
- self.jsvars = dict((x, y.strip("'")) for x, y in re.findall(r"var (\w+) = ([0-9.]+|'[^']*')", self.html))
- self.logDebug(self.jsvars)
- pyfile.name = self.jsvars['ID3']
-
- # determine download type - free or premium
- if self.premium:
- if 'UU_prihlasen' in self.jsvars:
- if self.jsvars['UU_prihlasen'] == '0':
- self.logWarning('User not logged in')
- self.relogin(self.user)
- self.retry()
- elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']):
- self.logWarning('Not enough credit left')
- self.premium = False
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- check = self.checkDownload({"err": re.compile(r"\AChyba!")}, max_size=100)
- if check == "err":
- self.fail("File not m or plugin defect")
-
- def handleFree(self):
- # get download url
- download_url = '%s/download.php' % self.jsvars['server']
- data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID3", "ID4"))
- self.logDebug("FREE URL1:" + download_url, data)
-
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.load(download_url, post=data)
- self.header = self.req.http.header
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
-
- m = re.search("Location\s*:\s*(.*)", self.header, re.I)
- if m is None:
- self.fail('File not found')
- download_url = m.group(1)
- self.logDebug("FREE URL2:" + download_url)
-
- # check errors
- m = re.search(r'/chyba/(\d+)', download_url)
- if m:
- if m.group(1) == '1':
- self.retry(60, 2 * 60, "This IP is already downloading")
- elif m.group(1) == '2':
- self.retry(60, 60, "No free slots available")
- else:
- self.fail('Error %d' % m.group(1))
-
- # download file
- self.download(download_url)
-
- def handlePremium(self):
- download_url = '%s/download_premium.php' % self.jsvars['server']
- data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID4", "ID5"))
- self.logDebug("PREMIUM URL:" + download_url, data)
- self.download(download_url, get=data)
-
-
-getInfo = create_getInfo(QuickshareCz)
diff --git a/module/plugins/hoster/RPNetBiz.py b/module/plugins/hoster/RPNetBiz.py
deleted file mode 100644
index 47f255074..000000000
--- a/module/plugins/hoster/RPNetBiz.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-from module.common.json_layer import json_loads
-
-
-class RPNetBiz(Hoster):
- __name__ = "RPNetBiz"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __description__ = """RPNet.biz hoster plugin"""
-
- __pattern__ = r'https?://.*rpnet\.biz'
- __author_name__ = "Dman"
- __author_mail__ = "dmanugm@gmail.com"
-
-
- def setup(self):
- self.chunkLimit = -1
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- link_status = {'generated': pyfile.url}
- elif not self.account:
- # Check account
- self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet")
- self.fail("No rpnet account provided")
- else:
- (user, data) = self.account.selectAccount()
-
- self.logDebug("Original URL: %s" % pyfile.url)
- # Get the download link
- response = self.load("https://premium.rpnet.biz/client_api.php",
- get={"username": user, "password": data['password'],
- "action": "generate", "links": pyfile.url})
-
- self.logDebug("JSON data: %s" % response)
- link_status = json_loads(response)['links'][0] # get the first link... since we only queried one
-
- # Check if we only have an id as a HDD link
- if 'id' in link_status:
- self.logDebug("Need to wait at least 30 seconds before requery")
- self.setWait(30) # wait for 30 seconds
- self.wait()
- # Lets query the server again asking for the status on the link,
- # we need to keep doing this until we reach 100
- max_tries = 30
- my_try = 0
- while (my_try <= max_tries):
- self.logDebug("Try: %d ; Max Tries: %d" % (my_try, max_tries))
- response = self.load("https://premium.rpnet.biz/client_api.php",
- get={"username": user, "password": data['password'],
- "action": "downloadInformation", "id": link_status['id']})
- self.logDebug("JSON data hdd query: %s" % response)
- download_status = json_loads(response)['download']
-
- if download_status['status'] == '100':
- link_status['generated'] = download_status['rpnet_link']
- self.logDebug("Successfully downloaded to rpnet HDD: %s" % link_status['generated'])
- break
- else:
- self.logDebug("At %s%% for the file download" % download_status['status'])
-
- self.setWait(30)
- self.wait()
- my_try += 1
-
- if my_try > max_tries: # We went over the limit!
- self.fail("Waited for about 15 minutes for download to finish but failed")
-
- if 'generated' in link_status:
- self.download(link_status['generated'], disposition=True)
- elif 'error' in link_status:
- self.fail(link_status['error'])
- else:
- self.fail("Something went wrong, not supposed to enter here")
diff --git a/module/plugins/hoster/RapidgatorNet.py b/module/plugins/hoster/RapidgatorNet.py
deleted file mode 100644
index ce4d9ab36..000000000
--- a/module/plugins/hoster/RapidgatorNet.py
+++ /dev/null
@@ -1,191 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import HTTPHEADER
-
-from module.common.json_layer import json_loads
-from module.network.HTTPRequest import BadHeader
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.CaptchaService import AdsCaptcha, ReCaptcha, SolveMedia
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class RapidgatorNet(SimpleHoster):
- __name__ = "RapidgatorNet"
- __type__ = "hoster"
- __version__ = "0.22"
-
- __pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+'
-
- __description__ = """Rapidgator.net hoster plugin"""
- __author_name__ = ("zoidberg", "chrox", "stickell", "Walter Purcaro")
- __author_mail__ = ("zoidberg@mujmail.cz", "", "l.stickell@yahoo.it", "vuolter@gmail.com")
-
- API_URL = "http://rapidgator.net/api/file"
-
- FILE_NAME_PATTERN = r'<title>Download file (?P<N>.*)</title>'
- FILE_SIZE_PATTERN = r'File size:\s*<strong>(?P<S>[\d\.]+) (?P<U>\w+)</strong>'
- OFFLINE_PATTERN = r'>(File not found|Error 404)'
-
- JSVARS_PATTERN = r"\s+var\s*(startTimerUrl|getDownloadUrl|captchaUrl|fid|secs)\s*=\s*'?(.*?)'?;"
- PREMIUM_ONLY_ERROR_PATTERN = r'You can download files up to|This file can be downloaded by premium only<'
- DOWNLOAD_LIMIT_ERROR_PATTERN = r'You have reached your (daily|hourly) downloads limit'
- WAIT_PATTERN = r'(?:Delay between downloads must be not less than|Try again in)\s*(\d+)\s*(hour|min)'
- LINK_PATTERN = r"return '(http://\w+.rapidgator.net/.*)';"
-
- RECAPTCHA_KEY_PATTERN = r'"http://api\.recaptcha\.net/challenge\?k=(.*?)"'
- ADSCAPTCHA_SRC_PATTERN = r'(http://api\.adscaptcha\.com/Get\.aspx[^"\']*)'
- SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.script\?k=(.*?)"'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
- self.sid = None
- self.chunkLimit = 1
- self.req.setOption("timeout", 120)
-
- def process(self, pyfile):
- if self.account:
- self.sid = self.account.getAccountData(self.user).get('SID', None)
-
- if self.sid:
- self.handlePremium()
- else:
- self.handleFree()
-
- def api_response(self, cmd):
- try:
- json = self.load('%s/%s' % (self.API_URL, cmd),
- get={'sid': self.sid,
- 'url': self.pyfile.url}, decode=True)
- self.logDebug('API:%s' % cmd, json, "SID: %s" % self.sid)
- json = json_loads(json)
- status = json['response_status']
- msg = json['response_details']
- except BadHeader, e:
- self.logError('API:%s' % cmd, e, "SID: %s" % self.sid)
- status = e.code
- msg = e
-
- if status == 200:
- return json['response']
- elif status == 423:
- self.account.empty(self.user)
- self.retry()
- else:
- self.account.relogin(self.user)
- self.retry(wait_time=60)
-
- def handlePremium(self):
- #self.logDebug("ACCOUNT_DATA", self.account.getAccountData(self.user))
- self.api_data = self.api_response('info')
- self.api_data['md5'] = self.api_data['hash']
- self.pyfile.name = self.api_data['filename']
- self.pyfile.size = self.api_data['size']
- url = self.api_response('download')['url']
- self.download(url)
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- self.checkFree()
-
- jsvars = dict(re.findall(self.JSVARS_PATTERN, self.html))
- self.logDebug(jsvars)
-
- self.req.http.lastURL = self.pyfile.url
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
-
- url = "http://rapidgator.net%s?fid=%s" % (
- jsvars.get('startTimerUrl', '/download/AjaxStartTimer'), jsvars['fid'])
- jsvars.update(self.getJsonResponse(url))
-
- self.wait(int(jsvars.get('secs', 45)) + 1, False)
-
- url = "http://rapidgator.net%s?sid=%s" % (
- jsvars.get('getDownloadUrl', '/download/AjaxGetDownload'), jsvars['sid'])
- jsvars.update(self.getJsonResponse(url))
-
- self.req.http.lastURL = self.pyfile.url
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"])
-
- url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha')
- self.html = self.load(url)
-
- for _ in xrange(5):
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- link = m.group(1)
- self.logDebug(link)
- self.download(link, disposition=True)
- break
- else:
- captcha, captcha_key = self.getCaptcha()
- captcha_challenge, captcha_response = captcha.challenge(captcha_key)
-
- self.html = self.load(url, post={
- "DownloadCaptchaForm[captcha]": "",
- "adcopy_challenge": captcha_challenge,
- "adcopy_response": captcha_response
- })
-
- if "The verification code is incorrect" in self.html:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- else:
- self.parseError("Download link")
-
- def getCaptcha(self):
- m = re.search(self.ADSCAPTCHA_SRC_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- captcha = AdsCaptcha(self)
- else:
- m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- captcha = ReCaptcha(self)
- else:
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- captcha = SolveMedia(self)
- else:
- self.parseError("Captcha")
-
- return captcha, captcha_key
-
- def checkFree(self):
- m = re.search(self.PREMIUM_ONLY_ERROR_PATTERN, self.html)
- if m:
- self.fail("Premium account needed for download")
- else:
- m = re.search(self.WAIT_PATTERN, self.html)
-
- if m:
- wait_time = int(m.group(1)) * {"hour": 60, "min": 1}[m.group(2)]
- else:
- m = re.search(self.DOWNLOAD_LIMIT_ERROR_PATTERN, self.html)
- if m is None:
- return
- elif m.group(1) == "daily":
- self.logWarning("You have reached your daily downloads limit for today")
- wait_time = secondsToMidnight(gmt=2)
- else:
- wait_time = 1 * 60 * 60
-
- self.logDebug("Waiting %d minutes" % wait_time / 60)
- self.wait(wait_time, True)
- self.retry()
-
- def getJsonResponse(self, url):
- response = self.load(url, decode=True)
- if not response.startswith('{'):
- self.retry()
- self.logDebug(url, response)
- return json_loads(response)
-
-
-getInfo = create_getInfo(RapidgatorNet)
diff --git a/module/plugins/hoster/RapidshareCom.py b/module/plugins/hoster/RapidshareCom.py
deleted file mode 100644
index 19d6cf772..000000000
--- a/module/plugins/hoster/RapidshareCom.py
+++ /dev/null
@@ -1,223 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-
-
-def getInfo(urls):
- ids = ""
- names = ""
-
- p = re.compile(RapidshareCom.__pattern__)
-
- for url in urls:
- r = p.search(url)
- if r.group("name"):
- ids += "," + r.group("id")
- names += "," + r.group("name")
- elif r.group("name_new"):
- ids += "," + r.group("id_new")
- names += "," + r.group("name_new")
-
- url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&files=%s&filenames=%s" % (ids[1:], names[1:])
-
- api = getURL(url)
- result = []
- i = 0
- for res in api.split():
- tmp = res.split(",")
- if tmp[4] in ("0", "4", "5"):
- status = 1
- elif tmp[4] == "1":
- status = 2
- else:
- status = 3
-
- result.append((tmp[1], tmp[2], status, urls[i]))
- i += 1
-
- yield result
-
-
-class RapidshareCom(Hoster):
- __name__ = "RapidshareCom"
- __type__ = "hoster"
- __version__ = "1.39"
-
- __pattern__ = r'https?://(?:www\.)?rapidshare.com/(?:files/(?P<id>\d*?)/(?P<name>[^?]+)|#!download\|(?:\w+)\|(?P<id_new>\d+)\|(?P<name_new>[^|]+))'
- __config__ = [("server",
- "Cogent;Deutsche Telekom;Level(3);Level(3) #2;GlobalCrossing;Level(3) #3;Teleglobe;GlobalCrossing #2;TeliaSonera #2;Teleglobe #2;TeliaSonera #3;TeliaSonera",
- "Preferred Server", "None")]
-
- __description__ = """Rapidshare.com hoster plugin"""
- __author_name__ = ("spoob", "RaNaN", "mkaay")
- __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "mkaay@mkaay.de")
-
-
- def setup(self):
- self.no_download = True
- self.api_data = None
- self.offset = 0
- self.dl_dict = {}
-
- self.id = None
- self.name = None
-
- self.chunkLimit = -1 if self.premium else 1
- self.multiDL = self.resumeDownload = self.premium
-
- def process(self, pyfile):
- self.url = pyfile.url
- self.prepare()
-
- def prepare(self):
- m = re.match(self.__pattern__, self.url)
-
- if m.group("name"):
- self.id = m.group("id")
- self.name = m.group("name")
- else:
- self.id = m.group("id_new")
- self.name = m.group("name_new")
-
- self.download_api_data()
- if self.api_data['status'] == "1":
- self.pyfile.name = self.get_file_name()
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- elif self.api_data['status'] == "2":
- self.logInfo(_("Rapidshare: Traffic Share (direct download)"))
- self.pyfile.name = self.get_file_name()
-
- self.download(self.pyfile.url, get={"directstart": 1})
-
- elif self.api_data['status'] in ("0", "4", "5"):
- self.offline()
- elif self.api_data['status'] == "3":
- self.tempOffline()
- else:
- self.fail("Unknown response code.")
-
- def handleFree(self):
- while self.no_download:
- self.dl_dict = self.freeWait()
-
- #tmp = "#!download|%(server)s|%(id)s|%(name)s|%(size)s"
- download = "http://%(host)s/cgi-bin/rsapi.cgi?sub=download&editparentlocation=0&bin=1&fileid=%(id)s&filename=%(name)s&dlauth=%(auth)s" % self.dl_dict
-
- self.logDebug("RS API Request: %s" % download)
- self.download(download, ref=False)
-
- check = self.checkDownload({"ip": "You need RapidPro to download more files from your IP address",
- "auth": "Download auth invalid"})
- if check == "ip":
- self.setWait(60)
- self.logInfo(_("Already downloading from this ip address, waiting 60 seconds"))
- self.wait()
- self.handleFree()
- elif check == "auth":
- self.logInfo(_("Invalid Auth Code, download will be restarted"))
- self.offset += 5
- self.handleFree()
-
- def handlePremium(self):
- info = self.account.getAccountInfo(self.user, True)
- self.logDebug("%s: Use Premium Account" % self.__name__)
- url = self.api_data['mirror']
- self.download(url, get={"directstart": 1})
-
- def download_api_data(self, force=False):
- """
- http://images.rapidshare.com/apidoc.txt
- """
- if self.api_data and not force:
- return
- api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
- api_param_file = {"sub": "checkfiles", "incmd5": "1", "files": self.id, "filenames": self.name}
- src = self.load(api_url_base, cookies=False, get=api_param_file).strip()
- self.logDebug("RS INFO API: %s" % src)
- if src.startswith("ERROR"):
- return
- fields = src.split(",")
-
- # status codes:
- # 0=File not found
- # 1=File OK (Anonymous downloading)
- # 3=Server down
- # 4=File marked as illegal
- # 5=Anonymous file locked, because it has more than 10 downloads already
- # 50+n=File OK (TrafficShare direct download type "n" without any logging.)
- # 100+n=File OK (TrafficShare direct download type "n" with logging.
- # Read our privacy policy to see what is logged.)
-
- self.api_data = {"fileid": fields[0], "filename": fields[1], "size": int(fields[2]), "serverid": fields[3],
- "status": fields[4], "shorthost": fields[5], "checksum": fields[6].strip().lower()}
-
- if int(self.api_data['status']) > 100:
- self.api_data['status'] = str(int(self.api_data['status']) - 100)
- elif int(self.api_data['status']) > 50:
- self.api_data['status'] = str(int(self.api_data['status']) - 50)
-
- self.api_data['mirror'] = "http://rs%(serverid)s%(shorthost)s.rapidshare.com/files/%(fileid)s/%(filename)s" % self.api_data
-
- def freeWait(self):
- """downloads html with the important information
- """
- self.no_download = True
-
- id = self.id
- name = self.name
-
- prepare = "https://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=%(id)s&filename=%(name)s&try=1&cbf=RSAPIDispatcher&cbid=1" % {
- "name": name, "id": id}
-
- self.logDebug("RS API Request: %s" % prepare)
- result = self.load(prepare, ref=False)
- self.logDebug("RS API Result: %s" % result)
-
- between_wait = re.search("You need to wait (\d+) seconds", result)
-
- if "You need RapidPro to download more files from your IP address" in result:
- self.setWait(60)
- self.logInfo(_("Already downloading from this ip address, waiting 60 seconds"))
- self.wait()
- elif ("Too many users downloading from this server right now" in result or
- "All free download slots are full" in result):
- self.setWait(120)
- self.logInfo(_("RapidShareCom: No free slots"))
- self.wait()
- elif "This file is too big to download it for free" in result:
- self.fail(_("You need a premium account for this file"))
- elif "Filename invalid." in result:
- self.fail(_("Filename reported invalid"))
- elif between_wait:
- self.setWait(int(between_wait.group(1)))
- self.wantReconnect = True
- self.wait()
- else:
- self.no_download = False
-
- tmp, info = result.split(":")
- data = info.split(",")
-
- dl_dict = {"id": id,
- "name": name,
- "host": data[0],
- "auth": data[1],
- "server": self.api_data['serverid'],
- "size": self.api_data['size']}
- self.setWait(int(data[2]) + 2 + self.offset)
- self.wait()
-
- return dl_dict
-
- def get_file_name(self):
- if self.api_data['filename']:
- return self.api_data['filename']
- return self.url.split("/")[-1]
diff --git a/module/plugins/hoster/RarefileNet.py b/module/plugins/hoster/RarefileNet.py
deleted file mode 100644
index 51df5c882..000000000
--- a/module/plugins/hoster/RarefileNet.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-from module.utils import html_unescape
-
-
-class RarefileNet(XFileSharingPro):
- __name__ = "RarefileNet"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?rarefile.net/\w{12}'
-
- __description__ = """Rarefile.net hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "rarefile.net"
-
- FILE_NAME_PATTERN = r'<td><font color="red">(?P<N>.*?)</font></td>'
- FILE_SIZE_PATTERN = r'<td>Size : (?P<S>.+?)&nbsp;'
- LINK_PATTERN = r'<a href="(?P<link>[^"]+)">(?P=link)</a>'
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
-
- def handleCaptcha(self, inputs):
- captcha_div = re.search(r'<b>Enter code.*?<div.*?>(.*?)</div>', self.html, re.S).group(1)
- self.logDebug(captcha_div)
- numerals = re.findall('<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div))
- inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
- self.logDebug("CAPTCHA", inputs['code'], numerals)
- return 3
-
-
-getInfo = create_getInfo(RarefileNet)
diff --git a/module/plugins/hoster/RealdebridCom.py b/module/plugins/hoster/RealdebridCom.py
deleted file mode 100644
index de7540628..000000000
--- a/module/plugins/hoster/RealdebridCom.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from random import randrange
-from urllib import quote, unquote
-from time import time
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-from module.utils import parseFileSize
-
-
-class RealdebridCom(Hoster):
- __name__ = "RealdebridCom"
- __type__ = "hoster"
- __version__ = "0.53"
-
- __pattern__ = r'https?://(?:[^/]*\.)?real-debrid\..*'
-
- __description__ = """Real-Debrid.com hoster plugin"""
- __author_name__ = "Devirex Hazzard"
- __author_mail__ = "naibaf_11@yahoo.de"
-
-
- def getFilename(self, url):
- try:
- name = unquote(url.rsplit("/", 1)[1])
- except IndexError:
- name = "Unknown_Filename..."
- if not name or name.endswith(".."): # incomplete filename, append random stuff
- name += "%s.tmp" % randrange(100, 999)
- return name
-
- def setup(self):
- self.chunkLimit = 3
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid")
- self.fail("No Real-debrid account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- password = self.getPassword().splitlines()
- if not password:
- password = ""
- else:
- password = password[0]
-
- url = "https://real-debrid.com/ajax/unrestrict.php?lang=en&link=%s&password=%s&time=%s" % (
- quote(pyfile.url, ""), password, int(time() * 1000))
- page = self.load(url)
- data = json_loads(page)
-
- self.logDebug("Returned Data: %s" % data)
-
- if data['error'] != 0:
- if data['message'] == "Your file is unavailable on the hoster.":
- self.offline()
- else:
- self.logWarning(data['message'])
- self.tempOffline()
- else:
- if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['file_name']:
- pyfile.name = data['file_name']
- pyfile.size = parseFileSize(data['file_size'])
- new_url = data['generated_links'][0][-1]
-
- if self.getConfig("https"):
- new_url = new_url.replace("http://", "https://")
- else:
- new_url = new_url.replace("https://", "http://")
-
- if new_url != pyfile.url:
- self.logDebug("New URL: %s" % new_url)
-
- if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'):
- #only use when name wasnt already set
- pyfile.name = self.getFilename(new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload(
- {"error": "<title>An error occured while processing your request</title>"})
-
- if check == "error":
- #usual this download can safely be retried
- self.retry(wait_time=60, reason="An error occured while generating link.")
diff --git a/module/plugins/hoster/RedtubeCom.py b/module/plugins/hoster/RedtubeCom.py
deleted file mode 100644
index bdb948d6d..000000000
--- a/module/plugins/hoster/RedtubeCom.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-from module.unescape import unescape
-
-
-class RedtubeCom(Hoster):
- __name__ = "RedtubeCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?redtube\.com/\d+'
-
- __description__ = """Redtube.com hoster plugin"""
- __author_name__ = "jeix"
- __author_mail__ = "jeix@hasnomail.de"
-
-
- def process(self, pyfile):
- self.download_html()
- if not self.file_exists():
- self.offline()
-
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1))
-
- return file_url
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- return re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv"
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
-
- if re.search(r'This video has been removed.', self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/RehostTo.py b/module/plugins/hoster/RehostTo.py
deleted file mode 100644
index 98fb10d94..000000000
--- a/module/plugins/hoster/RehostTo.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from urllib import quote, unquote
-
-from module.plugins.Hoster import Hoster
-
-
-class RehostTo(Hoster):
- __name__ = "RehostTo"
- __type__ = "hoster"
- __version__ = "0.13"
-
- __pattern__ = r'https?://.*rehost.to\..*'
-
- __description__ = """Rehost.com hoster plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def getFilename(self, url):
- return unquote(url.rsplit("/", 1)[1])
-
- def setup(self):
- self.chunkLimit = 1
- self.resumeDownload = True
-
- def process(self, pyfile):
- if not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "rehost.to")
- self.fail("No rehost.to account provided")
-
- data = self.account.getAccountInfo(self.user)
- long_ses = data['long_ses']
-
- self.logDebug("Rehost.to: Old URL: %s" % pyfile.url)
- new_url = "http://rehost.to/process_download.php?user=cookie&pass=%s&dl=%s" % (long_ses, quote(pyfile.url, ""))
-
- #raise timeout to 2min
- self.req.setOption("timeout", 120)
-
- self.download(new_url, disposition=True)
diff --git a/module/plugins/hoster/RemixshareCom.py b/module/plugins/hoster/RemixshareCom.py
deleted file mode 100644
index ea396495e..000000000
--- a/module/plugins/hoster/RemixshareCom.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://remixshare.com/download/p946u
-#
-# Note:
-# The remixshare.com website is very very slow, so
-# if your download not starts because of pycurl timeouts:
-# Adjust timeouts in /usr/share/pyload/module/network/HTTPRequest.py
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class RemixshareCom(SimpleHoster):
- __name__ = "RemixshareCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://remixshare\.com/(download|dl)/\w+'
-
- __description__ = """Remixshare.com hoster plugin"""
- __author_name__ = ("zapp-brannigan", "Walter Purcaro")
- __author_mail__ = ("fuerst.reinje@web.de", "vuolter@gmail.com")
-
- FILE_INFO_PATTERN = r'title=\'.+?\'>(?P<N>.+?)</span><span class=\'light2\'>&nbsp;\((?P<S>\d+)&nbsp;(?P<U>\w+)\)<'
- OFFLINE_PATTERN = r'<h1>Ooops!<'
-
- LINK_PATTERN = r'(http://remixshare\.com/downloadfinal/.+?)"'
- TOKEN_PATTERN = r'var acc = (\d+)'
- WAIT_PATTERN = r'var XYZ = r"(\d+)"'
-
-
- def setup(self):
- self.multiDL = True
- self.chunkLimit = 1
-
- def handleFree(self):
- b = re.search(self.LINK_PATTERN, self.html)
- if not b:
- self.parseError("Cannot parse download url")
- c = re.search(self.TOKEN_PATTERN, self.html)
- if not c:
- self.parseError("Cannot parse file token")
- dl_url = b.group(1) + c.group(1)
-
- #Check if we have to wait
- seconds = re.search(self.WAIT_PATTERN, self.html)
- if seconds:
- self.logDebug("Wait " + seconds.group(1))
- self.wait(seconds.group(1))
-
- # Finally start downloading...
- self.logDebug("Download URL = r" + dl_url)
- self.download(dl_url, disposition=True)
-
-
-getInfo = create_getInfo(RemixshareCom)
diff --git a/module/plugins/hoster/RgHostNet.py b/module/plugins/hoster/RgHostNet.py
deleted file mode 100644
index dccc6e557..000000000
--- a/module/plugins/hoster/RgHostNet.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class RgHostNet(SimpleHoster):
- __name__ = "RgHostNet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?rghost\.net/\d+(?:r=\d+)?'
-
- __description__ = """RgHost.net hoster plugin"""
- __author_name__ = "z00nx"
- __author_mail__ = "z00nx0@gmail.com"
-
- FILE_INFO_PATTERN = r'<h1>\s+(<a[^>]+>)?(?P<N>[^<]+)(</a>)?\s+<small[^>]+>\s+\((?P<S>[^)]+)\)\s+</small>\s+</h1>'
- OFFLINE_PATTERN = r'File is deleted|this page is not found'
- LINK_PATTERN = r'''<a\s+href="([^"]+)"\s+class="btn\s+large\s+download"[^>]+>Download</a>'''
-
-
- def handleFree(self):
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError("Unable to detect the direct link")
- download_link = m.group(1)
- self.download(download_link, disposition=True)
-
-
-getInfo = create_getInfo(RgHostNet)
diff --git a/module/plugins/hoster/RyushareCom.py b/module/plugins/hoster/RyushareCom.py
deleted file mode 100644
index a24090cde..000000000
--- a/module/plugins/hoster/RyushareCom.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://ryushare.com/cl0jy8ric2js/random.bin
-
-import re
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-from module.plugins.internal.CaptchaService import SolveMedia
-
-
-class RyushareCom(XFileSharingPro):
- __name__ = "RyushareCom"
- __type__ = "hoster"
- __version__ = "0.16"
-
- __pattern__ = r'http://(?:www\.)?ryushare\.com/\w+'
-
- __description__ = """Ryushare.com hoster plugin"""
- __author_name__ = ("zoidberg", "stickell", "quareevo")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "quareevo@arcor.de")
-
- HOSTER_NAME = "ryushare.com"
-
- FILE_SIZE_PATTERN = r'You have requested <font color="red">[^<]+</font> \((?P<S>[\d\.]+) (?P<U>\w+)'
-
- WAIT_PATTERN = r'You have to wait ((?P<hour>\d+) hour[s]?, )?((?P<min>\d+) minute[s], )?(?P<sec>\d+) second[s]'
- LINK_PATTERN = r'<a href="([^"]+)">Click here to download<'
- SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"'
-
-
- def getDownloadLink(self):
- retry = False
- self.html = self.load(self.pyfile.url)
- action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
- if "method_premium" in inputs:
- del inputs['method_premium']
-
- self.html = self.load(self.pyfile.url, post=inputs)
- action, inputs = self.parseHtmlForm('F1')
-
- self.setWait(65)
- # Wait 1 hour
- if "You have reached the download-limit" in self.html:
- self.setWait(1 * 60 * 60, True)
- retry = True
-
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- wait = m.groupdict(0)
- waittime = int(wait['hour']) * 60 * 60 + int(wait['min']) * 60 + int(wait['sec'])
- self.setWait(waittime, True)
- retry = True
-
- self.wait()
- if retry:
- self.retry()
-
- for _ in xrange(5):
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m is None:
- self.parseError("Error parsing captcha")
-
- captchaKey = m.group(1)
- captcha = SolveMedia(self)
- challenge, response = captcha.challenge(captchaKey)
-
- inputs['adcopy_challenge'] = challenge
- inputs['adcopy_response'] = response
-
- self.html = self.load(self.pyfile.url, post=inputs)
- if "WRONG CAPTCHA" in self.html:
- self.invalidCaptcha()
- self.logInfo("Invalid Captcha")
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("You have entered 5 invalid captcha codes")
-
- if "Click here to download" in self.html:
- return re.search(r'<a href="([^"]+)">Click here to download</a>', self.html).group(1)
-
-
-getInfo = create_getInfo(RyushareCom)
diff --git a/module/plugins/hoster/SecureUploadEu.py b/module/plugins/hoster/SecureUploadEu.py
deleted file mode 100644
index 3691be7da..000000000
--- a/module/plugins/hoster/SecureUploadEu.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class SecureUploadEu(XFileSharingPro):
- __name__ = "SecureUploadEu"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?secureupload\.eu/(\w){12}(/\w+)'
-
- __description__ = """SecureUpload.eu hoster plugin"""
- __author_name__ = "z00nx"
- __author_mail__ = "z00nx0@gmail.com"
-
- HOSTER_NAME = "secureupload.eu"
-
- FILE_INFO_PATTERN = r'<h3>Downloading (?P<N>[^<]+) \((?P<S>[^<]+)\)</h3>'
- OFFLINE_PATTERN = r'The file was removed|File Not Found'
-
-
-getInfo = create_getInfo(SecureUploadEu)
diff --git a/module/plugins/hoster/SendmywayCom.py b/module/plugins/hoster/SendmywayCom.py
deleted file mode 100644
index f5e9e9ca6..000000000
--- a/module/plugins/hoster/SendmywayCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class SendmywayCom(XFileSharingPro):
- __name__ = "SendmywayCom"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?sendmyway.com/\w{12}'
-
- __description__ = """SendMyWay hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "sendmyway.com"
-
- FILE_NAME_PATTERN = r'<p class="file-name" ><.*?>\s*(?P<N>.+)'
- FILE_SIZE_PATTERN = r'<small>\((?P<S>\d+) bytes\)</small>'
-
-
-getInfo = create_getInfo(SendmywayCom)
diff --git a/module/plugins/hoster/SendspaceCom.py b/module/plugins/hoster/SendspaceCom.py
deleted file mode 100644
index 1dac231eb..000000000
--- a/module/plugins/hoster/SendspaceCom.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class SendspaceCom(SimpleHoster):
- __name__ = "SendspaceCom"
- __type__ = "hoster"
- __version__ = "0.13"
-
- __pattern__ = r'http://(?:www\.)?sendspace.com/file/.*'
-
- __description__ = """Sendspace.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<h2 class="bgray">\s*<(?:b|strong)>(?P<N>[^<]+)</'
- FILE_SIZE_PATTERN = r'<div class="file_description reverse margin_center">\s*<b>File Size:</b>\s*(?P<S>[0-9.]+)(?P<U>[kKMG])i?B\s*</div>'
- OFFLINE_PATTERN = r'<div class="msg error" style="cursor: default">Sorry, the file you requested is not available.</div>'
-
- LINK_PATTERN = r'<a id="download_button" href="([^"]+)"'
- CAPTCHA_PATTERN = r'<td><img src="(/captchas/captcha.php?captcha=([^"]+))"></td>'
- USER_CAPTCHA_PATTERN = r'<td><img src="/captchas/captcha.php?user=([^"]+))"></td>'
-
-
- def handleFree(self):
- params = {}
- for _ in xrange(3):
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- if 'captcha_hash' in params:
- self.correctCaptcha()
- download_url = m.group(1)
- break
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- if 'captcha_hash' in params:
- self.invalidCaptcha()
- captcha_url1 = "http://www.sendspace.com/" + m.group(1)
- m = re.search(self.USER_CAPTCHA_PATTERN, self.html)
- captcha_url2 = "http://www.sendspace.com/" + m.group(1)
- params = {'captcha_hash': m.group(2),
- 'captcha_submit': 'Verify',
- 'captcha_answer': self.decryptCaptcha(captcha_url1) + " " + self.decryptCaptcha(captcha_url2)}
- else:
- params = {'download': "Regular Download"}
-
- self.logDebug(params)
- self.html = self.load(self.pyfile.url, post=params)
- else:
- self.fail("Download link not found")
-
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
-
-
-create_getInfo(SendspaceCom)
diff --git a/module/plugins/hoster/Share4webCom.py b/module/plugins/hoster/Share4webCom.py
deleted file mode 100644
index e5221baa9..000000000
--- a/module/plugins/hoster/Share4webCom.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.UnibytesCom import UnibytesCom
-from module.plugins.internal.SimpleHoster import create_getInfo
-
-
-class Share4webCom(UnibytesCom):
- __name__ = "Share4webCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?share4web\.com/get/\w+'
-
- __description__ = """Share4web.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- HOSTER_NAME = "share4web.com"
-
-
-getInfo = create_getInfo(UnibytesCom)
diff --git a/module/plugins/hoster/Share76Com.py b/module/plugins/hoster/Share76Com.py
deleted file mode 100644
index 2c5dd877d..000000000
--- a/module/plugins/hoster/Share76Com.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class Share76Com(DeadHoster):
- __name__ = "Share76Com"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?share76.com/\w{12}'
-
- __description__ = """Share76.com hoster plugin"""
- __author_name__ = "me"
- __author_mail__ = None
-
-
-getInfo = create_getInfo(Share76Com)
diff --git a/module/plugins/hoster/ShareFilesCo.py b/module/plugins/hoster/ShareFilesCo.py
deleted file mode 100644
index 54ae7777a..000000000
--- a/module/plugins/hoster/ShareFilesCo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class ShareFilesCo(DeadHoster):
- __name__ = "ShareFilesCo"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?sharefiles\.co/\w{12}'
-
- __description__ = """Sharefiles.co hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
-getInfo = create_getInfo(ShareFilesCo)
diff --git a/module/plugins/hoster/ShareRapidCom.py b/module/plugins/hoster/ShareRapidCom.py
deleted file mode 100644
index 414e92feb..000000000
--- a/module/plugins/hoster/ShareRapidCom.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import HTTPHEADER
-
-from module.network.RequestFactory import getRequest
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
-
-
-def getInfo(urls):
- h = getRequest()
- h.c.setopt(HTTPHEADER,
- ["Accept: text/html",
- "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"])
- for url in urls:
- html = h.load(url, decode=True)
- file_info = parseFileInfo(ShareRapidCom, url, html)
- yield file_info
-
-
-class ShareRapidCom(SimpleHoster):
- __name__ = "ShareRapidCom"
- __type__ = "hoster"
- __version__ = "0.54"
-
- __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+'
-
- __description__ = """MegaRapid.cz hoster plugin"""
- __author_name__ = ("MikyWoW", "zoidberg", "stickell", "Walter Purcaro")
- __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com")
-
- FILE_NAME_PATTERN = r'<h1[^>]*><span[^>]*>(?:<a[^>]*>)?(?P<N>[^<]+)'
- FILE_SIZE_PATTERN = r'<td class="i">Velikost:</td>\s*<td class="h"><strong>\s*(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong></td>'
- OFFLINE_PATTERN = ur'Nastala chyba 404|Soubor byl smazán'
-
- SH_CHECK_TRAFFIC = True
-
- LINK_PATTERN = r'<a href="([^"]+)" title="Stahnout">([^<]+)</a>'
- ERR_LOGIN_PATTERN = ur'<div class="error_div"><strong>Stahování je přístupné pouze přihlášenÜm uÅŸivatelům'
- ERR_CREDIT_PATTERN = ur'<div class="error_div"><strong>Stahování zdarma je moÅŸné jen přes náš'
-
-
- def setup(self):
- self.chunkLimit = 1
-
- def handlePremium(self):
- try:
- self.html = self.load(self.pyfile.url, decode=True)
- except BadHeader, e:
- self.account.relogin(self.user)
- self.retry(max_tries=3, reason=str(e))
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- link = m.group(1)
- self.logDebug("Premium link: %s" % link)
- self.download(link, disposition=True)
- else:
- if re.search(self.ERR_LOGIN_PATTERN, self.html):
- self.relogin(self.user)
- self.retry(max_tries=3, reason="User login failed")
- elif re.search(self.ERR_CREDIT_PATTERN, self.html):
- self.fail("Not enough credit left")
- else:
- self.fail("Download link not found")
diff --git a/module/plugins/hoster/SharebeesCom.py b/module/plugins/hoster/SharebeesCom.py
deleted file mode 100644
index d5b4a3bbc..000000000
--- a/module/plugins/hoster/SharebeesCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class SharebeesCom(DeadHoster):
- __name__ = "SharebeesCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'http://(?:www\.)?sharebees.com/\w{12}'
-
- __description__ = """ShareBees hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(SharebeesCom)
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py
deleted file mode 100644
index feaa95603..000000000
--- a/module/plugins/hoster/ShareonlineBiz.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import time
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.plugins.Plugin import chunks
-from module.plugins.internal.CaptchaService import ReCaptcha
-
-
-def getInfo(urls):
- api_url_base = "http://api.share-online.biz/linkcheck.php"
-
- urls = [url.replace("https://", "http://") for url in urls]
-
- for chunk in chunks(urls, 90):
- api_param_file = {"links": "\n".join(x.replace("http://www.share-online.biz/dl/", "").rstrip("/") for x in
- chunk)} # api only supports old style links
- src = getURL(api_url_base, post=api_param_file, decode=True)
- result = []
- for i, res in enumerate(src.split("\n")):
- if not res:
- continue
- fields = res.split(";")
-
- if fields[1] == "OK":
- status = 2
- elif fields[1] in ("DELETED", "NOT FOUND"):
- status = 1
- else:
- status = 3
-
- result.append((fields[2], int(fields[3]), status, chunk[i]))
- yield result
-
-
-class ShareonlineBiz(Hoster):
- __name__ = "ShareonlineBiz"
- __type__ = "hoster"
- __version__ = "0.40"
-
- __pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download.php\?id=|dl/)(?P<ID>\w+)'
-
- __description__ = """Shareonline.biz hoster plugin"""
- __author_name__ = ("spoob", "mkaay", "zoidberg", "Walter Purcaro")
- __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", "vuolter@gmail.com")
-
- ERROR_INFO_PATTERN = r'<p class="b">Information:</p>\s*<div>\s*<strong>(.*?)</strong>'
-
-
- def setup(self):
- # range request not working?
- # api supports resume, only one chunk
- # website isn't supporting resuming in first place
- self.file_id = re.match(self.__pattern__, self.pyfile.url).group("ID")
- self.pyfile.url = "http://www.share-online.biz/dl/" + self.file_id
-
- self.resumeDownload = self.premium
- self.multiDL = False
- #self.chunkLimit = 1
-
- self.check_data = None
-
- def process(self, pyfile):
- if self.premium:
- self.handlePremium()
- #web-download fallback removed - didn't work anyway
- else:
- self.handleFree()
-
- # check = self.checkDownload({"failure": re.compile(self.ERROR_INFO_PATTERN)})
- # if check == "failure":
- # try:
- # self.retry(reason=self.lastCheck.group(1).decode("utf8"))
- # except:
- # self.retry(reason="Unknown error")
-
- if self.api_data:
- self.check_data = {"size": int(self.api_data['size']), "md5": self.api_data['md5']}
-
- def loadAPIData(self):
- api_url_base = "http://api.share-online.biz/linkcheck.php?md5=1"
- api_param_file = {"links": self.file_id} # api only supports old style links
- src = self.load(api_url_base, cookies=False, post=api_param_file, decode=True)
-
- fields = src.split(";")
- self.api_data = {"fileid": fields[0],
- "status": fields[1]}
- if not self.api_data['status'] == "OK":
- self.offline()
- else:
- self.api_data['filename'] = fields[2]
- self.api_data['size'] = fields[3] # in bytes
- self.api_data['md5'] = fields[4].strip().lower().replace("\n\n", "") # md5
-
- def handleFree(self):
- self.loadAPIData()
- self.pyfile.name = self.api_data['filename']
- self.pyfile.size = int(self.api_data['size'])
-
- self.html = self.load(self.pyfile.url, cookies=True) # refer, stuff
- self.setWait(3)
- self.wait()
-
- self.html = self.load("%s/free/" % self.pyfile.url, post={"dl_free": "1", "choice": "free"}, decode=True)
- self.checkErrors()
-
- m = re.search(r'var wait=(\d+);', self.html)
-
- recaptcha = ReCaptcha(self)
- for _ in xrange(5):
- challenge, response = recaptcha.challenge("6LdatrsSAAAAAHZrB70txiV5p-8Iv8BtVxlTtjKX")
- self.setWait(int(m.group(1)) if m else 30)
- response = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time() * 1000)), post={
- 'dl_free': '1',
- 'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': response})
-
- if not response == '0':
- self.correctCaptcha()
- break
- else:
- self.invalidCaptcha()
- else:
- self.invalidCaptcha()
- self.fail("No valid captcha solution received")
-
- download_url = response.decode("base64")
- self.logDebug(download_url)
- if not download_url.startswith("http://"):
- self.parseError("download url")
-
- self.wait()
- self.download(download_url)
- # check download
- check = self.checkDownload({
- "cookie": re.compile(r'<div id="dl_failure"'),
- "fail": re.compile(r"<title>Share-Online")
- })
- if check == "cookie":
- self.invalidCaptcha()
- self.retry(5, 60, "Cookie failure")
- elif check == "fail":
- self.invalidCaptcha()
- self.retry(5, 5 * 60, "Download failed")
- else:
- self.correctCaptcha()
-
- def handlePremium(self): #: should be working better loading (account) api internally
- self.account.getAccountInfo(self.user, True)
- src = self.load("http://api.share-online.biz/account.php",
- {"username": self.user, "password": self.account.accounts[self.user]['password'],
- "act": "download", "lid": self.file_id})
-
- self.api_data = dlinfo = {}
- for line in src.splitlines():
- key, value = line.split(": ")
- dlinfo[key.lower()] = value
-
- self.logDebug(dlinfo)
- if not dlinfo['status'] == "online":
- self.offline()
- else:
- self.pyfile.name = dlinfo['name']
- self.pyfile.size = int(dlinfo['size'])
-
- dlLink = dlinfo['url']
- if dlLink == "server_under_maintenance":
- self.tempOffline()
- else:
- self.multiDL = True
- self.download(dlLink)
-
- def checkErrors(self):
- m = re.search(r"/failure/(.*?)/1", self.req.lastEffectiveURL)
- if m is None:
- return
-
- err = m.group(1)
- m = re.search(self.ERROR_INFO_PATTERN, self.html)
- msg = m.group(1) if m else ""
- self.logError(err, msg or "Unknown error occurred")
-
- if err == "invalid":
- self.fail(msg or "File not available")
- elif err in ("freelimit", "size", "proxy"):
- self.fail(msg or "Premium account needed")
- else:
- if err in 'server':
- self.setWait(600, False)
- elif err in 'expired':
- self.setWait(30, False)
- else:
- self.setWait(300, True)
-
- self.wait()
- self.retry(max_tries=25, reason=msg)
diff --git a/module/plugins/hoster/ShareplaceCom.py b/module/plugins/hoster/ShareplaceCom.py
deleted file mode 100644
index 0d236fe30..000000000
--- a/module/plugins/hoster/ShareplaceCom.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.Hoster import Hoster
-
-
-class ShareplaceCom(Hoster):
- __name__ = "ShareplaceCom"
- __type__ = "hoster"
- __version__ = "0.11"
-
- __pattern__ = r'(http://)?(?:www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+'
-
- __description__ = """Shareplace.com hoster plugin"""
- __author_name__ = "ACCakut"
- __author_mail__ = None
-
-
- def process(self, pyfile):
- self.pyfile = pyfile
- self.prepare()
- self.download(self.get_file_url())
-
- def prepare(self):
- if not self.file_exists():
- self.offline()
-
- self.pyfile.name = self.get_file_name()
-
- wait_time = self.get_waiting_time()
- self.setWait(wait_time)
- self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time))
- self.wait()
-
- def get_waiting_time(self):
- if not self.html:
- self.download_html()
-
- #var zzipitime = 15;
- m = re.search(r'var zzipitime = (\d+);', self.html)
- if m:
- sec = int(m.group(1))
- else:
- sec = 0
-
- return sec
-
- def download_html(self):
- url = re.sub("shareplace.com\/\?", "shareplace.com//index1.php/?a=", self.pyfile.url)
- self.html = self.load(url, decode=True)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- url = re.search(r"var beer = '(.*?)';", self.html)
- if url:
- url = url.group(1)
- url = unquote(
- url.replace("http://http:/", "").replace("vvvvvvvvv", "").replace("lllllllll", "").replace(
- "teletubbies", ""))
- self.logDebug("URL: %s" % url)
- return url
- else:
- self.fail("absolute filepath could not be found. offline? ")
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1)
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
-
- if re.search(r"HTTP Status 404", self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/ShragleCom.py b/module/plugins/hoster/ShragleCom.py
deleted file mode 100644
index ba3356d66..000000000
--- a/module/plugins/hoster/ShragleCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class ShragleCom(DeadHoster):
- __name__ = "ShragleCom"
- __type__ = "hoster"
- __version__ = "0.22"
-
- __pattern__ = r'http://(?:www\.)?(cloudnator|shragle).com/files/(?P<ID>.*?)/'
-
- __description__ = """Cloudnator.com (Shragle.com) hoster plugin"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
-
-getInfo = create_getInfo(ShragleCom)
diff --git a/module/plugins/hoster/SimplyPremiumCom.py b/module/plugins/hoster/SimplyPremiumCom.py
deleted file mode 100644
index 5db9f5daa..000000000
--- a/module/plugins/hoster/SimplyPremiumCom.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from datetime import datetime, timedelta
-
-from module.plugins.Hoster import Hoster
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-
-
-class SimplyPremiumCom(Hoster):
- __name__ = "SimplyPremiumCom"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'https?://.*(simply-premium)\.com'
-
- __description__ = """Simply-Premium.com hoster plugin"""
- __author_name__ = "EvolutionClip"
- __author_mail__ = "evolutionclip@live.de"
-
-
- def setup(self):
- self.chunkLimit = 16
- self.resumeDownload = False
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Simply-Premium.com")
- self.fail("No Simply-Premium.com account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- for i in xrange(5):
- page = self.load('http://www.simply-premium.com/premium.php?info&link=' + pyfile.url)
- self.logDebug("JSON data: " + page)
- if page != '':
- break
- else:
- self.logInfo("Unable to get API data, waiting 1 minute and retry")
- self.retry(5, 60, "Unable to get API data")
-
- if '<valid>0</valid>' in page or (
- "You are not allowed to download from this host" in page and self.premium):
- self.account.relogin(self.user)
- self.retry()
- elif "NOTFOUND" in page:
- self.offline()
- elif "downloadlimit" in page:
- self.logWarning("Reached maximum connctions")
- self.retry(5, 60, "Reached maximum connctions")
- elif "trafficlimit" in page:
- self.logWarning("Reached daily limit for this host")
- self.retry(1, secondsToMidnight(gmt=2), "Daily limit for this host reached")
- elif "hostererror" in page:
- self.logWarning("Hoster temporarily unavailable, waiting 1 minute and retry")
- self.retry(5, 60, "Hoster is temporarily unavailable")
- #page = json_loads(page)
- #new_url = page.keys()[0]
- #self.api_data = page[new_url]
-
- try:
- self.pyfile.name = re.search(r'<name>([^<]+)</name>', page).group(1)
- except AttributeError:
- self.pyfile.name = ""
-
- try:
- self.pyfile.size = re.search(r'<size>(\d+)</size>', page).group(1)
- except AttributeError:
- self.pyfile.size = 0
-
- try:
- new_url = re.search(r'<download>([^<]+)</download>', page).group(1)
- except AttributeError:
- new_url = 'http://www.simply-premium.com/premium.php?link=' + pyfile.url
-
- if new_url != pyfile.url:
- self.logDebug("New URL: " + new_url)
-
- self.download(new_url, disposition=True)
diff --git a/module/plugins/hoster/SimplydebridCom.py b/module/plugins/hoster/SimplydebridCom.py
deleted file mode 100644
index 78f6c0a34..000000000
--- a/module/plugins/hoster/SimplydebridCom.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class SimplydebridCom(Hoster):
- __name__ = "SimplydebridCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd.php/*'
-
- __description__ = """Simply-debrid.com hoster plugin"""
- __author_name__ = "Kagenoshin"
- __author_mail__ = "kagenoshin@gmx.ch"
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = 1
-
- def process(self, pyfile):
- if not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "simply-debrid.com")
- self.fail("No simply-debrid.com account provided")
-
- self.logDebug("Old URL: %s" % pyfile.url)
-
- #fix the links for simply-debrid.com!
- new_url = pyfile.url
- new_url = new_url.replace("clz.to", "cloudzer.net/file")
- new_url = new_url.replace("http://share-online", "http://www.share-online")
- new_url = new_url.replace("ul.to", "uploaded.net/file")
- new_url = new_url.replace("uploaded.com", "uploaded.net")
- new_url = new_url.replace("filerio.com", "filerio.in")
- new_url = new_url.replace("lumfile.com", "lumfile.se")
- if('fileparadox' in new_url):
- new_url = new_url.replace("http://", "https://")
-
- if re.match(self.__pattern__, new_url):
- new_url = new_url
-
- self.logDebug("New URL: %s" % new_url)
-
- if not re.match(self.__pattern__, new_url):
- page = self.load('http://simply-debrid.com/api.php', get={'dl': new_url}) # +'&u='+self.user+'&p='+self.account.getAccountData(self.user)['password'])
- if 'tiger Link' in page or 'Invalid Link' in page or ('API' in page and 'ERROR' in page):
- self.fail('Unable to unrestrict link')
- new_url = page
-
- self.setWait(5)
- self.wait()
- self.logDebug("Unrestricted URL: " + new_url)
-
- self.download(new_url, disposition=True)
-
- check = self.checkDownload({"bad1": "No address associated with hostname", "bad2": "<html"})
-
- if check == "bad1" or check == "bad2":
- self.retry(24, 3 * 60, "Bad file downloaded")
diff --git a/module/plugins/hoster/SockshareCom.py b/module/plugins/hoster/SockshareCom.py
deleted file mode 100644
index 90f092473..000000000
--- a/module/plugins/hoster/SockshareCom.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from os import rename
-
-from module.plugins.hoster.UnrestrictLi import secondsToMidnight
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class SockshareCom(SimpleHoster):
- __name__ = "SockshareCom"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?sockshare\.com/(mobile/)?(file|embed)/(?P<ID>\w+)'
-
- __description__ = """Sockshare.com hoster plugin"""
- __author_name__ = ("jeix", "stickell", "Walter Purcaro")
- __author_mail__ = ("jeix@hasnomail.de", "l.stickell@yahoo.it", "vuolter@gmail.com")
-
- FILE_INFO_PATTERN = r'site-content">\s*<h1>(?P<N>.+)<strong>\( (?P<S>[^)]+) \)</strong></h1>'
- OFFLINE_PATTERN = r'>This file doesn\'t exist, or has been removed.<'
- TEMP_OFFLINE_PATTERN = r'(>This content server has been temporarily disabled for upgrades|Try again soon\\. You can still download it below\\.<)'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.sockshare.com/file/\g<ID>')]
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = True
- self.chunkLimit = -1
-
- def handleFree(self):
- name = self.pyfile.name
- link = self._getLink()
- self.logDebug("Direct link: " + link)
- self.download(link, disposition=True)
- self.processName(name)
-
- def _getLink(self):
- hash_data = re.search(r'<input type="hidden" value="([a-z0-9]+)" name="hash">', self.html)
- if not hash_data:
- self.parseError("Unable to detect hash")
-
- post_data = {"hash": hash_data.group(1), "confirm": "Continue+as+Free+User"}
- self.html = self.load(self.pyfile.url, post=post_data)
- if ">You have exceeded the daily stream limit for your country\\. You can wait until tomorrow" in self.html:
- self.logWarning("You have exceeded your daily stream limit for today")
- self.wait(secondsToMidnight(gmt=2), True)
- elif re.search(self.TEMP_OFFLINE_PATTERN, self.html):
- self.retry(wait_time=2 * 60 * 60, reason="Server temporarily offline") # 2 hours wait
-
- patterns = (r'(/get_file\.php\?id=[A-Z0-9]+&key=[a-zA-Z0-9=]+&original=1)',
- r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+)',
- r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+&original=1)',
- r'<a href="/gopro\.php">Tired of ads and waiting\? Go Pro!</a>[\t\n\rn ]+</div>[\t\n\rn ]+<a href="(/.*?)"')
- for pattern in patterns:
- link = re.search(pattern, self.html)
- if link:
- break
- else:
- link = re.search(r"playlist: '(/get_file\.php\?stream=[a-zA-Z0-9=]+)'", self.html)
- if link:
- self.html = self.load("http://www.sockshare.com" + link.group(1))
- link = re.search(r'media:content url="(http://.*?)"', self.html)
- if link is None:
- link = re.search(r'\"(http://media\\-b\\d+\\.sockshare\\.com/download/\\d+/.*?)\"', self.html)
- else:
- self.parseError('Unable to detect a download link')
-
- link = link.group(1).replace("&amp;", "&")
- if link.startswith("http://"):
- return link
- else:
- return "http://www.sockshare.com" + link
-
- def processName(self, name_old):
- name = self.pyfile.name
- if name <= name_old:
- return
- name_new = re.sub(r'\.[^.]+$', "", name_old) + name[len(name_old):]
- filename = self.lastDownload
- self.pyfile.name = name_new
- rename(filename, filename.rsplit(name)[0] + name_new)
- self.logInfo("%(name)s renamed to %(newname)s" % {"name": name, "newname": name_new})
-
-
-getInfo = create_getInfo(SockshareCom)
diff --git a/module/plugins/hoster/SoundcloudCom.py b/module/plugins/hoster/SoundcloudCom.py
deleted file mode 100644
index 05fe897d2..000000000
--- a/module/plugins/hoster/SoundcloudCom.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import pycurl
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class SoundcloudCom(Hoster):
- __name__ = "SoundcloudCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)'
-
- __description__ = """SoundCloud.com hoster plugin"""
- __author_name__ = "Peekayy"
- __author_mail__ = "peekayy.dev@gmail.com"
-
-
- def process(self, pyfile):
- # default UserAgent of HTTPRequest fails for this hoster so we use this one
- self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0')
- page = self.load(pyfile.url)
- m = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>[0-9]*)"', page)
- songId = clientId = ""
- if m:
- songId = m.group("ID")
- if len(songId) <= 0:
- self.logError("Could not find song id")
- self.offline()
- else:
- m = re.search(r'"clientID":"(?P<CID>.*?)"', page)
- if m:
- clientId = m.group("CID")
-
- if len(clientId) <= 0:
- clientId = "b45b1aa10f1ac2941910a7f0d10f8e28"
-
- m = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page)
- if m:
- pyfile.name = m.group("TITLE") + ".mp3"
- else:
- pyfile.name = re.match(self.__pattern__, pyfile.url).group("SID") + ".mp3"
-
- # url to retrieve the actual song url
- page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId})
- # getting streams
- # for now we choose the first stream found in all cases
- # it could be improved if relevant for this hoster
- streams = [
- (result.group("QUALITY"), result.group("URL"))
- for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page)
- ]
- self.logDebug("Found Streams", streams)
- self.logDebug("Downloading", streams[0][0], streams[0][1])
- self.download(streams[0][1])
diff --git a/module/plugins/hoster/SpeedLoadOrg.py b/module/plugins/hoster/SpeedLoadOrg.py
deleted file mode 100644
index 8cf1163b2..000000000
--- a/module/plugins/hoster/SpeedLoadOrg.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class SpeedLoadOrg(DeadHoster):
- __name__ = "SpeedLoadOrg"
- __type__ = "hoster"
- __version__ = "1.02"
-
- __pattern__ = r'http://(?:www\.)?speedload\.org/(?P<ID>\w+)'
-
- __description__ = """Speedload.org hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
-getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/module/plugins/hoster/SpeedfileCz.py b/module/plugins/hoster/SpeedfileCz.py
deleted file mode 100644
index 6a42d1dbe..000000000
--- a/module/plugins/hoster/SpeedfileCz.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class SpeedfileCz(DeadHoster):
- __name__ = "SpeedFileCz"
- __type__ = "hoster"
- __version__ = "0.32"
-
- __pattern__ = r'http://(?:www\.)?speedfile.cz/.*'
-
- __description__ = """Speedfile.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(SpeedfileCz)
diff --git a/module/plugins/hoster/SpeedyshareCom.py b/module/plugins/hoster/SpeedyshareCom.py
deleted file mode 100644
index 22f4ee511..000000000
--- a/module/plugins/hoster/SpeedyshareCom.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Testlink:
-# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class SpeedyshareCom(SimpleHoster):
- __name__ = "SpeedyshareCom"
- __type__ = "hoster"
- __pattern__ = r"https?://(www\.)?(speedyshare.com|speedy.sh)/.*"
- __version__ = "0.01"
- __description__ = """speedyshare.com hoster plugin"""
- __author_name__ = ("zapp-brannigan")
- __author_mail__ = ("fuerst.reinje@web.de")
-
- FILE_NAME_PATTERN = r'class=downloadfilename>(?P<N>.*)</span></td>'
- FILE_SIZE_PATTERN = r'class=sizetagtext>(?P<S>.*) (?P<U>[kKmM]?[iI]?[bB]?)</div>'
- LINK_PATTERN = r'<a href=\'(.*)\'><img src=/gf/slowdownload.png alt=\'Slow Download\' border=0'
- FILE_OFFLINE_PATTERN = r'class=downloadfilenamenotfound>.*</span>'
- BASE_URL = 'www.speedyshare.com'
-
- def setup(self):
- self.multiDL = False
- self.chunkLimit = 1
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
- try:
- dl_link = re.search(self.LINK_PATTERN, self.html).group(1)
- self.logDebug("Link: " + dl_link)
- except:
- self.parseError("Unable to find download link")
- self.download(self.BASE_URL + dl_link, disposition=True)
- check = self.checkDownload({"is_html": re.compile("html")})
- if check == "is_html":
- self.fail("The downloaded file is html, maybe the plugin is out of date")
-
-
-getInfo = create_getInfo(SpeedyshareCom)
diff --git a/module/plugins/hoster/StreamCz.py b/module/plugins/hoster/StreamCz.py
deleted file mode 100644
index 526e61eea..000000000
--- a/module/plugins/hoster/StreamCz.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-
-
-def getInfo(urls):
- result = []
-
- for url in urls:
-
- html = getURL(url)
- if re.search(StreamCz.OFFLINE_PATTERN, html):
- # File offline
- result.append((url, 0, 1, url))
- else:
- result.append((url, 0, 2, url))
- yield result
-
-
-class StreamCz(Hoster):
- __name__ = "StreamCz"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'https?://(?:www\.)?stream\.cz/[^/]+/\d+.*'
-
- __description__ = """Stream.cz hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<link rel="video_src" href="http://www.stream.cz/\w+/(\d+)-([^"]+)" />'
- OFFLINE_PATTERN = r'<h1 class="commonTitle">Str.nku nebylo mo.n. nal.zt \(404\)</h1>'
-
- CDN_PATTERN = r'<param name="flashvars" value="[^"]*&id=(?P<ID>\d+)(?:&cdnLQ=(?P<cdnLQ>\d*))?(?:&cdnHQ=(?P<cdnHQ>\d*))?(?:&cdnHD=(?P<cdnHD>\d*))?&'
-
-
- def setup(self):
- self.multiDL = True
- self.resumeDownload = True
-
- def process(self, pyfile):
-
- self.html = self.load(pyfile.url, decode=True)
-
- if re.search(self.OFFLINE_PATTERN, self.html):
- self.offline()
-
- m = re.search(self.CDN_PATTERN, self.html)
- if m is None:
- self.fail("Parse error (CDN)")
- cdn = m.groupdict()
- self.logDebug(cdn)
- for cdnkey in ("cdnHD", "cdnHQ", "cdnLQ"):
- if cdnkey in cdn and cdn[cdnkey] > '':
- cdnid = cdn[cdnkey]
- break
- else:
- self.fail("Stream URL not found")
-
- m = re.search(self.FILE_NAME_PATTERN, self.html)
- if m is None:
- self.fail("Parse error (NAME)")
- pyfile.name = "%s-%s.%s.mp4" % (m.group(2), m.group(1), cdnkey[-2:])
-
- download_url = "http://cdn-dispatcher.stream.cz/?id=" + cdnid
- self.logInfo("STREAM (%s): %s" % (cdnkey[-2:], download_url))
- self.download(download_url)
diff --git a/module/plugins/hoster/StreamcloudEu.py b/module/plugins/hoster/StreamcloudEu.py
deleted file mode 100644
index 11333640e..000000000
--- a/module/plugins/hoster/StreamcloudEu.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import sleep
-
-from module.network.HTTPRequest import HTTPRequest
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class StreamcloudEu(XFileSharingPro):
- __name__ = "StreamcloudEu"
- __type__ = "hoster"
- __version__ = "0.04"
-
- __pattern__ = r'http://(?:www\.)?streamcloud\.eu/\S+'
-
- __description__ = """Streamcloud.eu hoster plugin"""
- __author_name__ = "seoester"
- __author_mail__ = "seoester@googlemail.com"
-
- HOSTER_NAME = "streamcloud.eu"
-
- LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud.eu:?\d*/.*/video\.(mp4|flv))",'
-
-
- def setup(self):
- super(StreamcloudEu, self).setup()
- self.multiDL = True
-
- def getDownloadLink(self):
- m = re.search(self.LINK_PATTERN, self.html, re.S)
- if m:
- return m.group(1)
-
- for i in xrange(5):
- self.logDebug("Getting download link: #%d" % i)
- data = self.getPostParameters()
- httpRequest = HTTPRequest(options=self.req.options)
- httpRequest.cj = self.req.cj
- sleep(10)
- self.html = httpRequest.load(self.pyfile.url, post=data, referer=False, cookies=True, decode=True)
- self.header = httpRequest.header
-
- m = re.search("Location\s*:\s*(.*)", self.header, re.I)
- if m:
- break
-
- m = re.search(self.LINK_PATTERN, self.html, re.S)
- if m:
- break
-
- else:
- if self.errmsg and 'captcha' in self.errmsg:
- self.fail("No valid captcha code entered")
- else:
- self.fail("Download link not found")
-
- return m.group(1)
-
- def getPostParameters(self):
- for i in xrange(3):
- if not self.errmsg:
- self.checkErrors()
-
- if hasattr(self, "FORM_PATTERN"):
- action, inputs = self.parseHtmlForm(self.FORM_PATTERN)
- else:
- action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
-
- if not inputs:
- action, inputs = self.parseHtmlForm('F1')
- if not inputs:
- if self.errmsg:
- self.retry()
- else:
- self.parseError("Form not found")
-
- self.logDebug(self.HOSTER_NAME, inputs)
-
- if 'op' in inputs and inputs['op'] in ("download1", "download2", "download3"):
- if "password" in inputs:
- if self.passwords:
- inputs['password'] = self.passwords.pop(0)
- else:
- self.fail("No or invalid passport")
-
- if not self.premium:
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- wait_time = int(m.group(1)) + 1
- self.setWait(wait_time, False)
- else:
- wait_time = 0
-
- self.captcha = self.handleCaptcha(inputs)
-
- if wait_time:
- self.wait()
-
- self.errmsg = None
- self.logDebug("getPostParameters {0}".format(i))
- return inputs
-
- else:
- inputs['referer'] = self.pyfile.url
-
- if self.premium:
- inputs['method_premium'] = "Premium Download"
- if 'method_free' in inputs:
- del inputs['method_free']
- else:
- inputs['method_free'] = "Free Download"
- if 'method_premium' in inputs:
- del inputs['method_premium']
-
- self.html = self.load(self.pyfile.url, post=inputs, ref=False)
- self.errmsg = None
-
- else:
- self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN'))
-
-
-getInfo = create_getInfo(StreamcloudEu)
diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py
deleted file mode 100644
index a9cc46614..000000000
--- a/module/plugins/hoster/TurbobitNet.py
+++ /dev/null
@@ -1,167 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import random
-import re
-import time
-
-from Crypto.Cipher import ARC4
-from binascii import hexlify, unhexlify
-from pycurl import HTTPHEADER
-from urllib import quote
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
-
-
-class TurbobitNet(SimpleHoster):
- __name__ = "TurbobitNet"
- __type__ = "hoster"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?(turbobit.net|unextfiles.com)/(?!download/folder/)(?:download/free/)?(?P<ID>\w+).*'
-
- __description__ = """Turbobit.net plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r"<span class='file-icon1[^>]*>(?P<N>[^<]+)</span>\s*\((?P<S>[^\)]+)\)\s*</h1>" #: long filenames are shortened
- FILE_NAME_PATTERN = r'<meta name="keywords" content="\s+(?P<N>[^,]+)' #: full name but missing on page2
- OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found'
-
- FILE_URL_REPLACEMENTS = [(r"http://(?:www\.)?(turbobit.net|unextfiles.com)/(?:download/free/)?(?P<ID>\w+).*",
- "http://turbobit.net/\g<ID>.html")]
- SH_COOKIES = [(".turbobit.net", "user_lang", "en")]
-
- LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)'
- LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span>'
- CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"'
- CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.*?)"'
-
-
- def handleFree(self):
- self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID']
- self.html = self.load(self.url)
-
- rtUpdate = self.getRtUpdate()
-
- self.solveCaptcha()
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
- self.url = self.getDownloadUrl(rtUpdate)
-
- self.wait()
- self.html = self.load(self.url)
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"])
- self.downloadFile()
-
- def solveCaptcha(self):
- for _ in xrange(5):
- m = re.search(self.LIMIT_WAIT_PATTERN, self.html)
- if m:
- wait_time = int(m.group(1))
- self.wait(wait_time, wait_time > 60)
- self.retry()
-
- action, inputs = self.parseHtmlForm("action='#'")
- if not inputs:
- self.parseError("captcha form")
- self.logDebug(inputs)
-
- if inputs['captcha_type'] == 'recaptcha':
- recaptcha = ReCaptcha(self)
- m = re.search(self.CAPTCHA_KEY_PATTERN, self.html)
- captcha_key = m.group(1) if m else '6LcTGLoSAAAAAHCWY9TTIrQfjUlxu6kZlTYP50_c'
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(
- captcha_key)
- else:
- m = re.search(self.CAPTCHA_SRC_PATTERN, self.html)
- if m is None:
- self.parseError('captcha')
- captcha_url = m.group(1)
- inputs['captcha_response'] = self.decryptCaptcha(captcha_url)
-
- self.logDebug(inputs)
- self.html = self.load(self.url, post=inputs)
-
- if not "<div class='download-timer-header'>" in self.html:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
- else:
- self.fail("Invalid captcha")
-
- def getRtUpdate(self):
- rtUpdate = self.getStorage("rtUpdate")
- if not rtUpdate:
- if self.getStorage("version") != self.__version__ or int(
- self.getStorage("timestamp", 0)) + 86400000 < timestamp():
- # that's right, we are even using jdownloader updates
- rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js")
- rtUpdate = self.decrypt(rtUpdate.splitlines()[1])
- # but we still need to fix the syntax to work with other engines than rhino
- rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{',
- r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate)
- rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate)
-
- self.logDebug("rtUpdate")
- self.setStorage("rtUpdate", rtUpdate)
- self.setStorage("timestamp", timestamp())
- self.setStorage("version", self.__version__)
- else:
- self.logError("Unable to download, wait for update...")
- self.tempOffline()
-
- return rtUpdate
-
- def getDownloadUrl(self, rtUpdate):
- self.req.http.lastURL = self.url
-
- m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html)
- url = "http://turbobit.net%s%s" % (m.groups() if m else (
- '/files/timeout.js?ver=', ''.join(random.choice('0123456789ABCDEF') for _ in xrange(32))))
- fun = self.load(url)
-
- self.setWait(65, False)
-
- for b in [1, 3]:
- self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % (
- self.file_info['ID'], b, quote(fun), rtUpdate)
-
- try:
- out = self.js.eval(self.jscode)
- self.logDebug("URL", self.js.engine, out)
- if out.startswith('/download/'):
- return "http://turbobit.net%s" % out.strip()
- except Exception, e:
- self.logError(e)
- else:
- if self.retries >= 2:
- # retry with updated js
- self.delStorage("rtUpdate")
- self.retry()
-
- def decrypt(self, data):
- cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0'))
- return unhexlify(cipher.encrypt(unhexlify(data)))
-
- def getLocalTimeString(self):
- lt = time.localtime()
- tz = time.altzone if lt.tm_isdst else time.timezone
- return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600)
-
- def handlePremium(self):
- self.logDebug("Premium download as user %s" % self.user)
- self.html = self.load(self.pyfile.url) # Useless in 0.5
- self.downloadFile()
-
- def downloadFile(self):
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError("download link")
- self.url = "http://turbobit.net" + m.group('url')
- self.logDebug(self.url)
- self.download(self.url)
-
-
-getInfo = create_getInfo(TurbobitNet)
diff --git a/module/plugins/hoster/TurbouploadCom.py b/module/plugins/hoster/TurbouploadCom.py
deleted file mode 100644
index bcfa2d7d4..000000000
--- a/module/plugins/hoster/TurbouploadCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class TurbouploadCom(DeadHoster):
- __name__ = "TurbouploadCom"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?turboupload.com/(\w+).*'
-
- __description__ = """Turboupload.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
-getInfo = create_getInfo(TurbouploadCom)
diff --git a/module/plugins/hoster/TusfilesNet.py b/module/plugins/hoster/TusfilesNet.py
deleted file mode 100644
index 7fb2a375e..000000000
--- a/module/plugins/hoster/TusfilesNet.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class TusfilesNet(XFileSharingPro):
- __name__ = "TusfilesNet"
- __type__ = "hoster"
- __version__ = "0.03"
-
- __pattern__ = r'https?://(?:www\.)?tusfiles\.net/(?P<ID>\w+)'
-
- __description__ = """Tusfiles.net hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- HOSTER_NAME = "tusfiles.net"
-
- FILE_INFO_PATTERN = r'\](?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)\['
- OFFLINE_PATTERN = r'>File Not Found|<Title>TusFiles - Fast Sharing Files!'
-
- SH_COOKIES = [(".tusfiles.net", "lang", "english")]
-
-
- def setup(self):
- self.multiDL = False
- self.chunkLimit = -1
- self.resumeDownload = True
-
-
-getInfo = create_getInfo(TusfilesNet)
diff --git a/module/plugins/hoster/TwoSharedCom.py b/module/plugins/hoster/TwoSharedCom.py
deleted file mode 100644
index dbd33dd83..000000000
--- a/module/plugins/hoster/TwoSharedCom.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class TwoSharedCom(SimpleHoster):
- __name__ = "TwoSharedCom"
- __type__ = "hoster"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?2shared.com/(account/)?(download|get|file|document|photo|video|audio)/.*'
-
- __description__ = """2Shared.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<h1>(?P<N>.*)</h1>'
- FILE_SIZE_PATTERN = r'<span class="dtitle">File size:</span>\s*(?P<S>[0-9,.]+) (?P<U>[kKMG])i?B'
- OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted\.'
-
- LINK_PATTERN = r"window.location ='([^']+)';"
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def handleFree(self):
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError('Download link')
- link = m.group(1)
- self.logDebug("Download URL %s" % link)
-
- self.download(link)
-
-
-getInfo = create_getInfo(TwoSharedCom)
diff --git a/module/plugins/hoster/UlozTo.py b/module/plugins/hoster/UlozTo.py
deleted file mode 100644
index dbdaf3f8e..000000000
--- a/module/plugins/hoster/UlozTo.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import time
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-def convertDecimalPrefix(m):
- # decimal prefixes used in filesize and traffic
- return ("%%.%df" % {'k': 3, 'M': 6, 'G': 9}[m.group(2)] % float(m.group(1))).replace('.', '')
-
-
-class UlozTo(SimpleHoster):
- __name__ = "UlozTo"
- __type__ = "hoster"
- __version__ = "0.98"
-
- __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\w+/[^/?]*)'
-
- __description__ = """Uloz.to hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>'
- FILE_NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz.to</title>'
- FILE_SIZE_PATTERN = r'<span id="fileSize">.*?(?P<S>[0-9.]+\s[kMG]?B)</span>'
- OFFLINE_PATTERN = r'<title>404 - Page not found</title>|<h1 class="h1">File (has been deleted|was banned)</h1>'
-
- FILE_SIZE_REPLACEMENTS = [('([0-9.]+)\s([kMG])B', convertDecimalPrefix)]
- FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "www.ulozto.net")]
-
- ADULT_PATTERN = r'<form action="(?P<link>[^\"]*)" method="post" id="frm-askAgeForm">'
- PASSWD_PATTERN = r'<div class="passwordProtectedFile">'
- VIPLINK_PATTERN = r'<a href="[^"]*\?disclaimer=1" class="linkVip">'
- FREE_URL_PATTERN = r'<div class="freeDownloadForm"><form action="([^"]+)"'
- PREMIUM_URL_PATTERN = r'<div class="downloadForm"><form action="([^"]+)"'
- TOKEN_PATTERN = r'<input type="hidden" name="_token_" id="[^\"]*" value="(?P<token>[^\"]*)" />'
-
-
- def setup(self):
- self.multiDL = self.premium
- self.resumeDownload = True
-
- def process(self, pyfile):
- pyfile.url = re.sub(r"(?<=http://)([^/]+)", "www.ulozto.net", pyfile.url)
- self.html = self.load(pyfile.url, decode=True, cookies=True)
-
- if re.search(self.ADULT_PATTERN, self.html):
- self.logInfo("Adult content confirmation needed. Proceeding..")
-
- m = re.search(self.TOKEN_PATTERN, self.html)
- if m is None:
- self.parseError('TOKEN')
- token = m.group(1)
-
- self.html = self.load(pyfile.url, get={"do": "askAgeForm-submit"},
- post={"agree": "Confirm", "_token_": token}, cookies=True)
-
- passwords = self.getPassword().splitlines()
- while self.PASSWD_PATTERN in self.html:
- if passwords:
- password = passwords.pop(0)
- self.logInfo("Password protected link, trying " + password)
- self.html = self.load(pyfile.url, get={"do": "passwordProtectedForm-submit"},
- post={"password": password, "password_send": 'Send'}, cookies=True)
- else:
- self.fail("No or incorrect password")
-
- if re.search(self.VIPLINK_PATTERN, self.html):
- self.html = self.load(pyfile.url, get={"disclaimer": "1"})
-
- self.file_info = self.getFileInfo()
-
- if self.premium and self.checkTrafficLeft():
- self.handlePremium()
- else:
- self.handleFree()
-
- self.doCheckDownload()
-
- def handleFree(self):
- action, inputs = self.parseHtmlForm('id="frm-downloadDialog-freeDownloadForm"')
- if not action or not inputs:
- self.parseError("free download form")
-
- self.logDebug('inputs.keys() = ' + str(inputs.keys()))
- # get and decrypt captcha
- if all(key in inputs for key in ("captcha_value", "captcha_id", "captcha_key")):
- # Old version - last seen 9.12.2013
- self.logDebug('Using "old" version')
-
- captcha_value = self.decryptCaptcha("http://img.uloz.to/captcha/%s.png" % inputs['captcha_id'])
- self.logDebug('CAPTCHA ID: ' + inputs['captcha_id'] + ", CAPTCHA VALUE: " + captcha_value)
-
- inputs.update({'captcha_id': inputs['captcha_id'], 'captcha_key': inputs['captcha_key'], 'captcha_value': captcha_value})
-
- elif all(key in inputs for key in ("captcha_value", "timestamp", "salt", "hash")):
- # New version - better to get new parameters (like captcha reload) because of image url - since 6.12.2013
- self.logDebug('Using "new" version')
-
- xapca = self.load("http://www.ulozto.net/reloadXapca.php", get={"rnd": str(int(time.time()))})
- self.logDebug('xapca = ' + str(xapca))
-
- data = json_loads(xapca)
- captcha_value = self.decryptCaptcha(str(data['image']))
- self.logDebug("CAPTCHA HASH: " + data['hash'] + ", CAPTCHA SALT: " + str(data['salt']) + ", CAPTCHA VALUE: " + captcha_value)
-
- inputs.update({'timestamp': data['timestamp'], 'salt': data['salt'], 'hash': data['hash'], 'captcha_value': captcha_value})
- else:
- self.parseError("CAPTCHA form changed")
-
- self.multiDL = True
- self.download("http://www.ulozto.net" + action, post=inputs, cookies=True, disposition=True)
-
- def handlePremium(self):
- self.download(self.pyfile.url + "?do=directDownload", disposition=True)
- #parsed_url = self.findDownloadURL(premium=True)
- #self.download(parsed_url, post={"download": "Download"})
-
- def findDownloadURL(self, premium=False):
- msg = "%s link" % ("Premium" if premium else "Free")
- m = re.search(self.PREMIUM_URL_PATTERN if premium else self.FREE_URL_PATTERN, self.html)
- if m is None:
- self.parseError(msg)
- parsed_url = "http://www.ulozto.net" + m.group(1)
- self.logDebug("%s: %s" % (msg, parsed_url))
- return parsed_url
-
- def doCheckDownload(self):
- check = self.checkDownload({
- "wrong_captcha": re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'),
- "offline": re.compile(self.OFFLINE_PATTERN),
- "passwd": self.PASSWD_PATTERN,
- "server_error": 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', # paralell dl, server overload etc.
- "not_found": "<title>UloÅŸ.to</title>"
- })
-
- if check == "wrong_captcha":
- #self.delStorage("captcha_id")
- #self.delStorage("captcha_text")
- self.invalidCaptcha()
- self.retry(reason="Wrong captcha code")
- elif check == "offline":
- self.offline()
- elif check == "passwd":
- self.fail("Wrong password")
- elif check == "server_error":
- self.logError("Server error, try downloading later")
- self.multiDL = False
- self.wait(1 * 60 * 60, True)
- self.retry()
- elif check == "not_found":
- self.fail("Server error - file not downloadable")
-
-
-getInfo = create_getInfo(UlozTo)
diff --git a/module/plugins/hoster/UloziskoSk.py b/module/plugins/hoster/UloziskoSk.py
deleted file mode 100644
index ac70f42d4..000000000
--- a/module/plugins/hoster/UloziskoSk.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class UloziskoSk(SimpleHoster):
- __name__ = "UloziskoSk"
- __type__ = "hoster"
- __version__ = "0.23"
-
- __pattern__ = r'http://(?:www\.)?ulozisko.sk/.*'
-
- __description__ = """Ulozisko.sk hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'<div class="down1">(?P<N>[^<]+)</div>'
- FILE_SIZE_PATTERN = ur'Veğkosť súboru: <strong>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong><br />'
- OFFLINE_PATTERN = ur'<span class = "red">ZadanÜ súbor neexistuje z jedného z nasledujúcich dÎvodov:</span>'
-
- LINK_PATTERN = r'<form name = "formular" action = "([^"]+)" method = "post">'
- ID_PATTERN = r'<input type = "hidden" name = "id" value = "([^"]+)" />'
- CAPTCHA_PATTERN = r'<img src="(/obrazky/obrazky.php\?fid=[^"]+)" alt="" />'
- IMG_PATTERN = ur'<strong>PRE ZVÄČŠENIE KLIKNITE NA OBRÁZOK</strong><br /><a href = "([^"]+)">'
-
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
- self.getFileInfo()
-
- m = re.search(self.IMG_PATTERN, self.html)
- if m:
- url = "http://ulozisko.sk" + m.group(1)
- self.download(url)
- else:
- self.handleFree()
-
- def handleFree(self):
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError('URL')
- parsed_url = 'http://www.ulozisko.sk' + m.group(1)
-
- m = re.search(self.ID_PATTERN, self.html)
- if m is None:
- self.parseError('ID')
- id = m.group(1)
-
- self.logDebug('URL:' + parsed_url + ' ID:' + id)
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m is None:
- self.parseError('CAPTCHA')
- captcha_url = 'http://www.ulozisko.sk' + m.group(1)
-
- captcha = self.decryptCaptcha(captcha_url, cookies=True)
-
- self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + captcha)
-
- self.download(parsed_url, post={
- "antispam": captcha,
- "id": id,
- "name": self.pyfile.name,
- "but": "++++STIAHNI+S%DABOR++++"
- })
-
-
-getInfo = create_getInfo(UloziskoSk)
diff --git a/module/plugins/hoster/UnibytesCom.py b/module/plugins/hoster/UnibytesCom.py
deleted file mode 100644
index e936b84b1..000000000
--- a/module/plugins/hoster/UnibytesCom.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class UnibytesCom(SimpleHoster):
- __name__ = "UnibytesCom"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?unibytes\.com/[a-zA-Z0-9-._ ]{11}B'
-
- __description__ = """UniBytes.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_INFO_PATTERN = r'<span[^>]*?id="fileName"[^>]*>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)'
-
- HOSTER_NAME = "unibytes.com"
- WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec'
- LINK_PATTERN = r'<a href="([^"]+)">Download</a>'
-
-
- def handleFree(self):
- domain = "http://www." + self.HOSTER_NAME
- action, post_data = self.parseHtmlForm('id="startForm"')
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
-
- for _ in xrange(8):
- self.logDebug(action, post_data)
- self.html = self.load(domain + action, post=post_data)
-
- m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I)
- if m:
- url = m.group(1)
- break
-
- if '>Somebody else is already downloading using your IP-address<' in self.html:
- self.wait(10 * 60, True)
- self.retry()
-
- if post_data['step'] == 'last':
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- url = m.group(1)
- self.correctCaptcha()
- break
- else:
- self.invalidCaptcha()
-
- last_step = post_data['step']
- action, post_data = self.parseHtmlForm('id="stepForm"')
-
- if last_step == 'timer':
- m = re.search(self.WAIT_PATTERN, self.html)
- self.wait(int(m.group(1)) if m else 60, False)
- elif last_step in ("captcha", "last"):
- post_data['captcha'] = self.decryptCaptcha(domain + '/captcha.jpg')
- else:
- self.fail("No valid captcha code entered")
-
- self.logDebug('Download link: ' + url)
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
- self.download(url)
-
-
-getInfo = create_getInfo(UnibytesCom)
diff --git a/module/plugins/hoster/UnrestrictLi.py b/module/plugins/hoster/UnrestrictLi.py
deleted file mode 100644
index ed70e023d..000000000
--- a/module/plugins/hoster/UnrestrictLi.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from datetime import datetime, timedelta
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-def secondsToMidnight(gmt=0):
- now = datetime.utcnow() + timedelta(hours=gmt)
- if now.hour is 0 and now.minute < 10:
- midnight = now
- else:
- midnight = now + timedelta(days=1)
- midnight = midnight.replace(hour=0, minute=10, second=0, microsecond=0)
- return int((midnight - now).total_seconds())
-
-
-class UnrestrictLi(Hoster):
- __name__ = "UnrestrictLi"
- __type__ = "hoster"
- __version__ = "0.12"
-
- __pattern__ = r'https?://(?:[^/]*\.)?(unrestrict|unr)\.li'
-
- __description__ = """Unrestrict.li hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def setup(self):
- self.chunkLimit = 16
- self.resumeDownload = True
-
- def process(self, pyfile):
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- elif not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li")
- self.fail("No Unrestrict.li account provided")
- else:
- self.logDebug("Old URL: %s" % pyfile.url)
- for _ in xrange(5):
- page = self.req.load('https://unrestrict.li/unrestrict.php',
- post={'link': pyfile.url, 'domain': 'long'})
- self.logDebug("JSON data: " + page)
- if page != '':
- break
- else:
- self.logInfo("Unable to get API data, waiting 1 minute and retry")
- self.retry(5, 60, "Unable to get API data")
-
- if 'Expired session' in page or ("You are not allowed to "
- "download from this host" in page and self.premium):
- self.account.relogin(self.user)
- self.retry()
- elif "File offline" in page:
- self.offline()
- elif "You are not allowed to download from this host" in page:
- self.fail("You are not allowed to download from this host")
- elif "You have reached your daily limit for this host" in page:
- self.logWarning("Reached daily limit for this host")
- self.retry(5, secondsToMidnight(gmt=2), "Daily limit for this host reached")
- elif "ERROR_HOSTER_TEMPORARILY_UNAVAILABLE" in page:
- self.logInfo("Hoster temporarily unavailable, waiting 1 minute and retry")
- self.retry(5, 60, "Hoster is temporarily unavailable")
- page = json_loads(page)
- new_url = page.keys()[0]
- self.api_data = page[new_url]
-
- if new_url != pyfile.url:
- self.logDebug("New URL: " + new_url)
-
- if hasattr(self, 'api_data'):
- self.setNameSize()
-
- self.download(new_url, disposition=True)
-
- if self.getConfig("history"):
- self.load("https://unrestrict.li/history/&delete=all")
- self.logInfo("Download history deleted")
-
- def setNameSize(self):
- if 'name' in self.api_data:
- self.pyfile.name = self.api_data['name']
- if 'size' in self.api_data:
- self.pyfile.size = self.api_data['size']
diff --git a/module/plugins/hoster/UploadStationCom.py b/module/plugins/hoster/UploadStationCom.py
deleted file mode 100644
index ac5a47f3f..000000000
--- a/module/plugins/hoster/UploadStationCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class UploadStationCom(DeadHoster):
- __name__ = "UploadStationCom"
- __type__ = "hoster"
- __version__ = "0.52"
-
- __pattern__ = r'http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)'
-
- __description__ = """UploadStation.com hoster plugin"""
- __author_name__ = ("fragonib", "zoidberg")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz")
-
-
-getInfo = create_getInfo(UploadStationCom)
diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py
deleted file mode 100644
index 286f1caf0..000000000
--- a/module/plugins/hoster/UploadedTo.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://ul.to/044yug9o
-# http://ul.to/gzfhd0xs
-
-import re
-
-from time import sleep
-
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.plugins.Plugin import chunks
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.utils import html_unescape, parseFileSize
-
-
-key = "bGhGMkllZXByd2VEZnU5Y2NXbHhYVlZ5cEE1bkEzRUw=".decode('base64')
-
-
-def getID(url):
- """ returns id from file url"""
- m = re.match(UploadedTo.__pattern__, url)
- return m.group('ID')
-
-
-def getAPIData(urls):
- post = {"apikey": key}
-
- idMap = {}
-
- for i, url in enumerate(urls):
- id = getID(url)
- post['id_%s' % i] = id
- idMap[id] = url
-
- for _ in xrange(5):
- api = unicode(getURL("http://uploaded.net/api/filemultiple", post=post, decode=False), 'iso-8859-1')
- if api != "can't find request":
- break
- else:
- sleep(3)
-
- result = {}
-
- if api:
- for line in api.splitlines():
- data = line.split(",", 4)
- if data[1] in idMap:
- result[data[1]] = (data[0], data[2], data[4], data[3], idMap[data[1]])
-
- return result
-
-
-def parseFileInfo(self, url='', html=''):
- if not html and hasattr(self, "html"):
- html = self.html
-
- name = url
- size = 0
- fileid = None
-
- if re.search(self.OFFLINE_PATTERN, html):
- # File offline
- status = 1
- else:
- m = re.search(self.FILE_INFO_PATTERN, html)
- if m:
- name, fileid = html_unescape(m.group('N')), m.group('ID')
- size = parseFileSize(m.group('S'))
- status = 2
- else:
- status = 3
-
- return name, size, status, fileid
-
-
-def getInfo(urls):
- for chunk in chunks(urls, 80):
- result = []
-
- api = getAPIData(chunk)
-
- for data in api.itervalues():
- if data[0] == "online":
- result.append((html_unescape(data[2]), data[1], 2, data[4]))
-
- elif data[0] == "offline":
- result.append((data[4], 0, 1, data[4]))
-
- yield result
-
-
-class UploadedTo(Hoster):
- __name__ = "UploadedTo"
- __type__ = "hoster"
- __version__ = "0.73"
-
- __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
-
- __description__ = """Uploaded.net hoster plugin"""
- __author_name__ = ("spoob", "mkaay", "zoidberg", "netpok", "stickell")
- __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz",
- "netpok@gmail.com", "l.stickell@yahoo.it")
-
- FILE_INFO_PATTERN = r'<a href="file/(?P<ID>\w+)" id="filename">(?P<N>[^<]+)</a> &nbsp;\s*<small[^>]*>(?P<S>[^<]+)</small>'
- OFFLINE_PATTERN = r'<small class="cL">Error: 404</small>'
- DL_LIMIT_PATTERN = r'You have reached the max. number of possible free downloads for this hour'
-
-
- def setup(self):
- self.multiDL = self.resumeDownload = self.premium
- self.chunkLimit = 1 # critical problems with more chunks
-
- self.fileID = getID(self.pyfile.url)
- self.pyfile.url = "http://uploaded.net/file/%s" % self.fileID
-
- def process(self, pyfile):
- self.load("http://uploaded.net/language/en", just_header=True)
-
- api = getAPIData([pyfile.url])
-
- # TODO: fallback to parse from site, because api sometimes delivers wrong status codes
-
- if not api:
- self.logWarning("No response for API call")
-
- self.html = unicode(self.load(pyfile.url, decode=False), 'iso-8859-1')
- name, size, status, self.fileID = parseFileInfo(self)
- self.logDebug(name, size, status, self.fileID)
- if status == 1:
- self.offline()
- elif status == 2:
- pyfile.name, pyfile.size = name, size
- else:
- self.fail('Parse error - file info')
- elif api == 'Access denied':
- self.fail(_("API key invalid"))
-
- else:
- if self.fileID not in api:
- self.offline()
-
- self.data = api[self.fileID]
- if self.data[0] != "online":
- self.offline()
-
- pyfile.name = html_unescape(self.data[2])
-
- # pyfile.name = self.get_file_name()
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- def handlePremium(self):
- info = self.account.getAccountInfo(self.user, True)
- self.logDebug("%(name)s: Use Premium Account (%(left)sGB left)" % {"name": self.__name__,
- "left": info['trafficleft'] / 1024 / 1024})
- if int(self.data[1]) / 1024 > info['trafficleft']:
- self.logInfo(_("%s: Not enough traffic left" % self.__name__))
- self.account.empty(self.user)
- self.resetAccount()
- self.fail(_("Traffic exceeded"))
-
- header = self.load("http://uploaded.net/file/%s" % self.fileID, just_header=True)
- if "location" in header:
- #Direct download
- print "Direct Download: " + header['location']
- self.download(header['location'])
- else:
- #Indirect download
- self.html = self.load("http://uploaded.net/file/%s" % self.fileID)
- m = re.search(r'<div class="tfree".*\s*<form method="post" action="(.*?)"', self.html)
- if m is None:
- self.fail("Download URL not m. Try to enable direct downloads.")
- url = m.group(1)
- print "Premium URL: " + url
- self.download(url, post={})
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, decode=True)
-
- if 'var free_enabled = false;' in self.html:
- self.logError("Free-download capacities exhausted.")
- self.retry(max_tries=24, wait_time=5 * 60)
-
- m = re.search(r"Current waiting period: <span>(\d+)</span> seconds", self.html)
- if m is None:
- self.fail("File not downloadable for free users")
- self.setWait(int(m.group(1)))
-
- js = self.load("http://uploaded.net/js/download.js", decode=True)
-
- challengeId = re.search(r'Recaptcha\.create\("([^"]+)', js)
-
- url = "http://uploaded.net/io/ticket/captcha/%s" % self.fileID
- downloadURL = ""
-
- for _ in xrange(5):
- re_captcha = ReCaptcha(self)
- challenge, result = re_captcha.challenge(challengeId.group(1))
- options = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": result}
- self.wait()
-
- result = self.load(url, post=options)
- self.logDebug("result: %s" % result)
-
- if "limit-size" in result:
- self.fail("File too big for free download")
- elif "limit-slot" in result: # Temporary restriction so just wait a bit
- self.setWait(30 * 60, True)
- self.wait()
- self.retry()
- elif "limit-parallel" in result:
- self.fail("Cannot download in parallel")
- elif self.DL_LIMIT_PATTERN in result: # limit-dl
- self.setWait(3 * 60 * 60, True)
- self.wait()
- self.retry()
- elif '"err":"captcha"' in result:
- self.logError("ul.net captcha is disabled")
- self.invalidCaptcha()
- elif "type:'download'" in result:
- self.correctCaptcha()
- downloadURL = re.search("url:'([^']+)", result).group(1)
- break
- else:
- self.fail("Unknown error '%s'" % result)
-
- if not downloadURL:
- self.fail("No Download url retrieved/all captcha attempts failed")
-
- self.download(downloadURL, disposition=True)
- check = self.checkDownload({"limit-dl": self.DL_LIMIT_PATTERN})
- if check == "limit-dl":
- self.setWait(3 * 60 * 60, True)
- self.wait()
- self.retry()
diff --git a/module/plugins/hoster/UploadheroCom.py b/module/plugins/hoster/UploadheroCom.py
deleted file mode 100644
index e34701ed7..000000000
--- a/module/plugins/hoster/UploadheroCom.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://uploadhero.co/dl/wQBRAVSM
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class UploadheroCom(SimpleHoster):
- __name__ = "UploadheroCom"
- __type__ = "hoster"
- __version__ = "0.15"
-
- __pattern__ = r'http://(?:www\.)?uploadhero\.com?/dl/\w+'
-
- __description__ = """UploadHero.co plugin"""
- __author_name__ = ("mcmyst", "zoidberg")
- __author_mail__ = ("mcmyst@hotmail.fr", "zoidberg@mujmail.cz")
-
- FILE_NAME_PATTERN = r'<div class="nom_de_fichier">(?P<N>.*?)</div>'
- FILE_SIZE_PATTERN = r'Taille du fichier : </span><strong>(?P<S>.*?)</strong>'
- OFFLINE_PATTERN = r'<p class="titre_dl_2">|<div class="raison"><strong>Le lien du fichier ci-dessus n\'existe plus.'
-
- SH_COOKIES = [(".uploadhero.co", "lang", "en")]
-
- IP_BLOCKED_PATTERN = r'href="(/lightbox_block_download.php\?min=.*?)"'
- IP_WAIT_PATTERN = r'<span id="minutes">(\d+)</span>.*\s*<span id="seconds">(\d+)</span>'
-
- CAPTCHA_PATTERN = r'"(/captchadl\.php\?[a-z0-9]+)"'
- FREE_URL_PATTERN = r'var magicomfg = \'<a href="(http://[^<>"]*?)"|"(http://storage\d+\.uploadhero\.co/\?d=[A-Za-z0-9]+/[^<>"/]+)"'
- PREMIUM_URL_PATTERN = r'<a href="([^"]+)" id="downloadnow"'
-
-
- def handleFree(self):
- self.checkErrors()
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m is None:
- self.parseError("Captcha URL")
- captcha_url = "http://uploadhero.co" + m.group(1)
-
- for _ in xrange(5):
- captcha = self.decryptCaptcha(captcha_url)
- self.html = self.load(self.pyfile.url, get={"code": captcha})
- m = re.search(self.FREE_URL_PATTERN, self.html)
- if m:
- self.correctCaptcha()
- download_url = m.group(1) or m.group(2)
- break
- else:
- self.invalidCaptcha()
- else:
- self.fail("No valid captcha code entered")
-
- self.download(download_url)
-
- def handlePremium(self):
- self.logDebug("%s: Use Premium Account" % self.__name__)
- self.html = self.load(self.pyfile.url)
- link = re.search(self.PREMIUM_URL_PATTERN, self.html).group(1)
- self.logDebug("Downloading link : '%s'" % link)
- self.download(link)
-
- def checkErrors(self):
- m = re.search(self.IP_BLOCKED_PATTERN, self.html)
- if m:
- self.html = self.load("http://uploadhero.co%s" % m.group(1))
-
- m = re.search(self.IP_WAIT_PATTERN, self.html)
- wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60
- self.wait(wait_time, True)
- self.retry()
-
-
-getInfo = create_getInfo(UploadheroCom)
diff --git a/module/plugins/hoster/UploadingCom.py b/module/plugins/hoster/UploadingCom.py
deleted file mode 100644
index 45ab1d4cd..000000000
--- a/module/plugins/hoster/UploadingCom.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import HTTPHEADER
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
-
-
-class UploadingCom(SimpleHoster):
- __name__ = "UploadingCom"
- __type__ = "hoster"
- __version__ = "0.36"
-
- __pattern__ = r'http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)'
-
- __description__ = """Uploading.com hoster plugin"""
- __author_name__ = ("jeix", "mkaay", "zoidberg")
- __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
-
- FILE_NAME_PATTERN = r'id="file_title">(?P<N>.+)</'
- FILE_SIZE_PATTERN = r'size tip_container">(?P<S>[\d.]+) (?P<U>\w+)<'
- OFFLINE_PATTERN = r'(Page|file) not found'
-
-
- def process(self, pyfile):
- # set lang to english
- self.req.cj.setCookie(".uploading.com", "lang", "1")
- self.req.cj.setCookie(".uploading.com", "language", "1")
- self.req.cj.setCookie(".uploading.com", "setlang", "en")
- self.req.cj.setCookie(".uploading.com", "_lang", "en")
-
- if not "/get/" in pyfile.url:
- pyfile.url = pyfile.url.replace("/files", "/files/get")
-
- self.html = self.load(pyfile.url, decode=True)
- self.file_info = self.getFileInfo()
-
- if self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- def handlePremium(self):
- postData = {'action': 'get_link',
- 'code': self.file_info['ID'],
- 'pass': 'undefined'}
-
- self.html = self.load('http://uploading.com/files/get/?JsHttpRequest=%d-xml' % timestamp(), post=postData)
- url = re.search(r'"link"\s*:\s*"(.*?)"', self.html)
- if url:
- url = url.group(1).replace("\\/", "/")
- self.download(url)
-
- raise Exception("Plugin defect.")
-
- def handleFree(self):
- m = re.search('<h2>((Daily )?Download Limit)</h2>', self.html)
- if m:
- self.pyfile.error = m.group(1)
- self.logWarning(self.pyfile.error)
- self.retry(max_tries=6, wait_time=6 * 60 * 60 if m.group(2) else 15 * 60, reason=self.pyfile.error)
-
- ajax_url = "http://uploading.com/files/get/?ajax"
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
- self.req.http.lastURL = self.pyfile.url
-
- response = json_loads(self.load(ajax_url, post={'action': 'second_page', 'code': self.file_info['ID']}))
- if 'answer' in response and 'wait_time' in response['answer']:
- wait_time = int(response['answer']['wait_time'])
- self.logInfo("%s: Waiting %d seconds." % (self.__name__, wait_time))
- self.wait(wait_time)
- else:
- self.parseError("AJAX/WAIT")
-
- response = json_loads(
- self.load(ajax_url, post={'action': 'get_link', 'code': self.file_info['ID'], 'pass': 'false'}))
- if 'answer' in response and 'link' in response['answer']:
- url = response['answer']['link']
- else:
- self.parseError("AJAX/URL")
-
- self.html = self.load(url)
- m = re.search(r'<form id="file_form" action="(.*?)"', self.html)
- if m:
- url = m.group(1)
- else:
- self.parseError("URL")
-
- self.download(url)
-
- check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")})
- if check == "html":
- self.logWarning("Redirected to a HTML page, wait 10 minutes and retry")
- self.wait(10 * 60, True)
-
-
-getInfo = create_getInfo(UploadingCom)
diff --git a/module/plugins/hoster/UpstoreNet.py b/module/plugins/hoster/UpstoreNet.py
deleted file mode 100644
index 140024731..000000000
--- a/module/plugins/hoster/UpstoreNet.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class UpstoreNet(SimpleHoster):
- __name__ = "UpstoreNet"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:www\.)?upstore\.net/'
-
- __description__ = """Upstore.Net File Download Hoster"""
- __author_name__ = "igel"
- __author_mail__ = "igelkun@myopera.com"
-
- FILE_INFO_PATTERN = r'<div class="comment">.*?</div>\s*\n<h2 style="margin:0">(?P<N>.*?)</h2>\s*\n<div class="comment">\s*\n\s*(?P<S>[\d.]+) (?P<U>\w+)'
- OFFLINE_PATTERN = r'<span class="error">File not found</span>'
-
- WAIT_PATTERN = r'var sec = (\d+)'
- CHASH_PATTERN = r'<input type="hidden" name="hash" value="([^"]*)">'
- LINK_PATTERN = r'<a href="(https?://.*?)" target="_blank"><b>'
-
-
- def handleFree(self):
- # STAGE 1: get link to continue
- m = re.search(self.CHASH_PATTERN, self.html)
- if m is None:
- self.parseError("could not detect hash")
- chash = m.group(1)
- self.logDebug("read hash " + chash)
- # continue to stage2
- post_data = {'hash': chash, 'free': 'Slow download'}
- self.html = self.load(self.pyfile.url, post=post_data, decode=True)
-
- # STAGE 2: solv captcha and wait
- # first get the infos we need: recaptcha key and wait time
- recaptcha = ReCaptcha(self)
- if not recaptcha.detect_key(self.html):
- self.parseError("could not find recaptcha pattern")
- self.logDebug("using captcha key " + recaptcha.recaptcha_key)
- # try the captcha 5 times
- for i in xrange(5):
- m = re.search(self.WAIT_PATTERN, self.html)
- if m is None:
- self.parseError("could not find wait pattern")
- wait_time = m.group(1)
-
- # then, do the waiting
- self.wait(wait_time)
-
- # then, handle the captcha
- challenge, code = recaptcha.challenge()
- post_data['recaptcha_challenge_field'] = challenge
- post_data['recaptcha_response_field'] = code
-
- self.html = self.load(self.pyfile.url, post=post_data, decode=True)
-
- # STAGE 3: get direct link
- m = re.search(self.LINK_PATTERN, self.html, re.DOTALL)
- if m:
- break
-
- if m is None:
- self.parseError("could not detect direct link")
-
- direct = m.group(1)
- self.logDebug('found direct link: ' + direct)
- self.download(direct, disposition=True)
-
-
-getInfo = create_getInfo(UpstoreNet)
diff --git a/module/plugins/hoster/UptoboxCom.py b/module/plugins/hoster/UptoboxCom.py
deleted file mode 100644
index 6d86c5559..000000000
--- a/module/plugins/hoster/UptoboxCom.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-from module.plugins.internal.CaptchaService import ReCaptcha, SolveMedia
-from module.utils import html_unescape
-
-
-class UptoboxCom(XFileSharingPro):
- __name__ = "UptoboxCom"
- __type__ = "hoster"
- __version__ = "0.09"
-
- __pattern__ = r'https?://(?:www\.)?uptobox\.com/\w+'
-
- __description__ = """Uptobox.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- HOSTER_NAME = "uptobox.com"
-
- FILE_INFO_PATTERN = r'"para_title">(?P<N>.+) \((?P<S>[\d\.]+) (?P<U>\w+)\)'
- OFFLINE_PATTERN = r'>(File not found|Access Denied|404 Not Found)'
- TEMP_OFFLINE_PATTERN = r'>This server is in maintenance mode'
-
- WAIT_PATTERN = r'>(\d+)</span> seconds<'
-
- LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"'
-
-
- def handleCaptcha(self, inputs):
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- captcha = SolveMedia(self)
- inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key)
- return 4
- else:
- m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
- if m:
- captcha_url = m.group(1)
- inputs['code'] = self.decryptCaptcha(captcha_url)
- return 2
- else:
- m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL)
- if m:
- captcha_div = m.group(1)
- self.logDebug(captcha_div)
- numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>',
- html_unescape(captcha_div))
- inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
- self.logDebug("CAPTCHA", inputs['code'], numerals)
- return 3
- else:
- m = re.search(self.RECAPTCHA_URL_PATTERN, self.html)
- if m:
- recaptcha_key = unquote(m.group(1))
- self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key)
- recaptcha = ReCaptcha(self)
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(
- recaptcha_key)
- return 1
- return 0
-
-
-getInfo = create_getInfo(UptoboxCom)
diff --git a/module/plugins/hoster/VeehdCom.py b/module/plugins/hoster/VeehdCom.py
deleted file mode 100644
index 66c258439..000000000
--- a/module/plugins/hoster/VeehdCom.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class VeehdCom(Hoster):
- __name__ = "VeehdCom"
- __type__ = "hoster"
- __version__ = "0.23"
-
- __pattern__ = r'http://veehd\.com/video/\d+_\S+'
- __config__ = [("filename_spaces", "bool", "Allow spaces in filename", False),
- ("replacement_char", "str", "Filename replacement character", "_")]
-
- __description__ = """Veehd.com hoster plugin"""
- __author_name__ = "cat"
- __author_mail__ = "cat@pyload"
-
-
- def _debug(self, msg):
- self.logDebug('[%s] %s' % (self.__name__, msg))
-
- def setup(self):
- self.multiDL = True
- self.req.canContinue = True
-
- def process(self, pyfile):
- self.download_html()
- if not self.file_exists():
- self.offline()
-
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- def download_html(self):
- url = self.pyfile.url
- self._debug("Requesting page: %s" % (repr(url),))
- self.html = self.load(url)
-
- def file_exists(self):
- if not self.html:
- self.download_html()
-
- if '<title>Veehd</title>' in self.html:
- return False
- return True
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- m = re.search(r'<title[^>]*>([^<]+) on Veehd</title>', self.html)
- if m is None:
- self.fail("video title not found")
-
- name = m.group(1)
-
- # replace unwanted characters in filename
- if self.getConfig('filename_spaces'):
- pattern = '[^0-9A-Za-z\.\ ]+'
- else:
- pattern = '[^0-9A-Za-z\.]+'
-
- return re.sub(pattern, self.getConfig('replacement_char'), name) + '.avi'
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- m = re.search(r'<embed type="video/divx" src="(http://([^/]*\.)?veehd\.com/dl/[^"]+)"',
- self.html)
- if m is None:
- self.fail("embedded video url not found")
-
- return m.group(1)
diff --git a/module/plugins/hoster/VeohCom.py b/module/plugins/hoster/VeohCom.py
deleted file mode 100644
index fcd5e90a4..000000000
--- a/module/plugins/hoster/VeohCom.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class VeohCom(SimpleHoster):
- __name__ = "VeohCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?veoh\.com/(tv/)?(watch|videos)/(?P<ID>v\w+)'
- __config__ = [("quality", "Low;High;Auto", "Quality", "Auto")]
-
- __description__ = """Veoh.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.*?)"'
- OFFLINE_PATTERN = r'>Sorry, we couldn\'t find the video you were looking for'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.veoh.com/watch/\g<ID>')]
-
- SH_COOKIES = [(".veoh.com", "lassieLocale", "en")]
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = -1
-
- def handleFree(self):
- quality = self.getConfig("quality")
- if quality == "Auto":
- quality = ("High", "Low")
- for q in quality:
- pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q
- m = re.search(pattern, self.html)
- if m:
- self.pyfile.name += ".mp4"
- link = m.group(1).replace("\\", "")
- self.logDebug("Download link: " + link)
- self.download(link)
- return
- else:
- self.logInfo("No %s quality video found" % q.upper())
- else:
- self.fail("No video found!")
-
-
-getInfo = create_getInfo(VeohCom)
diff --git a/module/plugins/hoster/VidPlayNet.py b/module/plugins/hoster/VidPlayNet.py
deleted file mode 100644
index eb7a13e4c..000000000
--- a/module/plugins/hoster/VidPlayNet.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0
-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
-
-
-class VidPlayNet(XFileSharingPro):
- __name__ = "VidPlayNet"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'https?://(?:www\.)?vidplay\.net/\w{12}'
-
- __description__ = """VidPlay.net hoster plugin"""
- __author_name__ = "t4skforce"
- __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
-
- HOSTER_NAME = "vidplay.net"
-
- OFFLINE_PATTERN = r'<b>File Not Found</b><br>\s*<br>'
- FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h[1-6]>(?P<N>[^<]+)</h[1-6]>'
- LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<&]+)' % HOSTER_NAME
-
-
-getInfo = create_getInfo(VidPlayNet)
diff --git a/module/plugins/hoster/VimeoCom.py b/module/plugins/hoster/VimeoCom.py
deleted file mode 100644
index 145d9053f..000000000
--- a/module/plugins/hoster/VimeoCom.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class VimeoCom(SimpleHoster):
- __name__ = "VimeoCom"
- __type__ = "hoster"
- __version__ = "0.02"
-
- __pattern__ = r'https?://(?:www\.)?(player\.)?vimeo\.com/(video/)?(?P<ID>\d+)'
- __config__ = [("quality", "Lowest;Mobile;SD;HD;Highest", "Quality", "Highest"),
- ("original", "bool", "Try to download the original file first", True)]
-
- __description__ = """Vimeo.com hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
- FILE_NAME_PATTERN = r'<title>(?P<N>.+) on Vimeo<'
- OFFLINE_PATTERN = r'class="exception_header"'
- TEMP_OFFLINE_PATTERN = r'Please try again in a few minutes.<'
-
- FILE_URL_REPLACEMENTS = [(__pattern__, r'https://www.vimeo.com/\g<ID>')]
-
- SH_COOKIES = [(".vimeo.com", "language", "en")]
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = -1
-
- def handleFree(self):
- password = self.getPassword()
-
- if self.js and 'class="btn iconify_down_b"' in self.html:
- html = self.js.eval(self.load(self.pyfile.url, get={'action': "download", 'password': password}, decode=True))
- pattern = r'href="(?P<URL>http://vimeo\.com.+?)".*?\>(?P<QL>.+?) '
- else:
- id = re.match(self.__pattern__, self.pyfile.url).group("ID")
- html = self.load("https://player.vimeo.com/video/" + id, get={'password': password})
- pattern = r'"(?P<QL>\w+)":{"profile".*?"(?P<URL>http://pdl\.vimeocdn\.com.+?)"'
-
- link = dict([(l.group('QL').lower(), l.group('URL')) for l in re.finditer(pattern, html)])
-
- if self.getConfig("original"):
- if "original" in link:
- self.download(link[q])
- return
- else:
- self.logInfo("Original file not downloadable")
-
- quality = self.getConfig("quality")
- if quality == "Highest":
- qlevel = ("hd", "sd", "mobile")
- elif quality == "Lowest":
- qlevel = ("mobile", "sd", "hd")
- else:
- qlevel = quality.lower()
-
- for q in qlevel:
- if q in link:
- self.download(link[q])
- return
- else:
- self.logInfo("No %s quality video found" % q.upper())
- else:
- self.fail("No video found!")
-
-
-getInfo = create_getInfo(VimeoCom)
diff --git a/module/plugins/hoster/Vipleech4uCom.py b/module/plugins/hoster/Vipleech4uCom.py
deleted file mode 100644
index da7131d39..000000000
--- a/module/plugins/hoster/Vipleech4uCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class Vipleech4uCom(DeadHoster):
- __name__ = "Vipleech4uCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?vipleech4u\.com/manager\.php'
-
- __description__ = """Vipleech4u.com hoster plugin"""
- __author_name__ = "Kagenoshin"
- __author_mail__ = "kagenoshin@gmx.ch"
-
-
-getInfo = create_getInfo(Vipleech4uCom)
diff --git a/module/plugins/hoster/WarserverCz.py b/module/plugins/hoster/WarserverCz.py
deleted file mode 100644
index 8a565d777..000000000
--- a/module/plugins/hoster/WarserverCz.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class WarserverCz(DeadHoster):
- __name__ = "WarserverCz"
- __type__ = "hoster"
- __version__ = "0.13"
-
- __pattern__ = r'http://(?:www\.)?warserver\.cz/stahnout/\d+'
-
- __description__ = """Warserver.cz hoster plugin"""
- __author_name__ = "Walter Purcaro"
- __author_mail__ = "vuolter@gmail.com"
-
-
-getInfo = create_getInfo(WarserverCz)
diff --git a/module/plugins/hoster/WebshareCz.py b/module/plugins/hoster/WebshareCz.py
deleted file mode 100644
index a3918d5c4..000000000
--- a/module/plugins/hoster/WebshareCz.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.network.RequestFactory import getRequest
-from module.plugins.internal.SimpleHoster import SimpleHoster
-
-
-def getInfo(urls):
- h = getRequest()
- for url in urls:
- h.load(url)
- fid = re.search(WebshareCz.__pattern__, url).group('ID')
- api_data = h.load('https://webshare.cz/api/file_info/', post={'ident': fid})
- if 'File not found' in api_data:
- file_info = (url, 0, 1, url)
- else:
- name = re.search('<name>(.+)</name>', api_data).group(1)
- size = re.search('<size>(.+)</size>', api_data).group(1)
- file_info = (name, size, 2, url)
- yield file_info
-
-
-class WebshareCz(SimpleHoster):
- __name__ = "WebshareCz"
- __type__ = "hoster"
- __version__ = "0.13"
-
- __pattern__ = r'https?://(?:www\.)?webshare.cz/(?:#/)?file/(?P<ID>\w+)'
-
- __description__ = """WebShare.cz hoster plugin"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def handleFree(self):
- api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid})
- self.logDebug("API data: " + api_data)
- m = re.search('<link>(.+)</link>', api_data)
- if m is None:
- self.parseError('Unable to detect direct link')
- direct = m.group(1)
- self.logDebug("Direct link: " + direct)
- self.download(direct, disposition=True)
-
- def getFileInfo(self):
- self.logDebug("URL: %s" % self.pyfile.url)
-
- self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID')
-
- self.load(self.pyfile.url)
- api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid})
-
- if 'File not found' in api_data:
- self.offline()
- else:
- self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1)
- self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1)
-
- self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size))
diff --git a/module/plugins/hoster/WrzucTo.py b/module/plugins/hoster/WrzucTo.py
deleted file mode 100644
index 3b26b1a02..000000000
--- a/module/plugins/hoster/WrzucTo.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import HTTPHEADER
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class WrzucTo(SimpleHoster):
- __name__ = "WrzucTo"
- __type__ = "hoster"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?wrzuc\.to/([a-zA-Z0-9]+(\.wt|\.html)|(\w+/?linki/[a-zA-Z0-9]+))'
-
- __description__ = """Wrzuc.to hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r'id="file_info">\s*<strong>(?P<N>.*?)</strong>'
- FILE_SIZE_PATTERN = r'class="info">\s*<tr>\s*<td>(?P<S>.*?)</td>'
-
- SH_COOKIES = [(".wrzuc.to", "language", "en")]
-
-
- def setup(self):
- self.multiDL = True
-
- def handleFree(self):
- data = dict(re.findall(r'(md5|file): "(.*?)"', self.html))
- if len(data) != 2:
- self.parseError('File ID')
-
- self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
- self.req.http.lastURL = self.pyfile.url
- self.load("http://www.wrzuc.to/ajax/server/prepair", post={"md5": data['md5']})
-
- self.req.http.lastURL = self.pyfile.url
- self.html = self.load("http://www.wrzuc.to/ajax/server/download_link", post={"file": data['file']})
-
- data.update(re.findall(r'"(download_link|server_id)":"(.*?)"', self.html))
- if len(data) != 4:
- self.parseError('Download URL')
-
- download_url = "http://%s.wrzuc.to/pobierz/%s" % (data['server_id'], data['download_link'])
- self.logDebug("Download URL: %s" % download_url)
- self.download(download_url)
-
-
-getInfo = create_getInfo(WrzucTo)
diff --git a/module/plugins/hoster/WuploadCom.py b/module/plugins/hoster/WuploadCom.py
deleted file mode 100644
index b06318d42..000000000
--- a/module/plugins/hoster/WuploadCom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class WuploadCom(DeadHoster):
- __name__ = "WuploadCom"
- __type__ = "hoster"
- __version__ = "0.23"
-
- __pattern__ = r'http://(?:www\.)?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?'
-
- __description__ = """Wupload.com hoster plugin"""
- __author_name__ = ("jeix", "Paul King")
- __author_mail__ = ("jeix@hasnomail.de", "")
-
-
-getInfo = create_getInfo(WuploadCom)
diff --git a/module/plugins/hoster/X7To.py b/module/plugins/hoster/X7To.py
deleted file mode 100644
index cbd4b8b8e..000000000
--- a/module/plugins/hoster/X7To.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-
-
-class X7To(DeadHoster):
- __name__ = "X7To"
- __type__ = "hoster"
- __version__ = "0.41"
-
- __pattern__ = r'http://(?:www\.)?x7.to/'
-
- __description__ = """X7.to hoster plugin"""
- __author_name__ = "ernieb"
- __author_mail__ = "ernieb"
-
-
-getInfo = create_getInfo(X7To)
diff --git a/module/plugins/hoster/XFileSharingPro.py b/module/plugins/hoster/XFileSharingPro.py
deleted file mode 100644
index 25492fb49..000000000
--- a/module/plugins/hoster/XFileSharingPro.py
+++ /dev/null
@@ -1,324 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from pycurl import FOLLOWLOCATION, LOW_SPEED_TIME
-from random import random
-from urllib import unquote
-from urlparse import urlparse
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.CaptchaService import ReCaptcha, SolveMedia
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, PluginParseError, replace_patterns
-from module.utils import html_unescape
-
-
-class XFileSharingPro(SimpleHoster):
- """
- Common base for XFileSharingPro hosters like EasybytezCom, CramitIn, FiledinoCom...
- Some hosters may work straight away when added to __pattern__
- However, most of them will NOT work because they are either down or running a customized version
- """
- __name__ = "XFileSharingPro"
- __type__ = "hoster"
- __version__ = "0.32"
-
- __pattern__ = r'^unmatchable$'
-
- __description__ = """XFileSharingPro base hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- FILE_INFO_PATTERN = r'<tr><td align=right><b>Filename:</b></td><td nowrap>(?P<N>[^<]+)</td></tr>\s*.*?<small>\((?P<S>[^<]+)\)</small>'
- FILE_NAME_PATTERN = r'<input type="hidden" name="fname" value="(?P<N>[^"]+)"'
- FILE_SIZE_PATTERN = r'You have requested .*\((?P<S>[\d\.\,]+) ?(?P<U>\w+)?\)</font>'
- OFFLINE_PATTERN = r'>\w+ (Not Found|file (was|has been) removed)'
-
- WAIT_PATTERN = r'<span id="countdown_str">.*?>(\d+)</span>'
-
- OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)'
-
- CAPTCHA_URL_PATTERN = r'(http://[^"\']+?/captchas?/[^"\']+)'
- RECAPTCHA_URL_PATTERN = r'http://[^"\']+?recaptcha[^"\']+?\?k=([^"\']+)"'
- CAPTCHA_DIV_PATTERN = r'>Enter code.*?<div.*?>(.*?)</div>'
- SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"'
-
- ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</'
-
-
- def setup(self):
- if self.__name__ == "XFileSharingPro":
- self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern']
- self.multiDL = True
- else:
- self.resumeDownload = self.multiDL = self.premium
-
- self.chunkLimit = 1
-
- def process(self, pyfile):
- self.prepare()
-
- pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
-
- if not re.match(self.__pattern__, pyfile.url):
- if self.premium:
- self.handleOverriden()
- else:
- self.fail("Only premium users can download from other hosters with %s" % self.HOSTER_NAME)
- else:
- try:
- # Due to a 0.4.9 core bug self.load would use cookies even if
- # cookies=False. Workaround using getURL to avoid cookies.
- # Can be reverted in 0.5 as the cookies bug has been fixed.
- self.html = getURL(pyfile.url, decode=True)
- self.file_info = self.getFileInfo()
- except PluginParseError:
- self.file_info = None
-
- self.location = self.getDirectDownloadLink()
-
- if not self.file_info:
- pyfile.name = html_unescape(unquote(urlparse(
- self.location if self.location else pyfile.url).path.split("/")[-1]))
-
- if self.location:
- self.startDownload(self.location)
- elif self.premium:
- self.handlePremium()
- else:
- self.handleFree()
-
- def prepare(self):
- """ Initialize important variables """
- if not hasattr(self, "HOSTER_NAME"):
- self.HOSTER_NAME = re.match(self.__pattern__, self.pyfile.url).group(1)
- if not hasattr(self, "LINK_PATTERN"):
- self.LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+)' % self.HOSTER_NAME
-
- self.captcha = self.errmsg = None
- self.passwords = self.getPassword().splitlines()
-
- def getDirectDownloadLink(self):
- """ Get download link for premium users with direct download enabled """
- self.req.http.lastURL = self.pyfile.url
-
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.html = self.load(self.pyfile.url, cookies=True, decode=True)
- self.header = self.req.http.header
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
-
- location = None
- m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
- if m and re.match(self.LINK_PATTERN, m.group(1)):
- location = m.group(1).strip()
-
- return location
-
- def handleFree(self):
- url = self.getDownloadLink()
- self.logDebug("Download URL: %s" % url)
- self.startDownload(url)
-
- def getDownloadLink(self):
- for i in xrange(5):
- self.logDebug("Getting download link: #%d" % i)
- data = self.getPostParameters()
-
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
- self.header = self.req.http.header
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
-
- m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
- if m:
- break
-
- m = re.search(self.LINK_PATTERN, self.html, re.S)
- if m:
- break
-
- else:
- if self.errmsg and 'captcha' in self.errmsg:
- self.fail("No valid captcha code entered")
- else:
- self.fail("Download link not found")
-
- return m.group(1)
-
- def handlePremium(self):
- self.html = self.load(self.pyfile.url, post=self.getPostParameters())
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError('DIRECT LINK')
- self.startDownload(m.group(1))
-
- def handleOverriden(self):
- #only tested with easybytez.com
- self.html = self.load("http://www.%s/" % self.HOSTER_NAME)
- action, inputs = self.parseHtmlForm('')
- upload_id = "%012d" % int(random() * 10 ** 12)
- action += upload_id + "&js_on=1&utype=prem&upload_type=url"
- inputs['tos'] = '1'
- inputs['url_mass'] = self.pyfile.url
- inputs['up1oad_type'] = 'url'
-
- self.logDebug(self.HOSTER_NAME, action, inputs)
- #wait for file to upload to easybytez.com
- self.req.http.c.setopt(LOW_SPEED_TIME, 600)
- self.html = self.load(action, post=inputs)
-
- action, inputs = self.parseHtmlForm('F1')
- if not inputs:
- self.parseError('TEXTAREA')
- self.logDebug(self.HOSTER_NAME, inputs)
- if inputs['st'] == 'OK':
- self.html = self.load(action, post=inputs)
- elif inputs['st'] == 'Can not leech file':
- self.retry(max_tries=20, wait_time=3 * 60, reason=inputs['st'])
- else:
- self.fail(inputs['st'])
-
- #get easybytez.com link for uploaded file
- m = re.search(self.OVR_LINK_PATTERN, self.html)
- if m is None:
- self.parseError('DIRECT LINK (OVR)')
- self.pyfile.url = m.group(1)
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header: # Direct link
- self.startDownload(self.pyfile.url)
- else:
- self.retry()
-
- def startDownload(self, link):
- link = link.strip()
- if self.captcha:
- self.correctCaptcha()
- self.logDebug('DIRECT LINK: %s' % link)
- self.download(link, disposition=True)
-
- def checkErrors(self):
- m = re.search(self.ERROR_PATTERN, self.html)
- if m:
- self.errmsg = m.group(1)
- self.logWarning(re.sub(r"<.*?>", " ", self.errmsg))
-
- if 'wait' in self.errmsg:
- wait_time = sum([int(v) * {"hour": 3600, "minute": 60, "second": 1}[u] for v, u in
- re.findall(r'(\d+)\s*(hour|minute|second)', self.errmsg)])
- self.wait(wait_time, True)
- elif 'captcha' in self.errmsg:
- self.invalidCaptcha()
- elif 'premium' in self.errmsg and 'require' in self.errmsg:
- self.fail("File can be downloaded by premium users only")
- elif 'limit' in self.errmsg:
- self.wait(1 * 60 * 60, True)
- self.retry(25)
- elif 'countdown' in self.errmsg or 'Expired' in self.errmsg:
- self.retry()
- elif 'maintenance' in self.errmsg:
- self.tempOffline()
- elif 'download files up to' in self.errmsg:
- self.fail("File too large for free download")
- else:
- self.fail(self.errmsg)
-
- else:
- self.errmsg = None
-
- return self.errmsg
-
- def getPostParameters(self):
- for _ in xrange(3):
- if not self.errmsg:
- self.checkErrors()
-
- if hasattr(self, "FORM_PATTERN"):
- action, inputs = self.parseHtmlForm(self.FORM_PATTERN)
- else:
- action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
-
- if not inputs:
- action, inputs = self.parseHtmlForm('F1')
- if not inputs:
- if self.errmsg:
- self.retry()
- else:
- self.parseError("Form not found")
-
- self.logDebug(self.HOSTER_NAME, inputs)
-
- if 'op' in inputs and inputs['op'] in ("download2", "download3"):
- if "password" in inputs:
- if self.passwords:
- inputs['password'] = self.passwords.pop(0)
- else:
- self.fail("No or invalid passport")
-
- if not self.premium:
- m = re.search(self.WAIT_PATTERN, self.html)
- if m:
- wait_time = int(m.group(1)) + 1
- self.setWait(wait_time, False)
- else:
- wait_time = 0
-
- self.captcha = self.handleCaptcha(inputs)
-
- if wait_time:
- self.wait()
-
- self.errmsg = None
- return inputs
-
- else:
- inputs['referer'] = self.pyfile.url
-
- if self.premium:
- inputs['method_premium'] = "Premium Download"
- if 'method_free' in inputs:
- del inputs['method_free']
- else:
- inputs['method_free'] = "Free Download"
- if 'method_premium' in inputs:
- del inputs['method_premium']
-
- self.html = self.load(self.pyfile.url, post=inputs, ref=True)
- self.errmsg = None
-
- else:
- self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN'))
-
- def handleCaptcha(self, inputs):
- m = re.search(self.RECAPTCHA_URL_PATTERN, self.html)
- if m:
- recaptcha_key = unquote(m.group(1))
- self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key)
- recaptcha = ReCaptcha(self)
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key)
- return 1
- else:
- m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
- if m:
- captcha_url = m.group(1)
- inputs['code'] = self.decryptCaptcha(captcha_url)
- return 2
- else:
- m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL)
- if m:
- captcha_div = m.group(1)
- self.logDebug(captcha_div)
- numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div))
- inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
- self.logDebug("CAPTCHA", inputs['code'], numerals)
- return 3
- else:
- m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
- if m:
- captcha_key = m.group(1)
- captcha = SolveMedia(self)
- inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key)
- return 4
- return 0
-
-
-getInfo = create_getInfo(XFileSharingPro)
diff --git a/module/plugins/hoster/XHamsterCom.py b/module/plugins/hoster/XHamsterCom.py
deleted file mode 100644
index 3e002a0bb..000000000
--- a/module/plugins/hoster/XHamsterCom.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.common.json_layer import json_loads
-from module.plugins.Hoster import Hoster
-
-
-def clean_json(json_expr):
- json_expr = re.sub('[\n\r]', '', json_expr)
- json_expr = re.sub(' +', '', json_expr)
- json_expr = re.sub('\'', '"', json_expr)
-
- return json_expr
-
-
-class XHamsterCom(Hoster):
- __name__ = "XHamsterCom"
- __type__ = "hoster"
- __version__ = "0.12"
-
- __pattern__ = r'http://(?:www\.)?xhamster\.com/movies/.+'
- __config__ = [("type", ".mp4;.flv", "Preferred type", ".mp4")]
-
- __description__ = """XHamster.com hoster plugin"""
- __author_name__ = None
- __author_mail__ = None
-
-
- def process(self, pyfile):
- self.pyfile = pyfile
-
- if not self.file_exists():
- self.offline()
-
- if self.getConfig("type"):
- self.desired_fmt = self.getConfig("type")
-
- pyfile.name = self.get_file_name() + self.desired_fmt
- self.download(self.get_file_url())
-
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- flashvar_pattern = re.compile('flashvars = ({.*?});', re.DOTALL)
- json_flashvar = flashvar_pattern.search(self.html)
-
- if not json_flashvar:
- self.fail("Parse error (flashvars)")
-
- j = clean_json(json_flashvar.group(1))
- flashvars = json_loads(j)
-
- if flashvars['srv']:
- srv_url = flashvars['srv'] + '/'
- else:
- self.fail("Parse error (srv_url)")
-
- if flashvars['url_mode']:
- url_mode = flashvars['url_mode']
- else:
- self.fail("Parse error (url_mode)")
-
- if self.desired_fmt == ".mp4":
- file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html)
- if file_url is None:
- self.fail("Parse error (file_url)")
- file_url = file_url.group(1)
- long_url = srv_url + file_url
- self.logDebug("long_url: %s" % long_url)
- else:
- if flashvars['file']:
- file_url = unquote(flashvars['file'])
- else:
- self.fail("Parse error (file_url)")
-
- if url_mode == '3':
- long_url = file_url
- self.logDebug("long_url: %s" % long_url)
- else:
- long_url = srv_url + "key=" + file_url
- self.logDebug("long_url: %s" % long_url)
-
- return long_url
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- pattern = r"<title>(.*?) - xHamster\.com</title>"
- name = re.search(pattern, self.html)
- if name is None:
- pattern = r"<h1 >(.*)</h1>"
- name = re.search(pattern, self.html)
- if name is None:
- pattern = r"http://[www.]+xhamster\.com/movies/.*/(.*?)\.html?"
- name = re.match(file_name_pattern, self.pyfile.url)
- if name is None:
- pattern = r"<div id=\"element_str_id\" style=\"display:none;\">(.*)</div>"
- name = re.search(pattern, self.html)
- if name is None:
- return "Unknown"
-
- return name.group(1)
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
- if re.search(r"(.*Video not found.*)", self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/XVideosCom.py b/module/plugins/hoster/XVideosCom.py
deleted file mode 100644
index 4f2611740..000000000
--- a/module/plugins/hoster/XVideosCom.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.Hoster import Hoster
-
-
-class XVideosCom(Hoster):
- __name__ = "XVideos.com"
- __type__ = "hoster"
- __version__ = "0.1"
-
- __pattern__ = r'http://(?:www\.)?xvideos\.com/video([0-9]+)/.*'
-
- __description__ = """XVideos.com hoster plugin"""
- __author_name__ = None
- __author_mail__ = None
-
-
- def process(self, pyfile):
- site = self.load(pyfile.url)
- pyfile.name = "%s (%s).flv" % (
- re.search(r"<h2>([^<]+)<span", site).group(1),
- re.match(self.__pattern__, pyfile.url).group(1),
- )
- self.download(unquote(re.search(r"flv_url=([^&]+)&", site).group(1)))
diff --git a/module/plugins/hoster/Xdcc.py b/module/plugins/hoster/Xdcc.py
deleted file mode 100644
index d26f12a78..000000000
--- a/module/plugins/hoster/Xdcc.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import socket
-import struct
-import sys
-import time
-
-from os import makedirs
-from os.path import exists, join
-from select import select
-
-from module.plugins.Hoster import Hoster
-from module.utils import safe_join
-
-
-class Xdcc(Hoster):
- __name__ = "Xdcc"
- __type__ = "hoster"
- __version__ = "0.32"
-
- __config__ = [("nick", "str", "Nickname", "pyload"),
- ("ident", "str", "Ident", "pyloadident"),
- ("realname", "str", "Realname", "pyloadreal")]
-
- __description__ = """Download from IRC XDCC bot"""
- __author_name__ = "jeix"
- __author_mail__ = "jeix@hasnomail.com"
-
-
- def setup(self):
- self.debug = 0 # 0,1,2
- self.timeout = 30
- self.multiDL = False
-
- def process(self, pyfile):
- # change request type
- self.req = pyfile.m.core.requestFactory.getRequest(self.__name__, type="XDCC")
-
- self.pyfile = pyfile
- for _ in xrange(0, 3):
- try:
- nmn = self.doDownload(pyfile.url)
- self.logDebug("%s: Download of %s finished." % (self.__name__, nmn))
- return
- except socket.error, e:
- if hasattr(e, "errno"):
- errno = e.errno
- else:
- errno = e.args[0]
-
- if errno == 10054:
- self.logDebug("XDCC: Server blocked our ip, retry in 5 min")
- self.setWait(300)
- self.wait()
- continue
-
- self.fail("Failed due to socket errors. Code: %d" % errno)
-
- self.fail("Server blocked our ip, retry again later manually")
-
- def doDownload(self, url):
- self.pyfile.setStatus("waiting") # real link
-
- m = re.match(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url)
- server = m.group(1)
- chan = m.group(2)
- bot = m.group(3)
- pack = m.group(4)
- nick = self.getConfig('nick')
- ident = self.getConfig('ident')
- real = self.getConfig('realname')
-
- temp = server.split(':')
- ln = len(temp)
- if ln == 2:
- host, port = temp
- elif ln == 1:
- host, port = temp[0], 6667
- else:
- self.fail("Invalid hostname for IRC Server (%s)" % server)
-
- #######################
- # CONNECT TO IRC AND IDLE FOR REAL LINK
- dl_time = time.time()
-
- sock = socket.socket()
- sock.connect((host, int(port)))
- if nick == "pyload":
- nick = "pyload-%d" % (time.time() % 1000) # last 3 digits
- sock.send("NICK %s\r\n" % nick)
- sock.send("USER %s %s bla :%s\r\n" % (ident, host, real))
- time.sleep(3)
- sock.send("JOIN #%s\r\n" % chan)
- sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack))
-
- # IRC recv loop
- readbuffer = ""
- done = False
- retry = None
- m = None
- while True:
-
- # done is set if we got our real link
- if done:
- break
-
- if retry:
- if time.time() > retry:
- retry = None
- dl_time = time.time()
- sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack))
-
- else:
- if (dl_time + self.timeout) < time.time(): # todo: add in config
- sock.send("QUIT :byebye\r\n")
- sock.close()
- self.fail("XDCC Bot did not answer")
-
- fdset = select([sock], [], [], 0)
- if sock not in fdset[0]:
- continue
-
- readbuffer += sock.recv(1024)
- temp = readbuffer.split("\n")
- readbuffer = temp.pop()
-
- for line in temp:
- if self.debug is 2:
- print "*> " + unicode(line, errors='ignore')
- line = line.rstrip()
- first = line.split()
-
- if first[0] == "PING":
- sock.send("PONG %s\r\n" % first[1])
-
- if first[0] == "ERROR":
- self.fail("IRC-Error: %s" % line)
-
- msg = line.split(None, 3)
- if len(msg) != 4:
- continue
-
- msg = {
- "origin": msg[0][1:],
- "action": msg[1],
- "target": msg[2],
- "text": msg[3][1:]
- }
-
- if nick == msg['target'][0:len(nick)] and "PRIVMSG" == msg['action']:
- if msg['text'] == "\x01VERSION\x01":
- self.logDebug("XDCC: Sending CTCP VERSION.")
- sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
- elif msg['text'] == "\x01TIME\x01":
- self.logDebug("Sending CTCP TIME.")
- sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time()))
- elif msg['text'] == "\x01LAG\x01":
- pass # don't know how to answer
-
- if not (bot == msg['origin'][0:len(bot)]
- and nick == msg['target'][0:len(nick)]
- and msg['action'] in ("PRIVMSG", "NOTICE")):
- continue
-
- if self.debug is 1:
- print "%s: %s" % (msg['origin'], msg['text'])
-
- if "You already requested that pack" in msg['text']:
- retry = time.time() + 300
-
- if "you must be on a known channel to request a pack" in msg['text']:
- self.fail("Wrong channel")
-
- m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text'])
- if m:
- done = True
-
- # get connection data
- ip = socket.inet_ntoa(struct.pack('L', socket.ntohl(int(m.group(2)))))
- port = int(m.group(3))
- packname = m.group(1)
-
- if len(m.groups()) > 3:
- self.req.filesize = int(m.group(4))
-
- self.pyfile.name = packname
-
- download_folder = self.config['general']['download_folder']
- filename = safe_join(download_folder, packname)
-
- self.logInfo("XDCC: Downloading %s from %s:%d" % (packname, ip, port))
-
- self.pyfile.setStatus("downloading")
- newname = self.req.download(ip, port, filename, sock, self.pyfile.setProgress)
- if newname and newname != filename:
- self.logInfo("%(name)s saved as %(newname)s" % {"name": self.pyfile.name, "newname": newname})
- filename = newname
-
- # kill IRC socket
- # sock.send("QUIT :byebye\r\n")
- sock.close()
-
- self.lastDownload = filename
- return self.lastDownload
diff --git a/module/plugins/hoster/YibaishiwuCom.py b/module/plugins/hoster/YibaishiwuCom.py
deleted file mode 100644
index c6c285367..000000000
--- a/module/plugins/hoster/YibaishiwuCom.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.common.json_layer import json_loads
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class YibaishiwuCom(SimpleHoster):
- __name__ = "YibaishiwuCom"
- __type__ = "hoster"
- __version__ = "0.12"
-
- __pattern__ = r'http://(?:www\.)?(?:u\.)?115.com/file/(?P<ID>\w+)'
-
- __description__ = """115.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FILE_NAME_PATTERN = r"file_name: '(?P<N>[^']+)'"
- FILE_SIZE_PATTERN = r"file_size: '(?P<S>[^']+)'"
- OFFLINE_PATTERN = ur'<h3><i style="color:red;">哎呀提取码䞍存圚䞍劚搜搜看吧</i></h3>'
-
- LINK_PATTERN = r'(/\?ct=(pickcode|download)[^"\']+)'
-
-
- def handleFree(self):
- m = re.search(self.LINK_PATTERN, self.html)
- if m is None:
- self.parseError("AJAX URL")
- url = m.group(1)
- self.logDebug(('FREEUSER' if m.group(2) == 'download' else 'GUEST') + ' URL', url)
-
- response = json_loads(self.load("http://115.com" + url, decode=False))
- if "urls" in response:
- mirrors = response['urls']
- elif "data" in response:
- mirrors = response['data']
- else:
- mirrors = None
-
- for mr in mirrors:
- try:
- url = mr['url'].replace("\\", "")
- self.logDebug("Trying URL: " + url)
- self.download(url)
- break
- except:
- continue
- else:
- self.fail('No working link found')
-
-
-getInfo = create_getInfo(YibaishiwuCom)
diff --git a/module/plugins/hoster/YoupornCom.py b/module/plugins/hoster/YoupornCom.py
deleted file mode 100644
index 23b9b0a20..000000000
--- a/module/plugins/hoster/YoupornCom.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hoster import Hoster
-
-
-class YoupornCom(Hoster):
- __name__ = "YoupornCom"
- __type__ = "hoster"
- __version__ = "0.2"
-
- __pattern__ = r'http://(?:www\.)?youporn\.com/watch/.+'
-
- __description__ = """Youporn.com hoster plugin"""
- __author_name__ = "willnix"
- __author_mail__ = "willnix@pyload.org"
-
-
- def process(self, pyfile):
- self.pyfile = pyfile
-
- if not self.file_exists():
- self.offline()
-
- pyfile.name = self.get_file_name()
- self.download(self.get_file_url())
-
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url, post={"user_choice": "Enter"}, cookies=False)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- if not self.html:
- self.download_html()
-
- return re.search(r'(http://download\.youporn\.com/download/\d+\?save=1)">', self.html).group(1)
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- file_name_pattern = r"<title>(.*) - Free Porn Videos - YouPorn</title>"
- return re.search(file_name_pattern, self.html).group(1).replace("&amp;", "&").replace("/", "") + '.flv'
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
- if re.search(r"(.*invalid video_id.*)", self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/YourfilesTo.py b/module/plugins/hoster/YourfilesTo.py
deleted file mode 100644
index bdb91819f..000000000
--- a/module/plugins/hoster/YourfilesTo.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from urllib import unquote
-
-from module.plugins.Hoster import Hoster
-
-
-class YourfilesTo(Hoster):
- __name__ = "YourfilesTo"
- __type__ = "hoster"
- __version__ = "0.21"
-
- __pattern__ = r'(http://)?(?:www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+'
-
- __description__ = """Youfiles.to hoster plugin"""
- __author_name__ = ("jeix", "skydancer")
- __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de")
-
-
- def process(self, pyfile):
- self.pyfile = pyfile
- self.prepare()
- self.download(self.get_file_url())
-
- def prepare(self):
- if not self.file_exists():
- self.offline()
-
- self.pyfile.name = self.get_file_name()
-
- wait_time = self.get_waiting_time()
- self.setWait(wait_time)
- self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time))
- self.wait()
-
- def get_waiting_time(self):
- if not self.html:
- self.download_html()
-
- #var zzipitime = 15;
- m = re.search(r'var zzipitime = (\d+);', self.html)
- if m:
- sec = int(m.group(1))
- else:
- sec = 0
-
- return sec
-
- def download_html(self):
- url = self.pyfile.url
- self.html = self.load(url)
-
- def get_file_url(self):
- """ returns the absolute downloadable filepath
- """
- url = re.search(r"var bla = '(.*?)';", self.html)
- if url:
- url = url.group(1)
- url = unquote(url.replace("http://http:/http://", "http://").replace("dumdidum", ""))
- return url
- else:
- self.fail("absolute filepath could not be found. offline? ")
-
- def get_file_name(self):
- if not self.html:
- self.download_html()
-
- return re.search("<title>(.*)</title>", self.html).group(1)
-
- def file_exists(self):
- """ returns True or False
- """
- if not self.html:
- self.download_html()
-
- if re.search(r"HTTP Status 404", self.html) is not None:
- return False
- else:
- return True
diff --git a/module/plugins/hoster/YoutubeCom.py b/module/plugins/hoster/YoutubeCom.py
deleted file mode 100644
index 5ffef5531..000000000
--- a/module/plugins/hoster/YoutubeCom.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import re
-import subprocess
-
-from urllib import unquote
-
-from module.plugins.Hoster import Hoster
-from module.plugins.internal.SimpleHoster import replace_patterns
-from module.utils import html_unescape
-
-
-def which(program):
- """Works exactly like the unix command which
-
- Courtesy of http://stackoverflow.com/a/377028/675646"""
-
- def is_exe(fpath):
- return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
-
- fpath, fname = os.path.split(program)
- if fpath:
- if is_exe(program):
- return program
- else:
- for path in os.environ['PATH'].split(os.pathsep):
- path = path.strip('"')
- exe_file = os.path.join(path, program)
- if is_exe(exe_file):
- return exe_file
-
- return None
-
-
-class YoutubeCom(Hoster):
- __name__ = "YoutubeCom"
- __type__ = "hoster"
- __version__ = "0.40"
-
- __pattern__ = r'https?://(?:[^/]*\.)?(?:youtube\.com|youtu\.be)/watch.*?[?&]v=.*'
- __config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting", "hd"),
- ("fmt", "int", "FMT/ITAG Number (5-102, 0 for auto)", 0),
- (".mp4", "bool", "Allow .mp4", True),
- (".flv", "bool", "Allow .flv", True),
- (".webm", "bool", "Allow .webm", False),
- (".3gp", "bool", "Allow .3gp", False),
- ("3d", "bool", "Prefer 3D", False)]
-
- __description__ = """Youtube.com hoster plugin"""
- __author_name__ = ("spoob", "zoidberg")
- __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz")
-
- FILE_URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')]
-
- # Invalid characters that must be removed from the file name
- invalidChars = u'\u2605:?><"|\\'
-
- # name, width, height, quality ranking, 3D
- formats = {5: (".flv", 400, 240, 1, False),
- 6: (".flv", 640, 400, 4, False),
- 17: (".3gp", 176, 144, 0, False),
- 18: (".mp4", 480, 360, 2, False),
- 22: (".mp4", 1280, 720, 8, False),
- 43: (".webm", 640, 360, 3, False),
- 34: (".flv", 640, 360, 4, False),
- 35: (".flv", 854, 480, 6, False),
- 36: (".3gp", 400, 240, 1, False),
- 37: (".mp4", 1920, 1080, 9, False),
- 38: (".mp4", 4096, 3072, 10, False),
- 44: (".webm", 854, 480, 5, False),
- 45: (".webm", 1280, 720, 7, False),
- 46: (".webm", 1920, 1080, 9, False),
- 82: (".mp4", 640, 360, 3, True),
- 83: (".mp4", 400, 240, 1, True),
- 84: (".mp4", 1280, 720, 8, True),
- 85: (".mp4", 1920, 1080, 9, True),
- 100: (".webm", 640, 360, 3, True),
- 101: (".webm", 640, 360, 4, True),
- 102: (".webm", 1280, 720, 8, True)}
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
-
- def process(self, pyfile):
- pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
- html = self.load(pyfile.url, decode=True)
-
- if re.search(r'<div id="player-unavailable" class="\s*player-width player-height\s*">', html):
- self.offline()
-
- if "We have been receiving a large volume of requests from your network." in html:
- self.tempOffline()
-
- #get config
- use3d = self.getConfig("3d")
- if use3d:
- quality = {"sd": 82, "hd": 84, "fullhd": 85, "240p": 83, "360p": 82,
- "480p": 82, "720p": 84, "1080p": 85, "3072p": 85}
- else:
- quality = {"sd": 18, "hd": 22, "fullhd": 37, "240p": 5, "360p": 18,
- "480p": 35, "720p": 22, "1080p": 37, "3072p": 38}
- desired_fmt = self.getConfig("fmt")
- if desired_fmt and desired_fmt not in self.formats:
- self.logWarning("FMT %d unknown - using default." % desired_fmt)
- desired_fmt = 0
- if not desired_fmt:
- desired_fmt = quality.get(self.getConfig("quality"), 18)
-
- #parse available streams
- streams = re.search(r'"url_encoded_fmt_stream_map": "(.*?)",', html).group(1)
- streams = [x.split('\u0026') for x in streams.split(',')]
- streams = [dict((y.split('=', 1)) for y in x) for x in streams]
- streams = [(int(x['itag']), unquote(x['url'])) for x in streams]
- #self.logDebug("Found links: %s" % streams)
- self.logDebug("AVAILABLE STREAMS: %s" % [x[0] for x in streams])
-
- #build dictionary of supported itags (3D/2D)
- allowed = lambda x: self.getConfig(self.formats[x][0])
- streams = [x for x in streams if x[0] in self.formats and allowed(x[0])]
- if not streams:
- self.fail("No available stream meets your preferences")
- fmt_dict = dict([x for x in streams if self.formats[x[0]][4] == use3d] or streams)
-
- self.logDebug("DESIRED STREAM: ITAG:%d (%s) %sfound, %sallowed" %
- (desired_fmt, "%s %dx%d Q:%d 3D:%s" % self.formats[desired_fmt],
- "" if desired_fmt in fmt_dict else "NOT ", "" if allowed(desired_fmt) else "NOT "))
-
- #return fmt nearest to quality index
- if desired_fmt in fmt_dict and allowed(desired_fmt):
- fmt = desired_fmt
- else:
- sel = lambda x: self.formats[x][3] # select quality index
- comp = lambda x, y: abs(sel(x) - sel(y))
-
- self.logDebug("Choosing nearest fmt: %s" % [(x, allowed(x), comp(x, desired_fmt)) for x in fmt_dict.keys()])
- fmt = reduce(lambda x, y: x if comp(x, desired_fmt) <= comp(y, desired_fmt) and
- sel(x) > sel(y) else y, fmt_dict.keys())
-
- self.logDebug("Chosen fmt: %s" % fmt)
- url = fmt_dict[fmt]
- self.logDebug("URL: %s" % url)
-
- #set file name
- file_suffix = self.formats[fmt][0] if fmt in self.formats else ".flv"
- file_name_pattern = '<meta name="title" content="(.+?)">'
- name = re.search(file_name_pattern, html).group(1).replace("/", "")
-
- # Cleaning invalid characters from the file name
- name = name.encode('ascii', 'replace')
- for c in self.invalidChars:
- name = name.replace(c, '_')
-
- pyfile.name = html_unescape(name)
-
- time = re.search(r"t=((\d+)m)?(\d+)s", pyfile.url)
- ffmpeg = which("ffmpeg")
- if ffmpeg and time:
- m, s = time.groups()[1:]
- if m is None:
- m = "0"
-
- pyfile.name += " (starting at %s:%s)" % (m, s)
- pyfile.name += file_suffix
-
- filename = self.download(url)
-
- if ffmpeg and time:
- inputfile = filename + "_"
- os.rename(filename, inputfile)
-
- subprocess.call([
- ffmpeg,
- "-ss", "00:%s:%s" % (m, s),
- "-i", inputfile,
- "-vcodec", "copy",
- "-acodec", "copy",
- filename])
- os.remove(inputfile)
diff --git a/module/plugins/hoster/ZDF.py b/module/plugins/hoster/ZDF.py
deleted file mode 100644
index d51a16a80..000000000
--- a/module/plugins/hoster/ZDF.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from xml.etree.ElementTree import fromstring
-
-from module.plugins.Hoster import Hoster
-
-
-# Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/)
-class ZDF(Hoster):
- __name__ = "ZDF Mediathek"
- __type__ = "hoster"
- __version__ = "0.8"
-
- __pattern__ = r'http://(?:www\.)?zdf\.de/ZDFmediathek/[^0-9]*([0-9]+)[^0-9]*'
-
- __description__ = """ZDF.de hoster plugin"""
- __author_name__ = None
- __author_mail__ = None
-
- XML_API = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=%i"
-
-
- @staticmethod
- def video_key(video):
- return (
- int(video.findtext("videoBitrate", "0")),
- any(f.text == "progressive" for f in video.iter("facet")),
- )
-
- @staticmethod
- def video_valid(video):
- return video.findtext("url").startswith("http") and video.findtext("url").endswith(".mp4") and \
- video.findtext("facets/facet").startswith("progressive")
-
- @staticmethod
- def get_id(url):
- return int(re.search(r"[^0-9]*([0-9]{4,})[^0-9]*", url).group(1))
-
- def process(self, pyfile):
- xml = fromstring(self.load(self.XML_API % self.get_id(pyfile.url)))
-
- status = xml.findtext("./status/statuscode")
- if status != "ok":
- self.fail("Error retrieving manifest.")
-
- video = xml.find("video")
- title = video.findtext("information/title")
-
- pyfile.name = title
-
- target_url = sorted((v for v in video.iter("formitaet") if self.video_valid(v)),
- key=self.video_key)[-1].findtext("url")
-
- self.download(target_url)
diff --git a/module/plugins/hoster/ZeveraCom.py b/module/plugins/hoster/ZeveraCom.py
deleted file mode 100644
index b6b59b242..000000000
--- a/module/plugins/hoster/ZeveraCom.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Hoster import Hoster
-
-
-class ZeveraCom(Hoster):
- __name__ = "ZeveraCom"
- __type__ = "hoster"
- __version__ = "0.21"
-
- __pattern__ = r'http://(?:www\.)?zevera.com/.*'
-
- __description__ = """Zevera.com hoster plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = 1
-
- def process(self, pyfile):
- if not self.account:
- self.logError(_("Please enter your %s account or deactivate this plugin") % "zevera.com")
- self.fail("No zevera.com account provided")
-
- self.logDebug("zevera.com: Old URL: %s" % pyfile.url)
-
- if self.account.getAPIData(self.req, cmd="checklink", olink=pyfile.url) != "Alive":
- self.fail("Offline or not downloadable - contact Zevera support")
-
- header = self.account.getAPIData(self.req, just_header=True, cmd="generatedownloaddirect", olink=pyfile.url)
- if not "location" in header:
- self.fail("Unable to initialize download - contact Zevera support")
-
- self.download(header['location'], disposition=True)
-
- check = self.checkDownload({"error": 'action="ErrorDownload.aspx'})
- if check == "error":
- self.fail("Error response received - contact Zevera support")
-
- # BitAPI not used - defunct, probably abandoned by Zevera
- #
- # api_url = "http://zevera.com/API.ashx"
- #
- # def process(self, pyfile):
- # if not self.account:
- # self.logError(_("Please enter your zevera.com account or deactivate this plugin"))
- # self.fail("No zevera.com account provided")
- #
- # self.logDebug("zevera.com: Old URL: %s" % pyfile.url)
- #
- # last_size = retries = 0
- # olink = pyfile.url #quote(pyfile.url.encode('utf_8'))
- #
- # for _ in xrange(100):
- # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_request', olink = olink)
- # self.checkAPIErrors(self.retData)
- #
- # if self.retData['FileInfo']['StatusID'] == 100:
- # break
- # elif self.retData['FileInfo']['StatusID'] == 99:
- # self.fail('Failed to initialize download (99)')
- # else:
- # if self.retData['FileInfo']['Progress']['BytesReceived'] <= last_size:
- # if retries >= 6:
- # self.fail('Failed to initialize download (%d)' % self.retData['FileInfo']['StatusID'] )
- # retries += 1
- # else:
- # retries = 0
- #
- # last_size = self.retData['FileInfo']['Progress']['BytesReceived']
- #
- # self.setWait(self.retData['Update_Wait'])
- # self.wait()
- #
- # pyfile.name = self.retData['FileInfo']['RealFileName']
- # pyfile.size = self.retData['FileInfo']['FileSizeInBytes']
- #
- # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_start',
- # FileID = self.retData['FileInfo']['FileID'])
- # self.checkAPIErrors(self.retData)
- #
- # self.download(self.api_url, get = {
- # 'cmd': "open_stream",
- # 'login': self.account.loginname,
- # 'pass': self.account.password,
- # 'FileID': self.retData['FileInfo']['FileID'],
- # 'startBytes': 0
- # }
- # )
- #
- # def checkAPIErrors(self, retData):
- # if not retData:
- # self.fail('Unknown API response')
- #
- # if retData['ErrorCode']:
- # self.logError(retData['ErrorCode'], retData['ErrorMessage'])
- # #self.fail('ERROR: ' + retData['ErrorMessage'])
- #
- # if pyfile.size / 1024000 > retData['AccountInfo']['AvailableTODAYTrafficForUseInMBytes']:
- # self.logWarning("Not enough data left to download the file")
- #
- # def crazyDecode(self, ustring):
- # # accepts decoded ie. unicode string - API response is double-quoted, double-utf8-encoded
- # # no idea what the proper order of calling these functions would be :-/
- # return html_unescape(unquote(unquote(ustring.replace(
- # '@DELIMITER@','#'))).encode('raw_unicode_escape').decode('utf-8'))
diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py
deleted file mode 100644
index 33a672198..000000000
--- a/module/plugins/hoster/ZippyshareCom.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Test links:
-# http://www13.zippyshare.com/v/18665333/file.html
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-
-
-class ZippyshareCom(SimpleHoster):
- __name__ = "ZippyshareCom"
- __type__ = "hoster"
- __version__ = "0.49"
-
- __pattern__ = r'(?P<HOST>http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(?P<KEY>\d+)'
-
- __description__ = """Zippyshare.com hoster plugin"""
- __author_name__ = ("spoob", "zoidberg", "stickell", "skylab")
- __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "development@sky-lab.de")
-
- FILE_NAME_PATTERN = r'<title>Zippyshare\.com - (?P<N>[^<]+)</title>'
- FILE_SIZE_PATTERN = r'>Size:</font>\s*<font [^>]*>(?P<S>[0-9.,]+) (?P<U>[kKMG]+)i?B</font><br />'
- FILE_INFO_PATTERN = r'document\.getElementById\(\'dlbutton\'\)\.href = "[^;]*/(?P<N>[^"]+)";'
- OFFLINE_PATTERN = r'>File does not exist on this server</div>'
-
- SH_COOKIES = [(".zippyshare.com", "ziplocale", "en")]
-
-
- def setup(self):
- self.multiDL = True
-
- def handleFree(self):
- url = self.get_file_url()
- if not url:
- self.fail("Download URL not found.")
- self.logDebug("Download URL: %s" % url)
- self.download(url)
-
- def get_file_url(self):
- """returns the absolute downloadable filepath"""
- url_parts = re.search(r'(addthis:url="(http://www(\d+).zippyshare.com/v/(\d*)/file.html))', self.html)
- number = url_parts.group(4)
- check = re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html)
- if check:
- a = int(re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html).group(3))
- k = int(re.search(r'<script type="text/javascript">([^<]*?)(\d*%(\d*))', self.html).group(3))
- checksum = ((a + 3) % k) * ((a + 3) % 3) + 18
- else:
- # This might work but is insecure
- # checksum = eval(re.search("((\d*)\s\%\s(\d*)\s\+\s(\d*)\s\%\s(\d*))", self.html).group(0))
-
- m = re.search(r"((?P<a>\d*)\s%\s(?P<b>\d*)\s\+\s(?P<c>\d*)\s%\s(?P<k>\d*))", self.html)
- if m is None:
- self.parseError("Unable to detect values to calculate direct link")
- a = int(m.group("a"))
- b = int(m.group("b"))
- c = int(m.group("c"))
- k = int(m.group("k"))
- if a == c:
- checksum = ((a % b) + (a % k))
- else:
- checksum = ((a % b) + (c % k))
-
- self.logInfo('Checksum: %s' % checksum)
-
- filename = re.search(r'>Name:</font>\s*<font [^>]*>(?P<N>[^<]+)</font><br />', self.html).group('N')
-
- url = "/d/%s/%s/%s" % (number, checksum, filename)
- self.logInfo(self.file_info['HOST'] + url)
- return self.file_info['HOST'] + url
-
-
-getInfo = create_getInfo(ZippyshareCom)
diff --git a/module/plugins/internal/DeadCrypter.py b/module/plugins/internal/DeadCrypter.py
deleted file mode 100644
index 296de739d..000000000
--- a/module/plugins/internal/DeadCrypter.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Crypter import Crypter as _Crypter
-
-
-class DeadCrypter(_Crypter):
- __name__ = "DeadCrypter"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = None
-
- __description__ = """Crypter is no longer available"""
- __author_name__ = "stickell"
- __author_mail__ = "l.stickell@yahoo.it"
-
-
- def setup(self):
- self.fail("Crypter is no longer available")
diff --git a/module/plugins/internal/DeadHoster.py b/module/plugins/internal/DeadHoster.py
deleted file mode 100644
index 35a948824..000000000
--- a/module/plugins/internal/DeadHoster.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Hoster import Hoster as _Hoster
-
-
-def create_getInfo(plugin):
-
- def getInfo(urls):
- yield [('#N/A: ' + url, 0, 1, url) for url in urls]
-
- return getInfo
-
-
-class DeadHoster(_Hoster):
- __name__ = "DeadHoster"
- __type__ = "hoster"
- __version__ = "0.11"
-
- __pattern__ = None
-
- __description__ = """Hoster is no longer available"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
-
- def setup(self):
- self.fail("Hoster is no longer available")
diff --git a/module/plugins/internal/MultiHoster.py b/module/plugins/internal/MultiHoster.py
deleted file mode 100644
index 6bcad293c..000000000
--- a/module/plugins/internal/MultiHoster.py
+++ /dev/null
@@ -1,192 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Hook import Hook
-from module.utils import remove_chars
-
-
-class MultiHoster(Hook):
- __name__ = "MultiHoster"
- __type__ = "hook"
- __version__ = "0.20"
-
- __description__ = """Generic MultiHoster plugin"""
- __author_name__ = "pyLoad Team"
- __author_mail__ = "admin@pyload.org"
-
- replacements = [("2shared.com", "twoshared.com"), ("4shared.com", "fourshared.com"), ("cloudnator.com", "shragle.com"),
- ("ifile.it", "filecloud.io"), ("easy-share.com", "crocko.com"), ("freakshare.net", "freakshare.com"),
- ("hellshare.com", "hellshare.cz"), ("share-rapid.cz", "sharerapid.com"), ("sharerapid.cz", "sharerapid.com"),
- ("ul.to", "uploaded.to"), ("uploaded.net", "uploaded.to"), ("1fichier.com", "onefichier.com")]
- ignored = []
- interval = 24 * 60 * 60 #: reload hosters daily
-
-
- def setup(self):
- self.hosters = []
- self.supported = []
- self.new_supported = []
-
- def getConfig(self, option, default=''):
- """getConfig with default value - subclass may not implements all config options"""
- try:
- # Fixed loop due to getConf deprecation in 0.4.10
- return super(MultiHoster, self).getConfig(option)
- except KeyError:
- return default
-
- def getHosterCached(self):
- if not self.hosters:
- try:
- hosterSet = self.toHosterSet(self.getHoster()) - set(self.ignored)
- except Exception, e:
- self.logError("%s" % str(e))
- return []
-
- try:
- configMode = self.getConfig('hosterListMode', 'all')
- if configMode in ("listed", "unlisted"):
- configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(','))
-
- if configMode == "listed":
- hosterSet &= configSet
- else:
- hosterSet -= configSet
-
- except Exception, e:
- self.logError("%s" % str(e))
-
- self.hosters = list(hosterSet)
-
- return self.hosters
-
- def toHosterSet(self, hosters):
- hosters = set((str(x).strip().lower() for x in hosters))
-
- for rep in self.replacements:
- if rep[0] in hosters:
- hosters.remove(rep[0])
- hosters.add(rep[1])
-
- hosters.discard('')
- return hosters
-
- def getHoster(self):
- """Load list of supported hoster
-
- :return: List of domain names
- """
- raise NotImplementedError
-
- def coreReady(self):
- if self.cb:
- self.core.scheduler.removeJob(self.cb)
-
- self.setConfig("activated", True) #: config not in sync after plugin reload
-
- cfg_interval = self.getConfig("interval", None) #: reload interval in hours
- if cfg_interval is not None:
- self.interval = cfg_interval * 60 * 60
-
- if self.interval:
- self._periodical()
- else:
- self.periodical()
-
- def initPeriodical(self):
- pass
-
- def periodical(self):
- """reload hoster list periodically"""
- self.logInfo("Reloading supported hoster list")
-
- old_supported = self.supported
- self.supported, self.new_supported, self.hosters = [], [], []
-
- self.overridePlugins()
-
- old_supported = [hoster for hoster in old_supported if hoster not in self.supported]
- if old_supported:
- self.logDebug("UNLOAD: %s" % ", ".join(old_supported))
- for hoster in old_supported:
- self.unloadHoster(hoster)
-
- def overridePlugins(self):
- pluginMap = {}
- for name in self.core.pluginManager.hosterPlugins.keys():
- pluginMap[name.lower()] = name
-
- accountList = [name.lower() for name, data in self.core.accountManager.accounts.items() if data]
- excludedList = []
-
- for hoster in self.getHosterCached():
- name = remove_chars(hoster.lower(), "-.")
-
- if name in accountList:
- excludedList.append(hoster)
- else:
- if name in pluginMap:
- self.supported.append(pluginMap[name])
- else:
- self.new_supported.append(hoster)
-
- if not self.supported and not self.new_supported:
- self.logError(_("No Hoster loaded"))
- return
-
- module = self.core.pluginManager.getPlugin(self.__name__)
- klass = getattr(module, self.__name__)
-
- # inject plugin plugin
- self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported)))
- for hoster in self.supported:
- dict = self.core.pluginManager.hosterPlugins[hoster]
- dict['new_module'] = module
- dict['new_name'] = self.__name__
-
- if excludedList:
- self.logInfo("The following hosters were not overwritten - account exists: %s" % ", ".join(sorted(excludedList)))
-
- if self.new_supported:
- self.logDebug("New Hosters: %s" % ", ".join(sorted(self.new_supported)))
-
- # create new regexp
- regexp = r".*(%s).*" % "|".join([x.replace(".", "\\.") for x in self.new_supported])
- if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__:
- regexp = r"%s|%s" % (klass.__pattern__, regexp)
-
- self.logDebug("Regexp: %s" % regexp)
-
- dict = self.core.pluginManager.hosterPlugins[self.__name__]
- dict['pattern'] = regexp
- dict['re'] = re.compile(regexp)
-
- def unloadHoster(self, hoster):
- dict = self.core.pluginManager.hosterPlugins[hoster]
- if "module" in dict:
- del dict['module']
-
- if "new_module" in dict:
- del dict['new_module']
- del dict['new_name']
-
- def unload(self):
- """Remove override for all hosters. Scheduler job is removed by hookmanager"""
- for hoster in self.supported:
- self.unloadHoster(hoster)
-
- # reset pattern
- klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__)
- dict = self.core.pluginManager.hosterPlugins[self.__name__]
- dict['pattern'] = getattr(klass, "__pattern__", r'^unmatchable$')
- dict['re'] = re.compile(dict['pattern'])
-
- def downloadFailed(self, pyfile):
- """remove plugin override if download fails but not if file is offline/temp.offline"""
- if pyfile.hasStatus("failed") and self.getConfig("unloadFailing", True):
- hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname]
- if "new_name" in hdict and hdict['new_name'] == self.__name__:
- self.logDebug("Unload MultiHoster", pyfile.pluginname, hdict)
- self.unloadHoster(pyfile.pluginname)
- pyfile.setStatus("queued")
diff --git a/module/plugins/internal/SimpleCrypter.py b/module/plugins/internal/SimpleCrypter.py
deleted file mode 100644
index 0b99feb42..000000000
--- a/module/plugins/internal/SimpleCrypter.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.SimpleHoster import PluginParseError, replace_patterns, set_cookies
-from module.utils import html_unescape
-
-
-class SimpleCrypter(Crypter):
- __name__ = "SimpleCrypter"
- __type__ = "crypter"
- __version__ = "0.10"
-
- __pattern__ = None
-
- __description__ = """Simple decrypter plugin"""
- __author_name__ = ("stickell", "zoidberg", "Walter Purcaro")
- __author_mail__ = ("l.stickell@yahoo.it", "zoidberg@mujmail.cz", "vuolter@gmail.com")
-
- """
- Following patterns should be defined by each crypter:
-
- LINK_PATTERN: group(1) must be a download link or a regex to catch more links
- example: LINK_PATTERN = r'<div class="link"><a href="(http://speedload.org/\w+)'
-
- TITLE_PATTERN: (optional) The group defined by 'title' should be the title
- example: TITLE_PATTERN = r'<title>Files of: (?P<title>[^<]+) folder</title>'
-
- OFFLINE_PATTERN: (optional) Checks if the file is yet available online
- example: OFFLINE_PATTERN = r'File (deleted|not found)'
-
- TEMP_OFFLINE_PATTERN: (optional) Checks if the file is temporarily offline
- example: TEMP_OFFLINE_PATTERN = r'Server maintainance'
-
-
- If it's impossible to extract the links using the LINK_PATTERN only you can override the getLinks method.
-
- If the links are disposed on multiple pages you need to define a pattern:
-
- PAGES_PATTERN: The group defined by 'pages' must be the total number of pages
- example: PAGES_PATTERN = r'Pages: (?P<pages>\d+)'
-
- and a function:
-
- loadPage(self, page_n):
- return the html of the page number 'page_n'
- """
-
- URL_REPLACEMENTS = []
-
- SH_COOKIES = True # or False or list of tuples [(domain, name, value)]
-
-
- def setup(self):
- if isinstance(self.SH_COOKIES, list):
- set_cookies(self.req.cj, self.SH_COOKIES)
-
- def decrypt(self, pyfile):
- pyfile.url = replace_patterns(pyfile.url, self.URL_REPLACEMENTS)
-
- self.html = self.load(pyfile.url, decode=True)
-
- self.checkOnline()
-
- package_name, folder_name = self.getPackageNameAndFolder()
-
- self.package_links = self.getLinks()
-
- if hasattr(self, 'PAGES_PATTERN') and hasattr(self, 'loadPage'):
- self.handleMultiPages()
-
- self.logDebug('Package has %d links' % len(self.package_links))
-
- if self.package_links:
- self.packages = [(package_name, self.package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
-
- def getLinks(self):
- """
- Returns the links extracted from self.html
- You should override this only if it's impossible to extract links using only the LINK_PATTERN.
- """
- return re.findall(self.LINK_PATTERN, self.html)
-
- def checkOnline(self):
- if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, self.html):
- self.offline()
- elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, self.html):
- self.tempOffline()
-
- def getPackageNameAndFolder(self):
- if hasattr(self, 'TITLE_PATTERN'):
- m = re.search(self.TITLE_PATTERN, self.html)
- if m:
- name = folder = html_unescape(m.group('title').strip())
- self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
- return name, folder
-
- name = self.pyfile.package().name
- folder = self.pyfile.package().folder
- self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
- return name, folder
-
- def handleMultiPages(self):
- pages = re.search(self.PAGES_PATTERN, self.html)
- if pages:
- pages = int(pages.group('pages'))
- else:
- pages = 1
-
- for p in xrange(2, pages + 1):
- self.html = self.loadPage(p)
- self.package_links += self.getLinks()
-
- def parseError(self, msg):
- raise PluginParseError(msg)
diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py
deleted file mode 100644
index ec9cf1b70..000000000
--- a/module/plugins/internal/SimpleHoster.py
+++ /dev/null
@@ -1,292 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import time
-from urlparse import urlparse
-
-from module.network.CookieJar import CookieJar
-from module.network.RequestFactory import getURL
-from module.plugins.Hoster import Hoster
-from module.utils import fixup, html_unescape, parseFileSize
-
-
-def replace_patterns(string, ruleslist):
- for r in ruleslist:
- rf, rt = r
- string = re.sub(rf, rt, string)
- #self.logDebug(rf, rt, string)
- return string
-
-
-def set_cookies(cj, cookies):
- for cookie in cookies:
- if isinstance(cookie, tuple) and len(cookie) == 3:
- domain, name, value = cookie
- cj.setCookie(domain, name, value)
-
-
-def parseHtmlTagAttrValue(attr_name, tag):
- m = re.search(r"%s\s*=\s*([\"']?)((?<=\")[^\"]+|(?<=')[^']+|[^>\s\"'][^>\s]*)\1" % attr_name, tag, re.I)
- return m.group(2) if m else None
-
-
-def parseHtmlForm(attr_str, html, input_names=None):
- for form in re.finditer(r"(?P<tag><form[^>]*%s[^>]*>)(?P<content>.*?)</?(form|body|html)[^>]*>" % attr_str,
- html, re.S | re.I):
- inputs = {}
- action = parseHtmlTagAttrValue("action", form.group('tag'))
- for inputtag in re.finditer(r'(<(input|textarea)[^>]*>)([^<]*(?=</\2)|)', form.group('content'), re.S | re.I):
- name = parseHtmlTagAttrValue("name", inputtag.group(1))
- if name:
- value = parseHtmlTagAttrValue("value", inputtag.group(1))
- if not value:
- inputs[name] = inputtag.group(3) or ''
- else:
- inputs[name] = value
-
- if isinstance(input_names, dict):
- # check input attributes
- for key, val in input_names.items():
- if key in inputs:
- if isinstance(val, basestring) and inputs[key] == val:
- continue
- elif isinstance(val, tuple) and inputs[key] in val:
- continue
- elif hasattr(val, "search") and re.match(val, inputs[key]):
- continue
- break # attibute value does not match
- else:
- break # attibute name does not match
- else:
- return action, inputs # passed attribute check
- else:
- # no attribute check
- return action, inputs
-
- return {}, None # no matching form found
-
-
-def parseFileInfo(self, url='', html=''):
- info = {"name": url, "size": 0, "status": 3}
-
- if hasattr(self, "pyfile"):
- url = self.pyfile.url
-
- if hasattr(self, "req") and self.req.http.code == '404':
- info['status'] = 1
- else:
- if not html and hasattr(self, "html"):
- html = self.html
- if isinstance(self.SH_BROKEN_ENCODING, (str, unicode)):
- html = unicode(html, self.SH_BROKEN_ENCODING)
- if hasattr(self, "html"):
- self.html = html
-
- if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, html):
- info['status'] = 1
- elif hasattr(self, "FILE_OFFLINE_PATTERN") and re.search(self.FILE_OFFLINE_PATTERN, html): #@TODO: Remove in 0.4.10
- info['status'] = 1
- elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, html):
- info['status'] = 6
- else:
- online = False
- try:
- info.update(re.match(self.__pattern__, url).groupdict())
- except:
- pass
-
- for pattern in ("FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"):
- try:
- info.update(re.search(getattr(self, pattern), html).groupdict())
- online = True
- except AttributeError:
- continue
-
- if online:
- # File online, return name and size
- info['status'] = 2
- if 'N' in info:
- info['name'] = replace_patterns(info['N'], self.FILE_NAME_REPLACEMENTS)
- if 'S' in info:
- size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'],
- self.FILE_SIZE_REPLACEMENTS)
- info['size'] = parseFileSize(size)
- elif isinstance(info['size'], (str, unicode)):
- if 'units' in info:
- info['size'] += info['units']
- info['size'] = parseFileSize(info['size'])
-
- if hasattr(self, "file_info"):
- self.file_info = info
-
- return info['name'], info['size'], info['status'], url
-
-
-def create_getInfo(plugin):
-
- def getInfo(urls):
- for url in urls:
- cj = CookieJar(plugin.__name__)
- if isinstance(plugin.SH_COOKIES, list):
- set_cookies(cj, plugin.SH_COOKIES)
- file_info = parseFileInfo(plugin, url, getURL(replace_patterns(url, plugin.FILE_URL_REPLACEMENTS),
- decode=not plugin.SH_BROKEN_ENCODING, cookies=cj))
- yield file_info
-
- return getInfo
-
-
-def timestamp():
- return int(time() * 1000)
-
-
-class PluginParseError(Exception):
-
- def __init__(self, msg):
- Exception.__init__(self)
- self.value = 'Parse error (%s) - plugin may be out of date' % msg
-
- def __str__(self):
- return repr(self.value)
-
-
-class SimpleHoster(Hoster):
- __name__ = "SimpleHoster"
- __type__ = "hoster"
- __version__ = "0.35"
-
- __pattern__ = None
-
- __description__ = """Simple hoster plugin"""
- __author_name__ = ("zoidberg", "stickell")
- __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
-
- """
- Following patterns should be defined by each hoster:
-
- FILE_INFO_PATTERN: Name and Size of the file
- example: FILE_INFO_PATTERN = r'(?P<N>file_name) (?P<S>file_size) (?P<U>size_unit)'
- or
- FILE_NAME_PATTERN: Name that will be set for the file
- example: FILE_NAME_PATTERN = r'(?P<N>file_name)'
- FILE_SIZE_PATTERN: Size that will be checked for the file
- example: FILE_SIZE_PATTERN = r'(?P<S>file_size) (?P<U>size_unit)'
-
- OFFLINE_PATTERN: Checks if the file is yet available online
- example: OFFLINE_PATTERN = r'File (deleted|not found)'
-
- TEMP_OFFLINE_PATTERN: Checks if the file is temporarily offline
- example: TEMP_OFFLINE_PATTERN = r'Server maintainance'
-
- PREMIUM_ONLY_PATTERN: (optional) Checks if the file can be downloaded only with a premium account
- example: PREMIUM_ONLY_PATTERN = r'Premium account required'
- """
-
- FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup)]
- FILE_SIZE_REPLACEMENTS = []
- FILE_URL_REPLACEMENTS = []
-
- SH_BROKEN_ENCODING = False # Set to True or encoding name if encoding in http header is not correct
- SH_COOKIES = True # or False or list of tuples [(domain, name, value)]
- SH_CHECK_TRAFFIC = False # True = force check traffic left for a premium account
-
-
- def init(self):
- self.file_info = {}
-
- def setup(self):
- self.resumeDownload = self.multiDL = self.premium
- if isinstance(self.SH_COOKIES, list):
- set_cookies(self.req.cj, self.SH_COOKIES)
-
- def process(self, pyfile):
- pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
- self.req.setOption("timeout", 120)
- # Due to a 0.4.9 core bug self.load would keep previous cookies even if overridden by cookies parameter.
- # Workaround using getURL. Can be reverted in 0.5 as the cookies bug has been fixed.
- self.html = getURL(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
- premium_only = hasattr(self, 'PREMIUM_ONLY_PATTERN') and re.search(self.PREMIUM_ONLY_PATTERN, self.html)
- if not premium_only: # Usually premium only pages doesn't show the file information
- self.getFileInfo()
-
- if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
- self.handlePremium()
- elif premium_only:
- self.fail("This link require a premium account")
- else:
- # This line is required due to the getURL workaround. Can be removed in 0.5
- self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
- self.handleFree()
-
- def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False):
- if type(url) == unicode:
- url = url.encode('utf8')
- return Hoster.load(self, url=url, get=get, post=post, ref=ref, cookies=cookies,
- just_header=just_header, decode=decode)
-
- def getFileInfo(self):
- self.logDebug("URL: %s" % self.pyfile.url)
-
- name, size, status = parseFileInfo(self)[:3]
-
- if status == 1:
- self.offline()
- elif status == 6:
- self.tempOffline()
- elif status != 2:
- self.logDebug(self.file_info)
- self.parseError('File info')
-
- if name:
- self.pyfile.name = name
- else:
- self.pyfile.name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1])
-
- if size:
- self.pyfile.size = size
- else:
- self.logError("File size not parsed")
-
- self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size))
- return self.file_info
-
- def handleFree(self):
- self.fail("Free download not implemented")
-
- def handlePremium(self):
- self.fail("Premium download not implemented")
-
- def parseError(self, msg):
- raise PluginParseError(msg)
-
- def longWait(self, wait_time=None, max_tries=3):
- if wait_time and isinstance(wait_time, (int, long, float)):
- time_str = "%dh %dm" % divmod(wait_time / 60, 60)
- else:
- wait_time = 900
- time_str = "(unknown time)"
- max_tries = 100
-
- self.logInfo("Download limit reached, reconnect or wait %s" % time_str)
-
- self.setWait(wait_time, True)
- self.wait()
- self.retry(max_tries=max_tries, reason="Download limit reached")
-
- def parseHtmlForm(self, attr_str='', input_names=None):
- return parseHtmlForm(attr_str, self.html, input_names)
-
- def checkTrafficLeft(self):
- traffic = self.account.getAccountInfo(self.user, True)['trafficleft']
- if traffic == -1:
- return True
- size = self.pyfile.size / 1024
- self.logInfo("Filesize: %i KiB, Traffic left for user %s: %i KiB" % (size, self.user, traffic))
- return size <= traffic
-
- # TODO: Remove in 0.5
- def wait(self, seconds=False, reconnect=False):
- if seconds:
- self.setWait(seconds, reconnect)
- super(SimpleHoster, self).wait()
diff --git a/module/plugins/internal/UnRar.py b/module/plugins/internal/UnRar.py
deleted file mode 100644
index 42ba2f66f..000000000
--- a/module/plugins/internal/UnRar.py
+++ /dev/null
@@ -1,212 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import re
-
-from glob import glob
-from os.path import join
-from string import digits
-from subprocess import Popen, PIPE
-
-from module.plugins.internal.AbstractExtractor import AbtractExtractor, WrongPassword, ArchiveError, CRCError
-from module.utils import safe_join, decode
-
-
-class UnRar(AbtractExtractor):
- __name__ = "UnRar"
- __version__ = "0.16"
-
- __description__ = """Rar extractor plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
- CMD = "unrar"
-
- # there are some more uncovered rar formats
- re_version = re.compile(r"(UNRAR 5[\.\d]+(.*?)freeware)")
- re_splitfile = re.compile(r"(.*)\.part(\d+)\.rar$", re.I)
- re_partfiles = re.compile(r".*\.(rar|r[0-9]+)", re.I)
- re_filelist = re.compile(r"(.+)\s+(\d+)\s+(\d+)\s+")
- re_filelist5 = re.compile(r"(.+)\s+(\d+)\s+\d\d-\d\d-\d\d\s+\d\d:\d\d\s+(.+)")
- re_wrongpwd = re.compile("(Corrupt file or wrong password|password incorrect)", re.I)
-
-
- @staticmethod
- def checkDeps():
- if os.name == "nt":
- UnRar.CMD = join(pypath, "UnRAR.exe")
- p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
- p.communicate()
- else:
- try:
- p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
- p.communicate()
- except OSError:
-
- # fallback to rar
- UnRar.CMD = "rar"
- p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
- p.communicate()
-
- return True
-
- @staticmethod
- def getTargets(files_ids):
- result = []
-
- for file, id in files_ids:
- if not file.endswith(".rar"):
- continue
-
- match = UnRar.re_splitfile.findall(file)
- if match:
- # only add first parts
- if int(match[0][1]) == 1:
- result.append((file, id))
- else:
- result.append((file, id))
-
- return result
-
- def init(self):
- self.passwordProtected = False
- self.headerProtected = False #: list files will not work without password
- self.smallestFile = None #: small file to test passwords
- self.password = "" #: save the correct password
-
- def checkArchive(self):
- p = self.call_unrar("l", "-v", self.file)
- out, err = p.communicate()
- if self.re_wrongpwd.search(err):
- self.passwordProtected = True
- self.headerProtected = True
- return True
-
- # output only used to check if passworded files are present
- if self.re_version.search(out):
- for attr, size, name in self.re_filelist5.findall(out):
- if attr.startswith("*"):
- self.passwordProtected = True
- return True
- else:
- for name, size, packed in self.re_filelist.findall(out):
- if name.startswith("*"):
- self.passwordProtected = True
- return True
-
- self.listContent()
- if not self.files:
- raise ArchiveError("Empty Archive")
-
- return False
-
- def checkPassword(self, password):
- # at this point we can only verify header protected files
- if self.headerProtected:
- p = self.call_unrar("l", "-v", self.file, password=password)
- out, err = p.communicate()
- if self.re_wrongpwd.search(err):
- return False
-
- return True
-
- def extract(self, progress, password=None):
- command = "x" if self.fullpath else "e"
-
- p = self.call_unrar(command, self.file, self.out, password=password)
- renice(p.pid, self.renice)
-
- progress(0)
- progressstring = ""
- while True:
- c = p.stdout.read(1)
- # quit loop on eof
- if not c:
- break
- # reading a percentage sign -> set progress and restart
- if c == '%':
- progress(int(progressstring))
- progressstring = ""
- # not reading a digit -> therefore restart
- elif c not in digits:
- progressstring = ""
- # add digit to progressstring
- else:
- progressstring = progressstring + c
- progress(100)
-
- # retrieve stderr
- err = p.stderr.read()
-
- if "CRC failed" in err and not password and not self.passwordProtected:
- raise CRCError
- elif "CRC failed" in err:
- raise WrongPassword
- if err.strip(): #: raise error if anything is on stderr
- raise ArchiveError(err.strip())
- if p.returncode:
- raise ArchiveError("Process terminated")
-
- if not self.files:
- self.password = password
- self.listContent()
-
- def getDeleteFiles(self):
- if ".part" in self.file:
- return glob(re.sub("(?<=\.part)([01]+)", "*", self.file, re.IGNORECASE))
- # get files which matches .r* and filter unsuited files out
- parts = glob(re.sub(r"(?<=\.r)ar$", "*", self.file, re.IGNORECASE))
- return filter(lambda x: self.re_partfiles.match(x), parts)
-
- def listContent(self):
- command = "vb" if self.fullpath else "lb"
- p = self.call_unrar(command, "-v", self.file, password=self.password)
- out, err = p.communicate()
-
- if "Cannot open" in err:
- raise ArchiveError("Cannot open file")
-
- if err.strip(): #: only log error at this point
- self.m.logError(err.strip())
-
- result = set()
-
- for f in decode(out).splitlines():
- f = f.strip()
- result.add(safe_join(self.out, f))
-
- self.files = result
-
- def call_unrar(self, command, *xargs, **kwargs):
- args = []
- # overwrite flag
- args.append("-o+") if self.overwrite else args.append("-o-")
-
- if self.excludefiles:
- for word in self.excludefiles.split(';'):
- args.append("-x%s" % word)
-
- # assume yes on all queries
- args.append("-y")
-
- # set a password
- if "password" in kwargs and kwargs['password']:
- args.append("-p%s" % kwargs['password'])
- else:
- args.append("-p-")
-
- # NOTE: return codes are not reliable, some kind of threading, cleanup whatever issue
- call = [self.CMD, command] + args + list(xargs)
- self.m.logDebug(" ".join(call))
-
- p = Popen(call, stdout=PIPE, stderr=PIPE)
-
- return p
-
-
-def renice(pid, value):
- if os.name != "nt" and value:
- try:
- Popen(["renice", str(value), str(pid)], stdout=PIPE, stderr=PIPE, bufsize=-1)
- except:
- print "Renice failed"
diff --git a/module/plugins/internal/UnZip.py b/module/plugins/internal/UnZip.py
deleted file mode 100644
index e339434f9..000000000
--- a/module/plugins/internal/UnZip.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import sys
-import zipfile
-
-from module.plugins.internal.AbstractExtractor import AbtractExtractor
-
-
-class UnZip(AbtractExtractor):
- __name__ = "UnZip"
- __version__ = "0.1"
-
- __description__ = """Zip extractor plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- @staticmethod
- def checkDeps():
- return sys.version_info[:2] >= (2, 6)
-
- @staticmethod
- def getTargets(files_ids):
- result = []
-
- for file, id in files_ids:
- if file.endswith(".zip"):
- result.append((file, id))
-
- return result
-
- def extract(self, progress, password=None):
- z = zipfile.ZipFile(self.file)
- self.files = z.namelist()
- z.extractall(self.out)
-
- def getDeleteFiles(self):
- return [self.file]
diff --git a/module/plugins/internal/XFSPAccount.py b/module/plugins/internal/XFSPAccount.py
deleted file mode 100644
index 5c0bfc893..000000000
--- a/module/plugins/internal/XFSPAccount.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import mktime, strptime
-
-from module.plugins.Account import Account
-from module.plugins.internal.SimpleHoster import parseHtmlForm
-from module.utils import parseFileSize
-
-
-class XFSPAccount(Account):
- __name__ = "XFSPAccount"
- __type__ = "account"
- __version__ = "0.06"
-
- __description__ = """XFileSharingPro base account plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- MAIN_PAGE = None
-
- VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire:</TD><TD><b>([^<]+)</b>'
- TRAFFIC_LEFT_PATTERN = r'>Traffic available today:</TD><TD><b>([^<]+)</b>'
- LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|>Error<'
- PREMIUM_PATTERN = r'>Renew premium<'
-
-
- def loadAccountInfo(self, user, req):
- html = req.load(self.MAIN_PAGE + "?op=my_account", decode=True)
-
- validuntil = trafficleft = None
- premium = True if re.search(self.PREMIUM_PATTERN, html) else False
-
- m = re.search(self.VALID_UNTIL_PATTERN, html)
- if m:
- premium = True
- trafficleft = -1
- try:
- self.logDebug(m.group(1))
- validuntil = mktime(strptime(m.group(1), "%d %B %Y"))
- except Exception, e:
- self.logError(e)
- else:
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- if m:
- trafficleft = m.group(1)
- if "Unlimited" in trafficleft:
- premium = True
- else:
- trafficleft = parseFileSize(trafficleft) / 1024
-
- return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
-
- def login(self, user, data, req):
- html = req.load('%slogin.html' % self.MAIN_PAGE, decode=True)
-
- action, inputs = parseHtmlForm('name="FL"', html)
- if not inputs:
- inputs = {"op": "login",
- "redirect": self.MAIN_PAGE}
-
- inputs.update({"login": user,
- "password": data['password']})
-
- html = req.load(self.MAIN_PAGE, post=inputs, decode=True)
-
- if re.search(self.LOGIN_FAIL_PATTERN, html):
- self.wrongPassword()
diff --git a/module/plugins/ocr/GigasizeCom.py b/module/plugins/ocr/GigasizeCom.py
deleted file mode 100644
index ba0b805e6..000000000
--- a/module/plugins/ocr/GigasizeCom.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.OCR import OCR
-
-
-class GigasizeCom(OCR):
- __name__ = "GigasizeCom"
- __type__ = "ocr"
- __version__ = "0.1"
-
- __description__ = """Gigasize.com ocr plugin"""
- __author_name__ = "pyLoad Team"
- __author_mail__ = "admin@pyload.org"
-
-
- def __init__(self):
- OCR.__init__(self)
-
- def get_captcha(self, image):
- self.load_image(image)
- self.threshold(2.8)
- self.run_tesser(True, False, False, True)
- return self.result_captcha
diff --git a/module/plugins/ocr/LinksaveIn.py b/module/plugins/ocr/LinksaveIn.py
deleted file mode 100644
index 3ae139a4e..000000000
--- a/module/plugins/ocr/LinksaveIn.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.OCR import OCR
-from PIL import Image
-from os import sep
-from os.path import abspath, dirname
-from glob import glob
-
-
-class LinksaveIn(OCR):
- __name__ = "LinksaveIn"
- __type__ = "ocr"
- __version__ = "0.1"
-
- __description__ = """Linksave.in ocr plugin"""
- __author_name__ = "pyLoad Team"
- __author_mail__ = "admin@pyload.org"
-
-
- def __init__(self):
- OCR.__init__(self)
- self.data_dir = dirname(abspath(__file__)) + sep + "LinksaveIn" + sep
-
- def load_image(self, image):
- im = Image.open(image)
- frame_nr = 0
-
- lut = im.resize((256, 1))
- lut.putdata(range(256))
- lut = list(lut.convert("RGB").getdata())
-
- new = Image.new("RGB", im.size)
- npix = new.load()
- while True:
- try:
- im.seek(frame_nr)
- except EOFError:
- break
- frame = im.copy()
- pix = frame.load()
- for x in xrange(frame.size[0]):
- for y in xrange(frame.size[1]):
- if lut[pix[x, y]] != (0,0,0):
- npix[x, y] = lut[pix[x, y]]
- frame_nr += 1
- new.save(self.data_dir+"unblacked.png")
- self.image = new.copy()
- self.pixels = self.image.load()
- self.result_captcha = ''
-
- def get_bg(self):
- stat = {}
- cstat = {}
- img = self.image.convert("P")
- for bgpath in glob(self.data_dir+"bg/*.gif"):
- stat[bgpath] = 0
- bg = Image.open(bgpath)
-
- bglut = bg.resize((256, 1))
- bglut.putdata(range(256))
- bglut = list(bglut.convert("RGB").getdata())
-
- lut = img.resize((256, 1))
- lut.putdata(range(256))
- lut = list(lut.convert("RGB").getdata())
-
- bgpix = bg.load()
- pix = img.load()
- for x in xrange(bg.size[0]):
- for y in xrange(bg.size[1]):
- rgb_bg = bglut[bgpix[x, y]]
- rgb_c = lut[pix[x, y]]
- try:
- cstat[rgb_c] += 1
- except:
- cstat[rgb_c] = 1
- if rgb_bg == rgb_c:
- stat[bgpath] += 1
- max_p = 0
- bg = ""
- for bgpath, value in stat.items():
- if max_p < value:
- bg = bgpath
- max_p = value
- return bg
-
- def substract_bg(self, bgpath):
- bg = Image.open(bgpath)
- img = self.image.convert("P")
-
- bglut = bg.resize((256, 1))
- bglut.putdata(range(256))
- bglut = list(bglut.convert("RGB").getdata())
-
- lut = img.resize((256, 1))
- lut.putdata(range(256))
- lut = list(lut.convert("RGB").getdata())
-
- bgpix = bg.load()
- pix = img.load()
- orgpix = self.image.load()
- for x in xrange(bg.size[0]):
- for y in xrange(bg.size[1]):
- rgb_bg = bglut[bgpix[x, y]]
- rgb_c = lut[pix[x, y]]
- if rgb_c == rgb_bg:
- orgpix[x, y] = (255,255,255)
-
- def eval_black_white(self):
- new = Image.new("RGB", (140, 75))
- pix = new.load()
- orgpix = self.image.load()
- thresh = 4
- for x in xrange(new.size[0]):
- for y in xrange(new.size[1]):
- rgb = orgpix[x, y]
- r, g, b = rgb
- pix[x, y] = (255,255,255)
- if r > max(b, g)+thresh:
- pix[x, y] = (0,0,0)
- if g < min(r, b):
- pix[x, y] = (0,0,0)
- if g > max(r, b)+thresh:
- pix[x, y] = (0,0,0)
- if b > max(r, g)+thresh:
- pix[x, y] = (0,0,0)
- self.image = new
- self.pixels = self.image.load()
-
- def get_captcha(self, image):
- self.load_image(image)
- bg = self.get_bg()
- self.substract_bg(bg)
- self.eval_black_white()
- self.to_greyscale()
- self.image.save(self.data_dir+"cleaned_pass1.png")
- self.clean(4)
- self.clean(4)
- self.image.save(self.data_dir+"cleaned_pass2.png")
- letters = self.split_captcha_letters()
- final = ""
- for n, letter in enumerate(letters):
- self.image = letter
- self.image.save(ocr.data_dir+"letter%d.png" % n)
- self.run_tesser(True, True, False, False)
- final += self.result_captcha
-
- return final
diff --git a/module/plugins/ocr/NetloadIn.py b/module/plugins/ocr/NetloadIn.py
deleted file mode 100644
index 0de88302e..000000000
--- a/module/plugins/ocr/NetloadIn.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.OCR import OCR
-
-class NetloadIn(OCR):
- __name__ = "NetloadIn"
- __type__ = "ocr"
- __version__ = "0.1"
-
- __description__ = """Netload.in ocr plugin"""
- __author_name__ = "pyLoad Team"
- __author_mail__ = "admin@pyload.org"
-
-
- def __init__(self):
- OCR.__init__(self)
-
- def get_captcha(self, image):
- self.load_image(image)
- self.to_greyscale()
- self.clean(3)
- self.clean(3)
- self.run_tesser(True, True, False, False)
-
- self.result_captcha = self.result_captcha.replace(" ", "")[:4] # cut to 4 numbers
-
- return self.result_captcha
diff --git a/module/plugins/ocr/ShareonlineBiz.py b/module/plugins/ocr/ShareonlineBiz.py
deleted file mode 100644
index 0ad018bf9..000000000
--- a/module/plugins/ocr/ShareonlineBiz.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.OCR import OCR
-
-
-class ShareonlineBiz(OCR):
- __name__ = "ShareonlineBiz"
- __type__ = "ocr"
- __version__ = "0.1"
-
- __description__ = """Shareonline.biz ocr plugin"""
- __author_name__ = "RaNaN"
- __author_mail__ = "RaNaN@pyload.org"
-
-
- def __init__(self):
- OCR.__init__(self)
-
- def get_captcha(self, image):
- self.load_image(image)
- self.to_greyscale()
- self.image = self.image.resize((160, 50))
- self.pixels = self.image.load()
- self.threshold(1.85)
- #self.eval_black_white(240)
- #self.derotate_by_average()
-
- letters = self.split_captcha_letters()
-
- final = ""
- for letter in letters:
- self.image = letter
- self.run_tesser(True, True, False, False)
- final += self.result_captcha
-
- return final
-
- #tesseract at 60%
diff --git a/module/remote/RemoteManager.py b/module/remote/RemoteManager.py
deleted file mode 100644
index 723bc0c0e..000000000
--- a/module/remote/RemoteManager.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: mkaay
-"""
-
-from threading import Thread
-from traceback import print_exc
-
-class BackendBase(Thread):
- def __init__(self, manager):
- Thread.__init__(self)
- self.m = manager
- self.core = manager.core
- self.enabled = True
- self.running = False
-
- def run(self):
- self.running = True
- try:
- self.serve()
- except Exception, e:
- self.core.log.error(_("Remote backend error: %s") % e)
- if self.core.debug:
- print_exc()
- finally:
- self.running = False
-
- def setup(self, host, port):
- pass
-
- def checkDeps(self):
- return True
-
- def serve(self):
- pass
-
- def shutdown(self):
- pass
-
- def stop(self):
- self.enabled = False# set flag and call shutdowm message, so thread can react
- self.shutdown()
-
-
-class RemoteManager:
- available = []
-
- def __init__(self, core):
- self.core = core
- self.backends = []
-
- if self.core.remote:
- self.available.append("ThriftBackend")
-# else:
-# self.available.append("SocketBackend")
-
-
- def startBackends(self):
- host = self.core.config["remote"]["listenaddr"]
- port = self.core.config["remote"]["port"]
-
- for b in self.available:
- klass = getattr(__import__("module.remote.%s" % b, globals(), locals(), [b], -1), b)
- backend = klass(self)
- if not backend.checkDeps():
- continue
- try:
- backend.setup(host, port)
- self.core.log.info(_("Starting %(name)s: %(addr)s:%(port)s") % {"name": b, "addr": host, "port": port})
- except Exception, e:
- self.core.log.error(_("Failed loading backend %(name)s | %(error)s") % {"name": b, "error": str(e)})
- if self.core.debug:
- print_exc()
- else:
- backend.start()
- self.backends.append(backend)
-
- port += 1
diff --git a/module/remote/ThriftBackend.py b/module/remote/ThriftBackend.py
deleted file mode 100644
index f8edc8dd6..000000000
--- a/module/remote/ThriftBackend.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: mkaay, RaNaN
-"""
-from os.path import exists
-
-from module.remote.RemoteManager import BackendBase
-
-from thriftbackend.Processor import Processor
-from thriftbackend.Protocol import ProtocolFactory
-from thriftbackend.Socket import ServerSocket
-from thriftbackend.Transport import TransportFactory
-#from thriftbackend.Transport import TransportFactoryCompressed
-
-from thrift.server import TServer
-
-class ThriftBackend(BackendBase):
- def setup(self, host, port):
- processor = Processor(self.core.api)
-
- key = None
- cert = None
-
- if self.core.config['ssl']['activated']:
- if exists(self.core.config['ssl']['cert']) and exists(self.core.config['ssl']['key']):
- self.core.log.info(_("Using SSL ThriftBackend"))
- key = self.core.config['ssl']['key']
- cert = self.core.config['ssl']['cert']
-
- transport = ServerSocket(port, host, key, cert)
-
-
-# tfactory = TransportFactoryCompressed()
- tfactory = TransportFactory()
- pfactory = ProtocolFactory()
-
- self.server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
- #self.server = TNonblockingServer.TNonblockingServer(processor, transport, tfactory, pfactory)
-
- #server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
-
- def serve(self):
- self.server.serve()
diff --git a/module/setup.py b/module/setup.py
deleted file mode 100644
index d0aee4b28..000000000
--- a/module/setup.py
+++ /dev/null
@@ -1,538 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-import sys
-
-import module.common.pylgettext as gettext
-
-from getpass import getpass
-from os import makedirs
-from os.path import abspath, dirname, exists, join
-from subprocess import PIPE, call
-
-from module.utils import get_console_encoding, versiontuple
-
-
-class Setup:
- """ pyLoads initial setup configuration assistant """
-
- def __init__(self, path, config):
- self.path = path
- self.config = config
- self.stdin_encoding = get_console_encoding(sys.stdin.encoding)
-
-
- def start(self):
- langs = self.config.getMetaData("general", "language")["type"].split(";")
- lang = self.ask(u"Choose setup language", "en", langs)
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("setup", join(self.path, "locale"), languages=[lang, "en"], fallback=True)
- translation.install(True)
-
- #Input shorthand for yes
- self.yes = _("y")
- #Input shorthand for no
- self.no = _("n")
-
- # print
- # print _("Would you like to configure pyLoad via Webinterface?")
- # print _("You need a Browser and a connection to this PC for it.")
- # viaweb = self.ask(_("Start initial webinterface for configuration?"), "y", bool=True)
- # if viaweb:
- # try:
- # from module.threads import ServerThread
- # ServerThread.setup = self
- # import module.webui as webinterface
- # webinterface.run_simple()
- # return False
- # except Exception, e:
- # print "Setup failed with this error: ", e
- # print "Falling back to commandline setup."
-
- print
- print
- print _("Welcome to the pyLoad Configuration Assistant.")
- print _("It will check your system and make a basic setup in order to run pyLoad.")
- print
- print _("The value in brackets [] always is the default value,")
- print _("in case you don't want to change it or you are unsure what to choose, just hit enter.")
- print _(
- "Don't forget: You can always rerun this assistant with --setup or -s parameter, when you start pyload.py .")
- print _("If you have any problems with this assistant hit STRG-C,")
- print _("to abort and don't let him start with pyload.py automatically anymore.")
- print
- print
- raw_input(_("When you are ready for system check, hit enter."))
- print
- print
-
- basic, ssl, captcha, web, js = self.system_check()
- print
- print
-
- if not basic:
- print _("You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad.")
- print _("Please correct this and re-run pyLoad.")
- print
- print _("Setup will now close.")
- print
- print
- raw_input(_("Press Enter to exit."))
- return False
-
- raw_input(_("System check finished, hit enter to see your status report."))
- print
- print
- print _("## Status ##")
- print
-
- avail = []
- if self.check_module("Crypto"):
- avail.append(_("container decrypting"))
- if ssl:
- avail.append(_("ssl connection"))
- if captcha:
- avail.append(_("automatic captcha decryption"))
- if web:
- avail.append(_("webinterface"))
- if js:
- avail.append(_("extended Click'N'Load"))
-
- string = ""
-
- for av in avail:
- string += ", " + av
-
- print _("AVAILABLE FEATURES:") + string[1:]
- print
-
- if len(avail) < 5:
- print _("MISSING FEATURES: ")
-
- if not self.check_module("Crypto"):
- print _("- no py-crypto available")
- print _("You need this if you want to decrypt container files.")
- print
-
- if not ssl:
- print _("- no SSL available")
- print _("This is needed if you want to establish a secure connection to core or webinterface.")
- print _("If you only want to access locally to pyLoad ssl is not usefull.")
- print
-
- if not captcha:
- print _("- no Captcha Recognition available")
- print _("Only needed for some hosters and as freeuser.")
- print
-
- if not js:
- print _("- no JavaScript engine found")
- print _("You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino")
- print
-
- print
- print _("You can abort the setup now and fix some dependicies if you want.")
-
- print
- con = self.ask(_("Continue with setup?"), self.yes, bool=True)
-
- if not con:
- return False
-
- print
- print
- print _("CURRENT CONFIG PATH: %s") % abspath("")
- print
- print _("NOTE: If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it.")
- path = self.ask(_("Do you want to change the config path?"), self.no, bool=True)
- if path:
- print
- self.conf_path()
- #calls exit when changed
-
- print
- print _("Do you want to configure login data and basic settings?")
- print _("This is recommend for first run.")
- con = self.ask(_("Make basic setup?"), self.yes, bool=True)
-
- if con:
- print
- print
- self.conf_basic()
-
- if ssl:
- print
- print _("Do you want to configure ssl?")
- ssl = self.ask(_("Configure ssl?"), self.no, bool=True)
- if ssl:
- print
- print
- self.conf_ssl()
-
- if web:
- print
- print _("Do you want to configure webinterface?")
- web = self.ask(_("Configure webinterface?"), self.yes, bool=True)
- if web:
- print
- print
- self.conf_web()
-
- print
- print
- print _("Setup finished successfully!")
- print
- print
- raw_input(_("Hit enter to exit and restart pyLoad."))
- return True
-
-
- def system_check(self):
- """ make a systemcheck and return the results"""
-
- print _("## System Information ##")
- print
- print _("Platform: %s") % sys.platform
- print _("Operating System: %s") % os.name
- print _("Python: %s") % sys.version.replace("\n", "")
- print
- print
-
- print _("## System Check ##")
- print
-
- if sys.version_info[:2] > (2, 7):
- print _("Your python version is to new, Please use Python 2.6/2.7")
- python = False
- elif sys.version_info[:2] < (2, 5):
- print _("Your python version is to old, Please use at least Python 2.5")
- python = False
- else:
- print _("Python Version: OK")
- python = True
-
- curl = self.check_module("pycurl")
- self.print_dep("pycurl", curl)
-
- sqlite = self.check_module("sqlite3")
- self.print_dep("sqlite3", sqlite)
-
- basic = python and curl and sqlite
-
- print
-
- crypto = self.check_module("Crypto")
- self.print_dep("pycrypto", crypto)
-
- ssl = self.check_module("OpenSSL")
- self.print_dep("py-OpenSSL", ssl)
-
- print
-
- pil = self.check_module("PIL.Image")
- self.print_dep("PIL/Pillow", pil)
-
- if os.name == "nt":
- tesser = self.check_prog([join(pypath, "tesseract", "tesseract.exe"), "-v"])
- else:
- tesser = self.check_prog(["tesseract", "-v"])
-
- self.print_dep("tesseract", tesser)
-
- captcha = pil and tesser
-
- print
-
- try:
- import jinja2
-
- v = jinja2.__version__
- if v and versiontuple(v) < (2, 5, 0):
- jinja = False
- else:
- jinja = True
- except:
- jinja = False
-
- jinja = self.print_dep("jinja2", jinja)
-
- beaker = self.check_module("beaker")
- self.print_dep("beaker", beaker)
-
- bjoern = self.check_module("bjoern")
- self.print_dep("bjoern", bjoern)
-
- web = sqlite and beaker
-
- from module.common import JsEngine
- js = True if JsEngine.ENGINE else False
- self.print_dep(_("JS engine"), js)
-
- if not jinja:
- print
- print
- print _("WARNING: Your installed jinja2 version %s seems too old.") % jinja2.__version__
- print _("You can safely continue but if the webinterface is not working,")
- print _("please upgrade or uninstall it, because pyLoad self-includes jinja2 libary.")
-
- return basic, ssl, captcha, web, js
-
-
- def conf_basic(self):
- print _("## Basic Setup ##")
-
- print
- print _("The following logindata is valid for CLI and webinterface.")
-
- from module.database import DatabaseBackend
-
- db = DatabaseBackend(None)
- db.setup()
- print _("NOTE: Consider a password of 10 or more symbols if you expect to access from outside your local network (ex. internet).")
- print
- username = self.ask(_("Username"), "User")
- password = self.ask("", "", password=True)
- db.addUser(username, password)
- db.shutdown()
-
- print
- print _("External clients (GUI, CLI or other) need remote access to work over the network.")
- print _("However, if you only want to use the webinterface you may disable it to save ram.")
- self.config["remote"]["activated"] = self.ask(_("Enable remote access"), self.no, bool=True)
-
- print
- langs = self.config.getMetaData("general", "language")
- self.config["general"]["language"] = self.ask(_("Choose pyLoad language"), "en", langs["type"].split(";"))
-
- print
- self.config["general"]["download_folder"] = self.ask(_("Download folder"), "Downloads")
- print
- self.config["download"]["max_downloads"] = self.ask(_("Max parallel downloads"), "3")
- print
- reconnect = self.ask(_("Use Reconnect?"), self.no, bool=True)
- self.config["reconnect"]["activated"] = reconnect
- if reconnect:
- self.config["reconnect"]["method"] = self.ask(_("Reconnect script location"), "./reconnect.sh")
-
-
- def conf_web(self):
- print _("## Webinterface Setup ##")
-
- print
- self.config["webinterface"]["activated"] = self.ask(_("Activate webinterface?"), self.yes, bool=True)
- print
- print _("Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally.")
- self.config["webinterface"]["host"] = self.ask(_("Address"), "0.0.0.0")
- self.config["webinterface"]["port"] = self.ask(_("Port"), "8000")
- print
- print _("pyLoad offers several server backends, now following a short explanation.")
- print "- builtin:", _("Default server; best choice if you plan to use pyLoad just for you.")
- print "- threaded:", _("Support SSL connection and can serve simultaneously more client flawlessly.")
- print "- fastcgi:", _(
- "Can be used by apache, lighttpd, etc.; needs to be properly configured before.")
- if os.name != "nt":
- print "- lightweight:", _("Very fast alternative to builtin; requires libev and bjoern packages.")
-
- print
- print _("NOTE: In some rare cases the builtin server is not working, if you notice problems with the webinterface")
- print _("come back here and change the builtin server to the threaded one here.")
-
- if os.name == "nt":
- servers = ["builtin", "threaded", "fastcgi"]
- default = "threaded"
- else:
- servers = ["builtin", "threaded", "fastcgi", "lightweight"]
- default = "lightweight" if self.check_module("bjoern") else "builtin"
-
- self.config["webinterface"]["server"] = self.ask(_("Server"), default, servers)
-
-
- def conf_ssl(self):
- print _("## SSL Setup ##")
- print
- print _("Execute these commands from pyLoad config folder to make ssl certificates:")
- print
- print "openssl genrsa -out ssl.key 1024"
- print "openssl req -new -key ssl.key -out ssl.csr"
- print "openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt "
- print
- print _("If you're done and everything went fine, you can activate ssl now.")
-
- self.config["ssl"]["activated"] = self.ask(_("Activate SSL?"), self.yes, bool=True)
-
-
- def set_user(self):
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("setup", join(self.path, "locale"),
- languages=[self.config["general"]["language"], "en"], fallback=True)
- translation.install(True)
-
- from module.database import DatabaseBackend
-
- db = DatabaseBackend(None)
- db.setup()
-
- noaction = True
- try:
- while True:
- print _("Select action")
- print _("1 - Create/Edit user")
- print _("2 - List users")
- print _("3 - Remove user")
- print _("4 - Quit")
- action = raw_input("[1]/2/3/4: ")
- if not action in ("1", "2", "3", "4"):
- continue
- elif action == "1":
- print
- username = self.ask(_("Username"), "User")
- password = self.ask("", "", password=True)
- db.addUser(username, password)
- noaction = False
- elif action == "2":
- print
- print _("Users")
- print "-----"
- users = db.listUsers()
- noaction = False
- for user in users:
- print user
- print "-----"
- print
- elif action == "3":
- print
- username = self.ask(_("Username"), "")
- if username:
- db.removeUser(username)
- noaction = False
- elif action == "4":
- break
- finally:
- if not noaction:
- db.shutdown()
-
-
- def conf_path(self, trans=False):
- if trans:
- gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
- translation = gettext.translation("setup", join(self.path, "locale"),
- languages=[self.config["general"]["language"], "en"], fallback=True)
- translation.install(True)
-
- print _("Setting new config path, current configuration will not be transfered!")
- path = self.ask(_("CONFIG PATH"), abspath(""))
- try:
- path = join(pypath, path)
- if not exists(path):
- makedirs(path)
- f = open(join(pypath, "module", "config", "configdir"), "wb")
- f.write(path)
- f.close()
- print
- print
- print _("pyLoad config path changed, setup will now close!")
- print
- print
- raw_input(_("Press Enter to exit."))
- sys.exit()
- except Exception, e:
- print _("Setting config path failed: %s") % str(e)
-
-
- def print_dep(self, name, value):
- """Print Status of dependency"""
- if value:
- print _("%s: OK") % name
- else:
- print _("%s: MISSING") % name
-
-
- def check_module(self, module):
- try:
- __import__(module)
- return True
- except:
- return False
-
-
- def check_prog(self, command):
- pipe = PIPE
- try:
- call(command, stdout=pipe, stderr=pipe)
- return True
- except:
- return False
-
-
- def ask(self, qst, default, answers=[], bool=False, password=False):
- """produce one line to asking for input"""
- if answers:
- info = "("
-
- for i, answer in enumerate(answers):
- info += (", " if i != 0 else "") + str((answer == default and "[%s]" % answer) or answer)
-
- info += ")"
- elif bool:
- if default == self.yes:
- info = "([%s]/%s)" % (self.yes, self.no)
- else:
- info = "(%s/[%s])" % (self.yes, self.no)
- else:
- info = "[%s]" % default
-
- if password:
- p1 = True
- p2 = False
- pwlen = 8
- while p1 != p2:
- # getpass(_("Password: ")) will crash on systems with broken locales (Win, NAS)
- sys.stdout.write(_("Password: "))
- p1 = getpass("")
-
- if len(p1) < pwlen:
- print _("Password too short! Use at least %s symbols." % pwlen)
- continue
- elif not p1.isalnum():
- print _("Password must be alphanumeric.")
- continue
-
- sys.stdout.write(_("Password (again): "))
- p2 = getpass("")
-
- if p1 == p2:
- return p1
- else:
- print _("Passwords did not match.")
-
- while True:
- try:
- input = raw_input(qst + " %s: " % info)
- except KeyboardInterrupt:
- print "\nSetup interrupted"
- sys.exit()
-
- input = input.decode(self.stdin_encoding)
-
- if input.strip() == "":
- input = default
-
- if bool:
- # yes, true, t are inputs for booleans with value true
- if input.lower().strip() in [self.yes, _("yes"), _("true"), _("t"), "yes"]:
- return True
- # no, false, f are inputs for booleans with value false
- elif input.lower().strip() in [self.no, _("no"), _("false"), _("f"), "no"]:
- return False
- else:
- print _("Invalid Input")
- continue
-
- if not answers:
- return input
-
- else:
- if input in answers:
- return input
- else:
- print _("Invalid Input")
diff --git a/module/threads/PluginThread.py b/module/threads/PluginThread.py
deleted file mode 100644
index 03e0bb31b..000000000
--- a/module/threads/PluginThread.py
+++ /dev/null
@@ -1,675 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-from Queue import Queue
-from threading import Thread
-from os import listdir, stat
-from os.path import join
-from time import sleep, time, strftime, gmtime
-from traceback import print_exc, format_exc
-from pprint import pformat
-from sys import exc_info, exc_clear
-from copy import copy
-from types import MethodType
-
-from pycurl import error
-
-from module.PyFile import PyFile
-from module.plugins.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload
-from module.common.packagetools import parseNames
-from module.utils import safe_join
-from module.Api import OnlineStatus
-
-class PluginThread(Thread):
- """abstract base class for thread types"""
-
- #--------------------------------------------------------------------------
- def __init__(self, manager):
- """Constructor"""
- Thread.__init__(self)
- self.setDaemon(True)
- self.m = manager #thread manager
-
-
- def writeDebugReport(self, pyfile):
- """ writes a
- :return:
- """
-
- dump_name = "debug_%s_%s.zip" % (pyfile.pluginname, strftime("%d-%m-%Y_%H-%M-%S"))
- dump = self.getDebugDump(pyfile)
-
- try:
- import zipfile
-
- zip = zipfile.ZipFile(dump_name, "w")
-
- for f in listdir(join("tmp", pyfile.pluginname)):
- try:
- # avoid encoding errors
- zip.write(join("tmp", pyfile.pluginname, f), safe_join(pyfile.pluginname, f))
- except:
- pass
-
- info = zipfile.ZipInfo(safe_join(pyfile.pluginname, "debug_Report.txt"), gmtime())
- info.external_attr = 0644 << 16L # change permissions
-
- zip.writestr(info, dump)
- zip.close()
-
- if not stat(dump_name).st_size:
- raise Exception("Empty Zipfile")
-
- except Exception, e:
- self.m.log.debug("Error creating zip file: %s" % e)
-
- dump_name = dump_name.replace(".zip", ".txt")
- f = open(dump_name, "wb")
- f.write(dump)
- f.close()
-
- self.m.core.log.info("Debug Report written to %s" % dump_name)
-
- def getDebugDump(self, pyfile):
- dump = "pyLoad %s Debug Report of %s %s \n\nTRACEBACK:\n %s \n\nFRAMESTACK:\n" % (
- self.m.core.api.getServerVersion(), pyfile.pluginname, pyfile.plugin.__version__, format_exc())
-
- tb = exc_info()[2]
- stack = []
- while tb:
- stack.append(tb.tb_frame)
- tb = tb.tb_next
-
- for frame in stack[1:]:
- dump += "\nFrame %s in %s at line %s\n" % (frame.f_code.co_name,
- frame.f_code.co_filename,
- frame.f_lineno)
-
- for key, value in frame.f_locals.items():
- dump += "\t%20s = " % key
- try:
- dump += pformat(value) + "\n"
- except Exception, e:
- dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
-
- del frame
-
- del stack #delete it just to be sure...
-
- dump += "\n\nPLUGIN OBJECT DUMP: \n\n"
-
- for name in dir(pyfile.plugin):
- attr = getattr(pyfile.plugin, name)
- if not name.endswith("__") and type(attr) != MethodType:
- dump += "\t%20s = " % name
- try:
- dump += pformat(attr) + "\n"
- except Exception, e:
- dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
-
- dump += "\nPYFILE OBJECT DUMP: \n\n"
-
- for name in dir(pyfile):
- attr = getattr(pyfile, name)
- if not name.endswith("__") and type(attr) != MethodType:
- dump += "\t%20s = " % name
- try:
- dump += pformat(attr) + "\n"
- except Exception, e:
- dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
-
- if pyfile.pluginname in self.m.core.config.plugin:
- dump += "\n\nCONFIG: \n\n"
- dump += pformat(self.m.core.config.plugin[pyfile.pluginname]) + "\n"
-
- return dump
-
- def clean(self, pyfile):
- """ set thread unactive and release pyfile """
- self.active = False
- pyfile.release()
-
-
-class DownloadThread(PluginThread):
- """thread for downloading files from 'real' hoster plugins"""
-
- #--------------------------------------------------------------------------
- def __init__(self, manager):
- """Constructor"""
- PluginThread.__init__(self, manager)
-
- self.queue = Queue() # job queue
- self.active = False
-
- self.start()
-
- #--------------------------------------------------------------------------
- def run(self):
- """run method"""
- pyfile = None
-
- while True:
- del pyfile
- self.active = self.queue.get()
- pyfile = self.active
-
- if self.active == "quit":
- self.active = False
- self.m.threads.remove(self)
- return True
-
- try:
- if not pyfile.hasPlugin(): continue
- #this pyfile was deleted while queueing
-
- pyfile.plugin.checkForSameFiles(starting=True)
- self.m.log.info(_("Download starts: %s" % pyfile.name))
-
- # start download
- self.m.core.hookManager.downloadPreparing(pyfile)
- pyfile.plugin.preprocessing(self)
-
- self.m.log.info(_("Download finished: %s") % pyfile.name)
- self.m.core.hookManager.downloadFinished(pyfile)
- self.m.core.files.checkPackageFinished(pyfile)
-
- except NotImplementedError:
- self.m.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname)
- pyfile.setStatus("failed")
- pyfile.error = "Plugin does not work"
- self.clean(pyfile)
- continue
-
- except Abort:
- try:
- self.m.log.info(_("Download aborted: %s") % pyfile.name)
- except:
- pass
-
- pyfile.setStatus("aborted")
-
- self.clean(pyfile)
- continue
-
- except Reconnect:
- self.queue.put(pyfile)
- #pyfile.req.clearCookies()
-
- while self.m.reconnecting.isSet():
- sleep(0.5)
-
- continue
-
- except Retry, e:
- reason = e.args[0]
- self.m.log.info(_("Download restarted: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": reason})
- self.queue.put(pyfile)
- continue
-
- except Fail, e:
- msg = e.args[0]
-
- if msg == "offline":
- pyfile.setStatus("offline")
- self.m.log.warning(_("Download is offline: %s") % pyfile.name)
- elif msg == "temp. offline":
- pyfile.setStatus("temp. offline")
- self.m.log.warning(_("Download is temporary offline: %s") % pyfile.name)
- else:
- pyfile.setStatus("failed")
- self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg})
- pyfile.error = msg
-
- self.m.core.hookManager.downloadFailed(pyfile)
- self.clean(pyfile)
- continue
-
- except error, e:
- if len(e.args) == 2:
- code, msg = e.args
- else:
- code = 0
- msg = e.args
-
- self.m.log.debug("pycurl exception %s: %s" % (code, msg))
-
- if code in (7, 18, 28, 52, 56):
- self.m.log.warning(_("Couldn't connect to host or connection reset, waiting 1 minute and retry."))
- wait = time() + 60
-
- pyfile.waitUntil = wait
- pyfile.setStatus("waiting")
- while time() < wait:
- sleep(1)
- if pyfile.abort:
- break
-
- if pyfile.abort:
- self.m.log.info(_("Download aborted: %s") % pyfile.name)
- pyfile.setStatus("aborted")
-
- self.clean(pyfile)
- else:
- self.queue.put(pyfile)
-
- continue
-
- else:
- pyfile.setStatus("failed")
- self.m.log.error("pycurl error %s: %s" % (code, msg))
- if self.m.core.debug:
- print_exc()
- self.writeDebugReport(pyfile)
-
- self.m.core.hookManager.downloadFailed(pyfile)
-
- self.clean(pyfile)
- continue
-
- except SkipDownload, e:
- pyfile.setStatus("skipped")
-
- self.m.log.info(
- _("Download skipped: %(name)s due to %(plugin)s") % {"name": pyfile.name, "plugin": e.message})
-
- self.clean(pyfile)
-
- self.m.core.files.checkPackageFinished(pyfile)
-
- self.active = False
- self.m.core.files.save()
-
- continue
-
-
- except Exception, e:
- pyfile.setStatus("failed")
- self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": str(e)})
- pyfile.error = str(e)
-
- if self.m.core.debug:
- print_exc()
- self.writeDebugReport(pyfile)
-
- self.m.core.hookManager.downloadFailed(pyfile)
- self.clean(pyfile)
- continue
-
- finally:
- self.m.core.files.save()
- pyfile.checkIfProcessed()
- exc_clear()
-
- #pyfile.plugin.req.clean()
-
- self.active = False
- pyfile.finishIfDone()
- self.m.core.files.save()
-
-
- def put(self, job):
- """assing job to thread"""
- self.queue.put(job)
-
-
- def stop(self):
- """stops the thread"""
- self.put("quit")
-
-
-class DecrypterThread(PluginThread):
- """thread for decrypting"""
-
- def __init__(self, manager, pyfile):
- """constructor"""
- PluginThread.__init__(self, manager)
-
- self.active = pyfile
- manager.localThreads.append(self)
-
- pyfile.setStatus("decrypting")
-
- self.start()
-
- def getActiveFiles(self):
- return [self.active]
-
- def run(self):
- """run method"""
-
- pyfile = self.active
- retry = False
-
- try:
- self.m.log.info(_("Decrypting starts: %s") % self.active.name)
- self.active.plugin.preprocessing(self)
-
- except NotImplementedError:
- self.m.log.error(_("Plugin %s is missing a function.") % self.active.pluginname)
- return
-
- except Fail, e:
- msg = e.args[0]
-
- if msg == "offline":
- self.active.setStatus("offline")
- self.m.log.warning(_("Download is offline: %s") % self.active.name)
- else:
- self.active.setStatus("failed")
- self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": msg})
- self.active.error = msg
-
- return
-
- except Abort:
- self.m.log.info(_("Download aborted: %s") % pyfile.name)
- pyfile.setStatus("aborted")
-
- return
-
- except Retry:
- self.m.log.info(_("Retrying %s") % self.active.name)
- retry = True
- return self.run()
-
- except Exception, e:
- self.active.setStatus("failed")
- self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": str(e)})
- self.active.error = str(e)
-
- if self.m.core.debug:
- print_exc()
- self.writeDebugReport(pyfile)
-
- return
-
-
- finally:
- if not retry:
- self.active.release()
- self.active = False
- self.m.core.files.save()
- self.m.localThreads.remove(self)
- exc_clear()
-
-
- #self.m.core.hookManager.downloadFinished(pyfile)
-
-
- #self.m.localThreads.remove(self)
- #self.active.finishIfDone()
- if not retry:
- pyfile.delete()
-
-
-class HookThread(PluginThread):
- """thread for hooks"""
-
- #--------------------------------------------------------------------------
- def __init__(self, m, function, args, kwargs):
- """Constructor"""
- PluginThread.__init__(self, m)
-
- self.f = function
- self.args = args
- self.kwargs = kwargs
-
- self.active = []
-
- m.localThreads.append(self)
-
- self.start()
-
- def getActiveFiles(self):
- return self.active
-
- def addActive(self, pyfile):
- """ Adds a pyfile to active list and thus will be displayed on overview"""
- if pyfile not in self.active:
- self.active.append(pyfile)
-
- def finishFile(self, pyfile):
- if pyfile in self.active:
- self.active.remove(pyfile)
-
- pyfile.finishIfDone()
-
- def run(self):
- try:
- try:
- self.kwargs["thread"] = self
- self.f(*self.args, **self.kwargs)
- except TypeError, e:
- #dirty method to filter out exceptions
- if "unexpected keyword argument 'thread'" not in e.args[0]:
- raise
-
- del self.kwargs["thread"]
- self.f(*self.args, **self.kwargs)
- finally:
- local = copy(self.active)
- for x in local:
- self.finishFile(x)
-
- self.m.localThreads.remove(self)
-
-
-class InfoThread(PluginThread):
- def __init__(self, manager, data, pid=-1, rid=-1, add=False):
- """Constructor"""
- PluginThread.__init__(self, manager)
-
- self.data = data
- self.pid = pid # package id
- # [ .. (name, plugin) .. ]
-
- self.rid = rid #result id
- self.add = add #add packages instead of return result
-
- self.cache = [] #accumulated data
-
- self.start()
-
- def run(self):
- """run method"""
-
- plugins = {}
- container = []
-
- for url, plugin in self.data:
- if plugin in plugins:
- plugins[plugin].append(url)
- else:
- plugins[plugin] = [url]
-
-
- # filter out container plugins
- for name in self.m.core.pluginManager.containerPlugins:
- if name in plugins:
- container.extend([(name, url) for url in plugins[name]])
-
- del plugins[name]
-
- #directly write to database
- if self.pid > -1:
- for pluginname, urls in plugins.iteritems():
- plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
- if hasattr(plugin, "getInfo"):
- self.fetchForPlugin(pluginname, plugin, urls, self.updateDB)
- self.m.core.files.save()
-
- elif self.add:
- for pluginname, urls in plugins.iteritems():
- plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
- if hasattr(plugin, "getInfo"):
- self.fetchForPlugin(pluginname, plugin, urls, self.updateCache, True)
-
- else:
- #generate default result
- result = [(url, 0, 3, url) for url in urls]
-
- self.updateCache(pluginname, result)
-
- packs = parseNames([(name, url) for name, x, y, url in self.cache])
-
- self.m.log.debug("Fetched and generated %d packages" % len(packs))
-
- for k, v in packs:
- self.m.core.api.addPackage(k, v)
-
- #empty cache
- del self.cache[:]
-
- else: #post the results
-
-
- for name, url in container:
- #attach container content
- try:
- data = self.decryptContainer(name, url)
- except:
- print_exc()
- self.m.log.error("Could not decrypt container.")
- data = []
-
- for url, plugin in data:
- if plugin in plugins:
- plugins[plugin].append(url)
- else:
- plugins[plugin] = [url]
-
- self.m.infoResults[self.rid] = {}
-
- for pluginname, urls in plugins.iteritems():
- plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
- if hasattr(plugin, "getInfo"):
- self.fetchForPlugin(pluginname, plugin, urls, self.updateResult, True)
-
- #force to process cache
- if self.cache:
- self.updateResult(pluginname, [], True)
-
- else:
- #generate default result
- result = [(url, 0, 3, url) for url in urls]
-
- self.updateResult(pluginname, result, True)
-
- self.m.infoResults[self.rid]["ALL_INFO_FETCHED"] = {}
-
- self.m.timestamp = time() + 5 * 60
-
-
- def updateDB(self, plugin, result):
- self.m.core.files.updateFileInfo(result, self.pid)
-
- def updateResult(self, plugin, result, force=False):
- #parse package name and generate result
- #accumulate results
-
- self.cache.extend(result)
-
- if len(self.cache) >= 20 or force:
- #used for package generating
- tmp = [(name, (url, OnlineStatus(name, plugin, "unknown", status, int(size))))
- for name, size, status, url in self.cache]
-
- data = parseNames(tmp)
- result = {}
- for k, v in data.iteritems():
- for url, status in v:
- status.packagename = k
- result[url] = status
-
- self.m.setInfoResults(self.rid, result)
-
- self.cache = []
-
- def updateCache(self, plugin, result):
- self.cache.extend(result)
-
- def fetchForPlugin(self, pluginname, plugin, urls, cb, err=None):
- try:
- result = [] #result loaded from cache
- process = [] #urls to process
- for url in urls:
- if url in self.m.infoCache:
- result.append(self.m.infoCache[url])
- else:
- process.append(url)
-
- if result:
- self.m.log.debug("Fetched %d values from cache for %s" % (len(result), pluginname))
- cb(pluginname, result)
-
- if process:
- self.m.log.debug("Run Info Fetching for %s" % pluginname)
- for result in plugin.getInfo(process):
- #result = [ .. (name, size, status, url) .. ]
- if not type(result) == list: result = [result]
-
- for res in result:
- self.m.infoCache[res[3]] = res
-
- cb(pluginname, result)
-
- self.m.log.debug("Finished Info Fetching for %s" % pluginname)
- except Exception, e:
- self.m.log.warning(_("Info Fetching for %(name)s failed | %(err)s") %
- {"name": pluginname, "err": str(e)})
- if self.m.core.debug:
- print_exc()
-
- # generate default results
- if err:
- result = [(url, 0, 3, url) for url in urls]
- cb(pluginname, result)
-
-
- def decryptContainer(self, plugin, url):
- data = []
- # only works on container plugins
-
- self.m.log.debug("Pre decrypting %s with %s" % (url, plugin))
-
- # dummy pyfile
- pyfile = PyFile(self.m.core.files, -1, url, url, 0, 0, "", plugin, -1, -1)
-
- pyfile.initPlugin()
-
- # little plugin lifecycle
- try:
- pyfile.plugin.setup()
- pyfile.plugin.loadToDisk()
- pyfile.plugin.decrypt(pyfile)
- pyfile.plugin.deleteTmp()
-
- for pack in pyfile.plugin.packages:
- pyfile.plugin.urls.extend(pack[1])
-
- data = self.m.core.pluginManager.parseUrls(pyfile.plugin.urls)
-
- self.m.log.debug("Got %d links." % len(data))
-
- except Exception, e:
- self.m.log.debug("Pre decrypting error: %s" % str(e))
- finally:
- pyfile.release()
-
- return data
diff --git a/module/threads/ServerThread.py b/module/threads/ServerThread.py
deleted file mode 100644
index e9fe14708..000000000
--- a/module/threads/ServerThread.py
+++ /dev/null
@@ -1,108 +0,0 @@
-from __future__ import with_statement
-from os.path import exists
-
-import os
-import threading
-import logging
-
-core = None
-setup = None
-log = logging.getLogger("log")
-
-class WebServer(threading.Thread):
- def __init__(self, pycore):
- global core
- threading.Thread.__init__(self)
- self.core = pycore
- core = pycore
- self.running = True
- self.server = pycore.config['webinterface']['server']
- self.https = pycore.config['webinterface']['https']
- self.cert = pycore.config["ssl"]["cert"]
- self.key = pycore.config["ssl"]["key"]
- self.host = pycore.config['webinterface']['host']
- self.port = pycore.config['webinterface']['port']
-
- self.setDaemon(True)
-
- def run(self):
- import module.webui as webinterface
- global webinterface
-
- reset = False
-
- if self.https and (not exists(self.cert) or not exists(self.key)):
- log.warning(_("SSL certificates not found."))
- self.https = False
-
- if self.server in ("lighttpd", "nginx"):
- log.warning(_("Sorry, we dropped support for starting %s directly within pyLoad") % self.server)
- log.warning(_("You can use the threaded server which offers good performance and ssl,"))
- log.warning(_("of course you can still use your existing %s with pyLoads fastcgi server") % self.server)
- log.warning(_("sample configs are located in the module/web/servers directory"))
- reset = True
- elif self.server == "fastcgi":
- try:
- import flup
- except:
- log.warning(_("Can't use %(server)s, python-flup is not installed!") % {
- "server": self.server})
- reset = True
-
- if reset or self.server == "lightweight":
- if os.name != "nt":
- try:
- import bjoern
- except Exception, e:
- log.error(_("Error importing lightweight server: %s") % e)
- log.warning(_("You need to download and compile bjoern, https://github.com/jonashaag/bjoern"))
- log.warning(_("Copy the boern.so to module/lib folder or use setup.py install"))
- log.warning(_("Of course you need to be familiar with linux and know how to compile software"))
- self.server = "builtin"
- else:
- self.core.log.info(_("Server set to threaded, due to known performance problems on windows."))
- self.core.config['webinterface']['server'] = "threaded"
- self.server = "threaded"
-
- if self.server == "threaded":
- self.start_threaded()
- elif self.server == "fastcgi":
- self.start_fcgi()
- elif self.server == "lightweight":
- self.start_lightweight()
- else:
- self.start_builtin()
-
- def start_builtin(self):
-
- if self.https:
- log.warning(_("This server offers no SSL, please consider using threaded instead"))
-
- self.core.log.info(_("Starting builtin webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
- webinterface.run_simple(host=self.host, port=self.port)
-
- def start_threaded(self):
- if self.https:
- self.core.log.info(_("Starting threaded SSL webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
- else:
- self.cert = ""
- self.key = ""
- self.core.log.info(_("Starting threaded webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
-
- webinterface.run_threaded(host=self.host, port=self.port, cert=self.cert, key=self.key)
-
- def start_fcgi(self):
-
- self.core.log.info(_("Starting fastcgi server: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
- webinterface.run_fcgi(host=self.host, port=self.port)
-
-
- def start_lightweight(self):
- if self.https:
- log.warning(_("This server offers no SSL, please consider using threaded instead"))
-
- self.core.log.info(_("Starting lightweight webserver (bjoern): %(host)s:%(port)d") % {"host": self.host, "port": self.port})
- webinterface.run_lightweight(host=self.host, port=self.port)
-
- def quit(self):
- self.running = False
diff --git a/module/unescape.py b/module/unescape.py
deleted file mode 100644
index 74e7b5c67..000000000
--- a/module/unescape.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from module.utils import html_unescape
-#deprecated
-unescape = html_unescape
diff --git a/module/webui/__init__.py b/module/webui/__init__.py
deleted file mode 100644
index 85fec1b52..000000000
--- a/module/webui/__init__.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-import sys
-import module.common.pylgettext as gettext
-
-import os
-from os.path import join, abspath, dirname, exists
-from os import makedirs
-
-THEME_DIR = abspath(join(dirname(__file__), "themes"))
-PYLOAD_DIR = abspath(join(THEME_DIR, "..", "..", ".."))
-
-sys.path.append(PYLOAD_DIR)
-
-from module import InitHomeDir
-from module.utils import decode, formatSize
-
-import bottle
-from bottle import run, app
-
-from jinja2 import Environment, FileSystemLoader, PrefixLoader, FileSystemBytecodeCache
-from middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware
-
-SETUP = None
-PYLOAD = None
-
-from module.threads import ServerThread
-
-if not ServerThread.core:
- if ServerThread.setup:
- SETUP = ServerThread.setup
- config = SETUP.config
- else:
- raise Exception("Could not access pyLoad Core")
-else:
- PYLOAD = ServerThread.core.api
- config = ServerThread.core.config
-
-from module.common.JsEngine import JsEngine
-
-JS = JsEngine()
-
-THEME = config.get('webinterface', 'theme')
-DL_ROOT = config.get('general', 'download_folder')
-LOG_ROOT = config.get('log', 'log_folder')
-PREFIX = config.get('webinterface', 'prefix')
-
-if PREFIX:
- PREFIX = PREFIX.rstrip("/")
- if not PREFIX.startswith("/"):
- PREFIX = "/" + PREFIX
-
-DEBUG = config.get("general", "debug_mode") or "-d" in sys.argv or "--debug" in sys.argv
-bottle.debug(DEBUG)
-
-cache = join("tmp", "jinja_cache")
-if not exists(cache):
- makedirs(cache)
-
-bcc = FileSystemBytecodeCache(cache, '%s.cache')
-
-loader = FileSystemLoader(THEME_DIR)
-
-env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=False,
- bytecode_cache=bcc)
-
-from filters import quotepath, path_make_relative, path_make_absolute, truncate, date
-
-env.filters["quotepath"] = quotepath
-env.filters["truncate"] = truncate
-env.filters["date"] = date
-env.filters["path_make_relative"] = path_make_relative
-env.filters["path_make_absolute"] = path_make_absolute
-env.filters["decode"] = decode
-env.filters["type"] = lambda x: str(type(x))
-env.filters["formatsize"] = formatSize
-env.filters["getitem"] = lambda x, y: x.__getitem__(y)
-if PREFIX:
- env.filters["url"] = lambda x: x
-else:
- env.filters["url"] = lambda x: PREFIX + x if x.startswith("/") else x
-
-gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
-translation = gettext.translation("django", join(PYLOAD_DIR, "locale"),
- languages=[config.get("general", "language"), "en"],fallback=True)
-translation.install(True)
-env.install_gettext_translations(translation)
-
-from beaker.middleware import SessionMiddleware
-
-session_opts = {
- 'session.type': 'file',
- 'session.cookie_expires': False,
- 'session.data_dir': './tmp',
- 'session.auto': False
-}
-
-web = StripPathMiddleware(SessionMiddleware(app(), session_opts))
-web = GZipMiddleWare(web)
-
-if PREFIX:
- web = PrefixMiddleware(web, prefix=PREFIX)
-
-import module.webui.app
-
-def run_simple(host="0.0.0.0", port="8000"):
- run(app=web, host=host, port=port, quiet=True)
-
-
-def run_lightweight(host="0.0.0.0", port="8000"):
- run(app=web, host=host, port=port, server="bjoern", quiet=True)
-
-
-def run_threaded(host="0.0.0.0", port="8000", theads=3, cert="", key=""):
- from wsgiserver import CherryPyWSGIServer
-
- if cert and key:
- CherryPyWSGIServer.ssl_certificate = cert
- CherryPyWSGIServer.ssl_private_key = key
-
- CherryPyWSGIServer.numthreads = theads
-
- from module.webui.app.utils import CherryPyWSGI
-
- run(app=web, host=host, port=port, server=CherryPyWSGI, quiet=True)
-
-
-def run_fcgi(host="0.0.0.0", port="8000"):
- from bottle import FlupFCGIServer
-
- run(app=web, host=host, port=port, server=FlupFCGIServer, quiet=True)
diff --git a/module/webui/app/__init__.py b/module/webui/app/__init__.py
deleted file mode 100644
index e52102840..000000000
--- a/module/webui/app/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.webui.app import api, cnl, json, pyload
diff --git a/module/webui/app/api.py b/module/webui/app/api.py
deleted file mode 100644
index ba178682a..000000000
--- a/module/webui/app/api.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from urllib import unquote
-from itertools import chain
-from traceback import format_exc, print_exc
-
-from bottle import route, request, response, HTTPError
-
-from utils import toDict, set_session
-from module.webui import PYLOAD
-
-from module.common.json_layer import json
-from module.lib.SafeEval import const_eval as literal_eval
-from module.Api import BaseObject
-
-# json encoder that accepts TBase objects
-class TBaseEncoder(json.JSONEncoder):
-
- def default(self, o):
- if isinstance(o, BaseObject):
- return toDict(o)
- return json.JSONEncoder.default(self, o)
-
-
-# accepting positional arguments, as well as kwargs via post and get
-
-@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>')
-@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>', method='POST')
-def call_api(func, args=""):
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- s = request.environ.get('beaker.session')
- if 'session' in request.POST:
- s = s.get_by_id(request.POST['session'])
-
- if not s or not s.get("authenticated", False):
- return HTTPError(403, json.dumps("Forbidden"))
-
- if not PYLOAD.isAuthorized(func, {"role": s["role"], "permission": s["perms"]}):
- return HTTPError(401, json.dumps("Unauthorized"))
-
- args = args.split("/")[1:]
- kwargs = {}
-
- for x, y in chain(request.GET.iteritems(), request.POST.iteritems()):
- if x == "session": continue
- kwargs[x] = unquote(y)
-
- try:
- return callApi(func, *args, **kwargs)
- except Exception, e:
- print_exc()
- return HTTPError(500, json.dumps({"error": e.message, "traceback": format_exc()}))
-
-
-def callApi(func, *args, **kwargs):
- if not hasattr(PYLOAD.EXTERNAL, func) or func.startswith("_"):
- print "Invalid API call", func
- return HTTPError(404, json.dumps("Not Found"))
-
- result = getattr(PYLOAD, func)(*[literal_eval(x) for x in args],
- **dict([(x, literal_eval(y)) for x, y in kwargs.iteritems()]))
-
- # null is invalid json response
- if result is None: result = True
-
- return json.dumps(result, cls=TBaseEncoder)
-
-
-#post -> username, password
-@route('/api/login', method='POST')
-def login():
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- user = request.forms.get("username")
- password = request.forms.get("password")
-
- info = PYLOAD.checkAuth(user, password)
-
- if not info:
- return json.dumps(False)
-
- s = set_session(request, info)
-
- # get the session id by dirty way, documentations seems wrong
- try:
- sid = s._headers["cookie_out"].split("=")[1].split(";")[0]
- return json.dumps(sid)
- except:
- return json.dumps(True)
-
-
-@route('/api/logout')
-def logout():
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- s = request.environ.get('beaker.session')
- s.delete()
diff --git a/module/webui/app/cnl.py b/module/webui/app/cnl.py
deleted file mode 100644
index b29013d82..000000000
--- a/module/webui/app/cnl.py
+++ /dev/null
@@ -1,168 +0,0 @@
-# -*- coding: utf-8 -*-
-from os.path import join
-import re
-from urllib import unquote
-from base64 import standard_b64decode
-from binascii import unhexlify
-
-from bottle import route, request, HTTPError
-from module.webui import PYLOAD, DL_ROOT, JS
-
-
-try:
- from Crypto.Cipher import AES
-except:
- pass
-
-
-def local_check(function):
- def _view(*args, **kwargs):
- if request.environ.get("REMOTE_ADDR", "0") in ("127.0.0.1", "localhost") \
- or request.environ.get("HTTP_HOST", "0") in ("127.0.0.1:9666", "localhost:9666"):
- return function(*args, **kwargs)
- else:
- return HTTPError(403, "Forbidden")
-
- return _view
-
-
-@route('/flash')
-@route('/flash/<id>')
-@route('/flash', method='POST')
-@local_check
-def flash(id="0"):
- return "JDownloader\r\n"
-
-
-@route('/flash/add', method='POST')
-@local_check
-def add(request):
- package = request.POST.get('referer', None)
- urls = filter(lambda x: x != "", request.POST['urls'].split("\n"))
-
- if package:
- PYLOAD.addPackage(package, urls, 0)
- else:
- PYLOAD.generateAndAddPackages(urls, 0)
-
- return ""
-
-
-@route('/flash/addcrypted', method='POST')
-@local_check
-def addcrypted():
- package = request.forms.get('referer', 'ClickAndLoad Package')
- dlc = request.forms['crypted'].replace(" ", "+")
-
- dlc_path = join(DL_ROOT, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc")
- dlc_file = open(dlc_path, "wb")
- dlc_file.write(dlc)
- dlc_file.close()
-
- try:
- PYLOAD.addPackage(package, [dlc_path], 0)
- except:
- return HTTPError()
- else:
- return "success\r\n"
-
-
-@route('/flash/addcrypted2', method='POST')
-@local_check
-def addcrypted2():
- package = request.forms.get("source", None)
- crypted = request.forms["crypted"]
- jk = request.forms["jk"]
-
- crypted = standard_b64decode(unquote(crypted.replace(" ", "+")))
- if JS:
- jk = "%s f()" % jk
- jk = JS.eval(jk)
-
- else:
- try:
- jk = re.findall(r"return ('|\")(.+)('|\")", jk)[0][1]
- except:
- ## Test for some known js functions to decode
- if jk.find("dec") > -1 and jk.find("org") > -1:
- org = re.findall(r"var org = ('|\")([^\"']+)", jk)[0][1]
- jk = list(org)
- jk.reverse()
- jk = "".join(jk)
- else:
- print "Could not decrypt key, please install py-spidermonkey or ossp-js"
-
- try:
- Key = unhexlify(jk)
- except:
- print "Could not decrypt key, please install py-spidermonkey or ossp-js"
- return "failed"
-
- IV = Key
-
- obj = AES.new(Key, AES.MODE_CBC, IV)
- result = obj.decrypt(crypted).replace("\x00", "").replace("\r", "").split("\n")
-
- result = filter(lambda x: x != "", result)
-
- try:
- if package:
- PYLOAD.addPackage(package, result, 0)
- else:
- PYLOAD.generateAndAddPackages(result, 0)
- except:
- return "failed can't add"
- else:
- return "success\r\n"
-
-
-@route('/flashgot_pyload')
-@route('/flashgot_pyload', method='POST')
-@route('/flashgot')
-@route('/flashgot', method='POST')
-@local_check
-def flashgot():
- if request.environ['HTTP_REFERER'] != "http://localhost:9666/flashgot" and \
- request.environ['HTTP_REFERER'] != "http://127.0.0.1:9666/flashgot":
- return HTTPError()
-
- autostart = int(request.forms.get('autostart', 0))
- package = request.forms.get('package', None)
- urls = filter(lambda x: x != "", request.forms['urls'].split("\n"))
- folder = request.forms.get('dir', None)
-
- if package:
- PYLOAD.addPackage(package, urls, autostart)
- else:
- PYLOAD.generateAndAddPackages(urls, autostart)
-
- return ""
-
-
-@route('/crossdomain.xml')
-@local_check
-def crossdomain():
- rep = "<?xml version=\"1.0\"?>\n"
- rep += "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n"
- rep += "<cross-domain-policy>\n"
- rep += "<allow-access-from domain=\"*\" />\n"
- rep += "</cross-domain-policy>"
- return rep
-
-
-@route('/flash/checkSupportForUrl')
-@local_check
-def checksupport():
- url = request.GET.get("url")
- res = PYLOAD.checkURLs([url])
- supported = (not res[0][1] is None)
-
- return str(supported).lower()
-
-
-@route('/jdcheck.js')
-@local_check
-def jdcheck():
- rep = "jdownloader=true;\n"
- rep += "var version='9.581;'"
- return rep
diff --git a/module/webui/app/json.py b/module/webui/app/json.py
deleted file mode 100644
index cf9a8f238..000000000
--- a/module/webui/app/json.py
+++ /dev/null
@@ -1,311 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from os.path import join
-from traceback import print_exc
-from shutil import copyfileobj
-
-from bottle import route, request, HTTPError
-
-from module.webui import PYLOAD
-
-from utils import login_required, render_to_response, toDict
-
-from module.utils import decode, formatSize
-
-
-def format_time(seconds):
- seconds = int(seconds)
-
- hours, seconds = divmod(seconds, 3600)
- minutes, seconds = divmod(seconds, 60)
- return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
-
-
-def get_sort_key(item):
- return item["order"]
-
-
-@route('/json/status')
-@route('/json/status', method='POST')
-@login_required('LIST')
-def status():
- try:
- status = toDict(PYLOAD.statusServer())
- status['captcha'] = PYLOAD.isCaptchaWaiting()
- return status
- except:
- return HTTPError()
-
-
-@route('/json/links')
-@route('/json/links', method='POST')
-@login_required('LIST')
-def links():
- try:
- links = [toDict(x) for x in PYLOAD.statusDownloads()]
- ids = []
- for link in links:
- ids.append(link['fid'])
-
- if link['status'] == 12:
- link['info'] = "%s @ %s/s" % (link['format_eta'], formatSize(link['speed']))
- elif link['status'] == 5:
- link['percent'] = 0
- link['size'] = 0
- link['bleft'] = 0
- link['info'] = _("waiting %s") % link['format_wait']
- else:
- link['info'] = ""
-
- data = {'links': links, 'ids': ids}
- return data
- except Exception, e:
- print_exc()
- return HTTPError()
-
-
-@route('/json/packages')
-@login_required('LIST')
-def packages():
- print "/json/packages"
- try:
- data = PYLOAD.getQueue()
-
- for package in data:
- package['links'] = []
- for file in PYLOAD.get_package_files(package['id']):
- package['links'].append(PYLOAD.get_file_info(file))
-
- return data
-
- except:
- return HTTPError()
-
-
-@route('/json/package/<id:int>')
-@login_required('LIST')
-def package(id):
- try:
- data = toDict(PYLOAD.getPackageData(id))
- data["links"] = [toDict(x) for x in data["links"]]
-
- for pyfile in data["links"]:
- if pyfile["status"] == 0:
- pyfile["icon"] = "status_finished.png"
- elif pyfile["status"] in (2, 3):
- pyfile["icon"] = "status_queue.png"
- elif pyfile["status"] in (9, 1):
- pyfile["icon"] = "status_offline.png"
- elif pyfile["status"] == 5:
- pyfile["icon"] = "status_waiting.png"
- elif pyfile["status"] == 8:
- pyfile["icon"] = "status_failed.png"
- elif pyfile["status"] == 4:
- pyfile["icon"] = "arrow_right.png"
- elif pyfile["status"] in (11, 13):
- pyfile["icon"] = "status_proc.png"
- else:
- pyfile["icon"] = "status_downloading.png"
-
- tmp = data["links"]
- tmp.sort(key=get_sort_key)
- data["links"] = tmp
- return data
-
- except:
- print_exc()
- return HTTPError()
-
-
-@route('/json/package_order/<ids>')
-@login_required('ADD')
-def package_order(ids):
- try:
- pid, pos = ids.split("|")
- PYLOAD.orderPackage(int(pid), int(pos))
- return {"response": "success"}
- except:
- return HTTPError()
-
-
-@route('/json/abort_link/<id:int>')
-@login_required('DELETE')
-def abort_link(id):
- try:
- PYLOAD.stopDownloads([id])
- return {"response": "success"}
- except:
- return HTTPError()
-
-
-@route('/json/link_order/<ids>')
-@login_required('ADD')
-def link_order(ids):
- try:
- pid, pos = ids.split("|")
- PYLOAD.orderFile(int(pid), int(pos))
- return {"response": "success"}
- except:
- return HTTPError()
-
-
-@route('/json/add_package')
-@route('/json/add_package', method='POST')
-@login_required('ADD')
-def add_package():
- name = request.forms.get("add_name", "New Package").strip()
- queue = int(request.forms['add_dest'])
- links = decode(request.forms['add_links'])
- links = links.split("\n")
- pw = request.forms.get("add_password", "").strip("\n\r")
-
- try:
- f = request.files['add_file']
-
- if not name or name == "New Package":
- name = f.name
-
- fpath = join(PYLOAD.getConfigValue("general", "download_folder"), "tmp_" + f.filename)
- destination = open(fpath, 'wb')
- copyfileobj(f.file, destination)
- destination.close()
- links.insert(0, fpath)
- except:
- pass
-
- name = name.decode("utf8", "ignore")
-
- links = map(lambda x: x.strip(), links)
- links = filter(lambda x: x != "", links)
-
- pack = PYLOAD.addPackage(name, links, queue)
- if pw:
- pw = pw.decode("utf8", "ignore")
- data = {"password": pw}
- PYLOAD.setPackageData(pack, data)
-
-
-@route('/json/move_package/<dest:int>/<id:int>')
-@login_required('MODIFY')
-def move_package(dest, id):
- try:
- PYLOAD.movePackage(dest, id)
- return {"response": "success"}
- except:
- return HTTPError()
-
-
-@route('/json/edit_package', method='POST')
-@login_required('MODIFY')
-def edit_package():
- try:
- id = int(request.forms.get("pack_id"))
- data = {"name": request.forms.get("pack_name").decode("utf8", "ignore"),
- "folder": request.forms.get("pack_folder").decode("utf8", "ignore"),
- "password": request.forms.get("pack_pws").decode("utf8", "ignore")}
-
- PYLOAD.setPackageData(id, data)
- return {"response": "success"}
-
- except:
- return HTTPError()
-
-
-@route('/json/set_captcha')
-@route('/json/set_captcha', method='POST')
-@login_required('ADD')
-def set_captcha():
- if request.environ.get('REQUEST_METHOD', "GET") == "POST":
- try:
- PYLOAD.setCaptchaResult(request.forms["cap_id"], request.forms["cap_result"])
- except:
- pass
-
- task = PYLOAD.getCaptchaTask()
-
- if task.tid >= 0:
- src = "data:image/%s;base64,%s" % (task.type, task.data)
-
- return {'captcha': True, 'id': task.tid, 'src': src, 'result_type' : task.resultType}
- else:
- return {'captcha': False}
-
-
-@route('/json/load_config/<category>/<section>')
-@login_required("SETTINGS")
-def load_config(category, section):
- conf = None
- if category == "general":
- conf = PYLOAD.getConfigDict()
- elif category == "plugin":
- conf = PYLOAD.getPluginConfigDict()
-
- for key, option in conf[section].iteritems():
- if key in ("desc", "outline"): continue
-
- if ";" in option["type"]:
- option["list"] = option["type"].split(";")
-
- option["value"] = decode(option["value"])
-
- return render_to_response("settings_item.html", {"skey": section, "section": conf[section]})
-
-
-@route('/json/save_config/<category>', method='POST')
-@login_required("SETTINGS")
-def save_config(category):
- for key, value in request.POST.iteritems():
- try:
- section, option = key.split("|")
- except:
- continue
-
- if category == "general": category = "core"
-
- PYLOAD.setConfigValue(section, option, decode(value), category)
-
-
-@route('/json/add_account', method='POST')
-@login_required("ACCOUNTS")
-def add_account():
- login = request.POST["account_login"]
- password = request.POST["account_password"]
- type = request.POST["account_type"]
-
- PYLOAD.updateAccount(type, login, password)
-
-
-@route('/json/update_accounts', method='POST')
-@login_required("ACCOUNTS")
-def update_accounts():
- deleted = [] #dont update deleted accs or they will be created again
-
- for name, value in request.POST.iteritems():
- value = value.strip()
- if not value: continue
-
- tmp, user = name.split(";")
- plugin, action = tmp.split("|")
-
- if (plugin, user) in deleted: continue
-
- if action == "password":
- PYLOAD.updateAccount(plugin, user, value)
- elif action == "time" and "-" in value:
- PYLOAD.updateAccount(plugin, user, options={"time": [value]})
- elif action == "limitdl" and value.isdigit():
- PYLOAD.updateAccount(plugin, user, options={"limitDL": [value]})
- elif action == "delete":
- deleted.append((plugin,user))
- PYLOAD.removeAccount(plugin, user)
-
-@route('/json/change_password', method='POST')
-def change_password():
-
- user = request.POST["user_login"]
- oldpw = request.POST["login_current_password"]
- newpw = request.POST["login_new_password"]
-
- if not PYLOAD.changePassword(user, oldpw, newpw):
- print "Wrong password"
- return HTTPError()
diff --git a/module/webui/app/pyload.py b/module/webui/app/pyload.py
deleted file mode 100644
index 8864688f9..000000000
--- a/module/webui/app/pyload.py
+++ /dev/null
@@ -1,544 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-from datetime import datetime
-from operator import itemgetter, attrgetter
-
-import time
-import os
-import sys
-from os import listdir
-from os.path import isdir, isfile, join, abspath
-from sys import getfilesystemencoding
-from urllib import unquote
-
-from bottle import route, static_file, request, response, redirect, error
-
-from module.webui import PYLOAD, PYLOAD_DIR, THEME_DIR, SETUP, env
-
-from utils import render_to_response, parse_permissions, parse_userdata, \
- login_required, get_permission, set_permission, permlist, toDict, set_session
-
-from module.webui.filters import relpath, unquotepath
-
-from module.utils import formatSize, safe_join, fs_encode, fs_decode
-
-# Helper
-
-def pre_processor():
- s = request.environ.get('beaker.session')
- user = parse_userdata(s)
- perms = parse_permissions(s)
- status = {}
- captcha = False
- update = False
- plugins = False
- if user["is_authenticated"]:
- status = PYLOAD.statusServer()
- info = PYLOAD.getInfoByPlugin("UpdateManager")
- captcha = PYLOAD.isCaptchaWaiting()
-
- # check if update check is available
- if info:
- if info["pyload"] == "True":
- update = info["version"]
- if info["plugins"] == "True":
- plugins = True
-
-
- return {"user": user,
- 'status': status,
- 'captcha': captcha,
- 'perms': perms,
- 'url': request.url,
- 'update': update,
- 'plugins': plugins}
-
-
-def base(messages):
- return render_to_response('base.html', {'messages': messages}, [pre_processor])
-
-
-## Views
-@error(403)
-def error403(code):
- return "The parameter you passed has the wrong format"
-
-
-@error(404)
-def error404(code):
- return "Sorry, this page does not exist"
-
-
-@error(500)
-def error500(error):
- traceback = error.traceback
- if traceback:
- print traceback
- return base(["An Error occured, please enable debug mode to get more details.", error,
- traceback.replace("\n", "<br>") if traceback else "No Traceback"])
-
-
-@route('/<theme>/<file:re:(.+/)?[^/]+\.min\.[^/]+>')
-def server_min(theme, file):
- filename = join(THEME_DIR, theme, file)
- if not isfile(filename):
- file = file.replace(".min.", ".")
- if file.endswith(".js"):
- return server_js(theme, file)
- else:
- return server_static(theme, file)
-
-
-@route('/<theme>/<file_static:re:.+\.js>')
-def server_js(theme, file):
- response.headers['Content-Type'] = "text/javascript; charset=UTF-8"
-
- if "/render/" in file or ".render." in file:
- response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT",
- time.gmtime(time.time() + 24 * 7 * 60 * 60))
- response.headers['Cache-control'] = "public"
-
- path = join(theme, file)
- return env.get_template(path).render()
- else:
- return server_static(theme, file)
-
-
-@route('/<theme>/<file:path>')
-def server_static(theme, file):
- response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT",
- time.gmtime(time.time() + 24 * 7 * 60 * 60))
- response.headers['Cache-control'] = "public"
-
- return static_file(file, root=join(THEME_DIR, theme))
-
-
-@route('/favicon.ico')
-def favicon():
- return static_file("icon.ico", root=join(PYLOAD_DIR, "docs", "resources"))
-
-
-@route('/login', method="GET")
-def login():
- if not PYLOAD and SETUP:
- redirect("/setup")
- else:
- return render_to_response("login.html", proc=[pre_processor])
-
-
-@route('/nopermission')
-def nopermission():
- return base([_("You dont have permission to access this page.")])
-
-
-@route('/login', method='POST')
-def login_post():
- user = request.forms.get("username")
- password = request.forms.get("password")
-
- info = PYLOAD.checkAuth(user, password)
-
- if not info:
- return render_to_response("login.html", {"errors": True}, [pre_processor])
-
- set_session(request, info)
- return redirect("/")
-
-
-@route('/logout')
-def logout():
- s = request.environ.get('beaker.session')
- s.delete()
- return render_to_response("logout.html", proc=[pre_processor])
-
-
-@route('/')
-@route('/home')
-@login_required("LIST")
-def home():
- try:
- res = [toDict(x) for x in PYLOAD.statusDownloads()]
- except:
- s = request.environ.get('beaker.session')
- s.delete()
- return redirect("/login")
-
- for link in res:
- if link["status"] == 12:
- link["information"] = "%s kB @ %s kB/s" % (link["size"] - link["bleft"], link["speed"])
-
- return render_to_response("home.html", {"res": res}, [pre_processor])
-
-
-@route('/queue')
-@login_required("LIST")
-def queue():
- queue = PYLOAD.getQueue()
-
- queue.sort(key=attrgetter("order"))
-
- return render_to_response('queue.html', {'content': queue, 'target': 1}, [pre_processor])
-
-
-@route('/collector')
-@login_required('LIST')
-def collector():
- queue = PYLOAD.getCollector()
-
- queue.sort(key=attrgetter("order"))
-
- return render_to_response('queue.html', {'content': queue, 'target': 0}, [pre_processor])
-
-
-@route('/downloads')
-@login_required('DOWNLOAD')
-def downloads():
- root = PYLOAD.getConfigValue("general", "download_folder")
-
- if not isdir(root):
- return base([_('Download directory not found.')])
- data = {
- 'folder': [],
- 'files': []
- }
-
- items = listdir(fs_encode(root))
-
- for item in sorted([fs_decode(x) for x in items]):
- if isdir(safe_join(root, item)):
- folder = {
- 'name': item,
- 'path': item,
- 'files': []
- }
- files = listdir(safe_join(root, item))
- for file in sorted([fs_decode(x) for x in files]):
- try:
- if isfile(safe_join(root, item, file)):
- folder['files'].append(file)
- except:
- pass
-
- data['folder'].append(folder)
- elif isfile(join(root, item)):
- data['files'].append(item)
-
- return render_to_response('downloads.html', {'files': data}, [pre_processor])
-
-
-@route('/downloads/get/<path:path>')
-@login_required("DOWNLOAD")
-def get_download(path):
- path = unquote(path).decode("utf8")
- #@TODO some files can not be downloaded
-
- root = PYLOAD.getConfigValue("general", "download_folder")
-
- path = path.replace("..", "")
- return static_file(fs_encode(path), fs_encode(root))
-
-
-
-@route('/settings')
-@login_required('SETTINGS')
-def config():
- conf = PYLOAD.getConfig()
- plugin = PYLOAD.getPluginConfig()
-
- conf_menu = []
- plugin_menu = []
-
- for entry in sorted(conf.keys()):
- conf_menu.append((entry, conf[entry].description))
-
- for entry in sorted(plugin.keys()):
- plugin_menu.append((entry, plugin[entry].description))
-
- accs = PYLOAD.getAccounts(False)
-
- for data in accs:
- if data.trafficleft == -1:
- data.trafficleft = _("unlimited")
- elif not data.trafficleft:
- data.trafficleft = _("not available")
- else:
- data.trafficleft = formatSize(data.trafficleft * 1024)
-
- if data.validuntil == -1:
- data.validuntil = _("unlimited")
- elif not data.validuntil :
- data.validuntil = _("not available")
- else:
- t = time.localtime(data.validuntil)
- data.validuntil = time.strftime("%d.%m.%Y - %H:%M:%S", t)
-
- try:
- data.options["time"] = data.options["time"][0]
- except:
- data.options["time"] = "0:00-0:00"
-
- if "limitDL" in data.options:
- data.options["limitdl"] = data.options["limitDL"][0]
- else:
- data.options["limitdl"] = "0"
-
- return render_to_response('settings.html',
- {'conf': {'plugin': plugin_menu, 'general': conf_menu, 'accs': accs}, 'types': PYLOAD.getAccountTypes()},
- [pre_processor])
-
-
-@route('/filechooser')
-@route('/pathchooser')
-@route('/filechooser/<file:path>')
-@route('/pathchooser/<path:path>')
-@login_required('STATUS')
-def path(file="", path=""):
- if file:
- type = "file"
- else:
- type = "folder"
-
- path = os.path.normpath(unquotepath(path))
-
- if os.path.isfile(path):
- oldfile = path
- path = os.path.dirname(path)
- else:
- oldfile = ''
-
- abs = False
-
- if os.path.isdir(path):
- if os.path.isabs(path):
- cwd = os.path.abspath(path)
- abs = True
- else:
- cwd = relpath(path)
- else:
- cwd = os.getcwd()
-
- try:
- cwd = cwd.encode("utf8")
- except:
- pass
-
- cwd = os.path.normpath(os.path.abspath(cwd))
- parentdir = os.path.dirname(cwd)
- if not abs:
- if os.path.abspath(cwd) == "/":
- cwd = relpath(cwd)
- else:
- cwd = relpath(cwd) + os.path.sep
- parentdir = relpath(parentdir) + os.path.sep
-
- if os.path.abspath(cwd) == "/":
- parentdir = ""
-
- try:
- folders = os.listdir(cwd)
- except:
- folders = []
-
- files = []
-
- for f in folders:
- try:
- f = f.decode(getfilesystemencoding())
- data = {'name': f, 'fullpath': join(cwd, f)}
- data['sort'] = data['fullpath'].lower()
- data['modified'] = datetime.fromtimestamp(int(os.path.getmtime(join(cwd, f))))
- data['ext'] = os.path.splitext(f)[1]
- except:
- continue
-
- if os.path.isdir(join(cwd, f)):
- data['type'] = 'dir'
- else:
- data['type'] = 'file'
-
- if os.path.isfile(join(cwd, f)):
- data['size'] = os.path.getsize(join(cwd, f))
-
- power = 0
- while (data['size'] / 1024) > 0.3:
- power += 1
- data['size'] /= 1024.
- units = ('', 'K', 'M', 'G', 'T')
- data['unit'] = units[power] + 'Byte'
- else:
- data['size'] = ''
-
- files.append(data)
-
- files = sorted(files, key=itemgetter('type', 'sort'))
-
- return render_to_response('pathchooser.html',
- {'cwd': cwd, 'files': files, 'parentdir': parentdir, 'type': type, 'oldfile': oldfile,
- 'absolute': abs}, [])
-
-
-@route('/logs')
-@route('/logs', method='POST')
-@route('/logs/<item>')
-@route('/logs/<item>', method='POST')
-@login_required('LOGS')
-def logs(item=-1):
- s = request.environ.get('beaker.session')
-
- perpage = s.get('perpage', 34)
- reversed = s.get('reversed', False)
-
- warning = ""
- conf = PYLOAD.getConfigValue("log", "file_log")
- if not conf:
- warning = "Warning: File log is disabled, see settings page."
-
- perpage_p = ((20, 20), (34, 34), (40, 40), (100, 100), (0, 'all'))
- fro = None
-
- if request.environ.get('REQUEST_METHOD', "GET") == "POST":
- try:
- fro = datetime.strptime(request.forms['from'], '%d.%m.%Y %H:%M:%S')
- except:
- pass
- try:
- perpage = int(request.forms['perpage'])
- s['perpage'] = perpage
-
- reversed = bool(request.forms.get('reversed', False))
- s['reversed'] = reversed
- except:
- pass
-
- s.save()
-
- try:
- item = int(item)
- except:
- pass
-
- log = PYLOAD.getLog()
- if not perpage:
- item = 0
-
- if item < 1 or type(item) is not int:
- item = 1 if len(log) - perpage + 1 < 1 else len(log) - perpage + 1
-
- if type(fro) is datetime: # we will search for datetime
- item = -1
-
- data = []
- counter = 0
- perpagecheck = 0
- for l in log:
- counter += 1
-
- if counter >= item:
- try:
- date, time, level, message = l.decode("utf8", "ignore").split(" ", 3)
- dtime = datetime.strptime(date + ' ' + time, '%d.%m.%Y %H:%M:%S')
- except:
- dtime = None
- date = '?'
- time = ' '
- level = '?'
- message = l
- if item == -1 and dtime is not None and fro <= dtime:
- item = counter #found our datetime
- if item >= 0:
- data.append({'line': counter, 'date': date + " " + time, 'level': level, 'message': message})
- perpagecheck += 1
- if fro is None and dtime is not None: #if fro not set set it to first showed line
- fro = dtime
- if perpagecheck >= perpage > 0:
- break
-
- if fro is None: #still not set, empty log?
- fro = datetime.now()
- if reversed:
- data.reverse()
- return render_to_response('logs.html', {'warning': warning, 'log': data, 'from': fro.strftime('%d.%m.%Y %H:%M:%S'),
- 'reversed': reversed, 'perpage': perpage, 'perpage_p': sorted(perpage_p),
- 'iprev': 1 if item - perpage < 1 else item - perpage,
- 'inext': (item + perpage) if item + perpage < len(log) else item},
- [pre_processor])
-
-
-@route('/admin')
-@route('/admin', method='POST')
-@login_required("ADMIN")
-def admin():
- # convert to dict
- user = dict([(name, toDict(y)) for name, y in PYLOAD.getAllUserData().iteritems()])
- perms = permlist()
-
- for data in user.itervalues():
- data["perms"] = {}
- get_permission(data["perms"], data["permission"])
- data["perms"]["admin"] = True if data["role"] is 0 else False
-
-
- s = request.environ.get('beaker.session')
- if request.environ.get('REQUEST_METHOD', "GET") == "POST":
- for name in user:
- if request.POST.get("%s|admin" % name, False):
- user[name]["role"] = 0
- user[name]["perms"]["admin"] = True
- elif name != s["name"]:
- user[name]["role"] = 1
- user[name]["perms"]["admin"] = False
-
- # set all perms to false
- for perm in perms:
- user[name]["perms"][perm] = False
-
- for perm in request.POST.getall("%s|perms" % name):
- user[name]["perms"][perm] = True
-
- user[name]["permission"] = set_permission(user[name]["perms"])
-
- PYLOAD.setUserPermission(name, user[name]["permission"], user[name]["role"])
-
- return render_to_response("admin.html", {"users": user, "permlist": perms}, [pre_processor])
-
-
-@route('/setup')
-def setup():
- return base([_("Run pyload.py -s to access the setup.")])
-
-
-@route('/info')
-def info():
- conf = PYLOAD.getConfigDict()
-
- if hasattr(os, "uname"):
- extra = os.uname()
- else:
- extra = tuple()
-
- data = {"python": sys.version,
- "os": " ".join((os.name, sys.platform) + extra),
- "version": PYLOAD.getServerVersion(),
- "folder": abspath(PYLOAD_DIR), "config": abspath(""),
- "download": abspath(conf["general"]["download_folder"]["value"]),
- "freespace": formatSize(PYLOAD.freeSpace()),
- "remote": conf["remote"]["port"]["value"],
- "webif": conf["webinterface"]["port"]["value"],
- "language": conf["general"]["language"]["value"]}
-
- return render_to_response("info.html", data, [pre_processor])
diff --git a/module/webui/app/utils.py b/module/webui/app/utils.py
deleted file mode 100644
index 1ba08e9a7..000000000
--- a/module/webui/app/utils.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this plrogram; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-from os.path import join
-
-from bottle import request, HTTPError, redirect, ServerAdapter
-
-from module.webui import env, THEME
-
-from module.Api import has_permission, PERMS, ROLE
-
-def render_to_response(file, args={}, proc=[]):
- for p in proc:
- args.update(p())
- path = join(THEME, "tml", file)
- return env.get_template(path).render(**args)
-
-
-def parse_permissions(session):
- perms = dict([(x, False) for x in dir(PERMS) if not x.startswith("_")])
- perms["ADMIN"] = False
- perms["is_admin"] = False
-
- if not session.get("authenticated", False):
- return perms
-
- if session.get("role") == ROLE.ADMIN:
- for k in perms.iterkeys():
- perms[k] = True
-
- elif session.get("perms"):
- p = session.get("perms")
- get_permission(perms, p)
-
- return perms
-
-
-def permlist():
- return [x for x in dir(PERMS) if not x.startswith("_") and x != "ALL"]
-
-
-def get_permission(perms, p):
- """Returns a dict with permission key
-
- :param perms: dictionary
- :param p: bits
- """
- for name in permlist():
- perms[name] = has_permission(p, getattr(PERMS, name))
-
-
-def set_permission(perms):
- """generates permission bits from dictionary
-
- :param perms: dict
- """
- permission = 0
- for name in dir(PERMS):
- if name.startswith("_"): continue
-
- if name in perms and perms[name]:
- permission |= getattr(PERMS, name)
-
- return permission
-
-
-def set_session(request, info):
- s = request.environ.get('beaker.session')
- s["authenticated"] = True
- s["user_id"] = info["id"]
- s["name"] = info["name"]
- s["role"] = info["role"]
- s["perms"] = info["permission"]
- s["template"] = info["template"]
- s.save()
-
- return s
-
-
-def parse_userdata(session):
- return {"name": session.get("name", "Anonymous"),
- "is_admin": True if session.get("role", 1) == 0 else False,
- "is_authenticated": session.get("authenticated", False)}
-
-
-def login_required(perm=None):
- def _dec(func):
- def _view(*args, **kwargs):
- s = request.environ.get('beaker.session')
- if s.get("name", None) and s.get("authenticated", False):
- if perm:
- perms = parse_permissions(s)
- if perm not in perms or not perms[perm]:
- if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
- return HTTPError(403, "Forbidden")
- else:
- return redirect("/nopermission")
-
- return func(*args, **kwargs)
- else:
- if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
- return HTTPError(403, "Forbidden")
- else:
- return redirect("/login")
-
- return _view
-
- return _dec
-
-
-def toDict(obj):
- ret = {}
- for att in obj.__slots__:
- ret[att] = getattr(obj, att)
- return ret
-
-
-class CherryPyWSGI(ServerAdapter):
- def run(self, handler):
- from wsgiserver import CherryPyWSGIServer
-
- server = CherryPyWSGIServer((self.host, self.port), handler)
- server.start()
diff --git a/module/webui/servers/lighttpd_default.conf b/module/webui/servers/lighttpd_default.conf
deleted file mode 100644
index bbeb5f7a7..000000000
--- a/module/webui/servers/lighttpd_default.conf
+++ /dev/null
@@ -1,153 +0,0 @@
-# lighttpd configuration file
-#
-# use it as a base for lighttpd 1.0.0 and above
-#
-# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
-
-############ Options you really have to take care of ####################
-
-## modules to load
-# at least mod_access and mod_accesslog should be loaded
-# all other module should only be loaded if really neccesary
-# - saves some time
-# - saves memory
-server.modules = (
- "mod_rewrite",
- "mod_redirect",
- "mod_alias",
- "mod_access",
-# "mod_trigger_b4_dl",
-# "mod_auth",
-# "mod_status",
-# "mod_setenv",
- "mod_fastcgi",
-# "mod_proxy",
-# "mod_simple_vhost",
-# "mod_evhost",
-# "mod_userdir",
-# "mod_cgi",
-# "mod_compress",
-# "mod_ssi",
-# "mod_usertrack",
-# "mod_expire",
-# "mod_secdownload",
-# "mod_rrdtool",
-# "mod_accesslog"
- )
-
-## A static document-root. For virtual hosting take a look at the
-## mod_simple_vhost module.
-server.document-root = "%(path)"
-
-## where to send error-messages to
-server.errorlog = "%(path)/error.log"
-
-# files to check for if .../ is requested
-index-file.names = ( "index.php", "index.html",
- "index.htm", "default.htm" )
-
-## set the event-handler (read the performance section in the manual)
-# server.event-handler = "freebsd-kqueue" # needed on OS X
-
-# mimetype mapping
-mimetype.assign = (
- ".pdf" => "application/pdf",
- ".sig" => "application/pgp-signature",
- ".spl" => "application/futuresplash",
- ".class" => "application/octet-stream",
- ".ps" => "application/postscript",
- ".torrent" => "application/x-bittorrent",
- ".dvi" => "application/x-dvi",
- ".gz" => "application/x-gzip",
- ".pac" => "application/x-ns-proxy-autoconfig",
- ".swf" => "application/x-shockwave-flash",
- ".tar.gz" => "application/x-tgz",
- ".tgz" => "application/x-tgz",
- ".tar" => "application/x-tar",
- ".zip" => "application/zip",
- ".mp3" => "audio/mpeg",
- ".m3u" => "audio/x-mpegurl",
- ".wma" => "audio/x-ms-wma",
- ".wax" => "audio/x-ms-wax",
- ".ogg" => "application/ogg",
- ".wav" => "audio/x-wav",
- ".gif" => "image/gif",
- ".jar" => "application/x-java-archive",
- ".jpg" => "image/jpeg",
- ".jpeg" => "image/jpeg",
- ".png" => "image/png",
- ".xbm" => "image/x-xbitmap",
- ".xpm" => "image/x-xpixmap",
- ".xwd" => "image/x-xwindowdump",
- ".css" => "text/css",
- ".html" => "text/html",
- ".htm" => "text/html",
- ".js" => "text/javascript",
- ".asc" => "text/plain",
- ".c" => "text/plain",
- ".cpp" => "text/plain",
- ".log" => "text/plain",
- ".conf" => "text/plain",
- ".text" => "text/plain",
- ".txt" => "text/plain",
- ".dtd" => "text/xml",
- ".xml" => "text/xml",
- ".mpeg" => "video/mpeg",
- ".mpg" => "video/mpeg",
- ".mov" => "video/quicktime",
- ".qt" => "video/quicktime",
- ".avi" => "video/x-msvideo",
- ".asf" => "video/x-ms-asf",
- ".asx" => "video/x-ms-asf",
- ".wmv" => "video/x-ms-wmv",
- ".bz2" => "application/x-bzip",
- ".tbz" => "application/x-bzip-compressed-tar",
- ".tar.bz2" => "application/x-bzip-compressed-tar",
- # default mime type
- "" => "application/octet-stream",
- )
-
-# Use the "Content-Type" extended attribute to obtain mime type if possible
-#mimetype.use-xattr = "enable"
-
-#### accesslog module
-accesslog.filename = "%(path)/access.log"
-
-url.access-deny = ( "~", ".inc" )
-
-$HTTP["url"] =~ "\.pdf$" {
- server.range-requests = "disable"
-}
-static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
-
-server.pid-file = "%(path)/lighttpd.pid"
-
-server.bind = "%(host)"
-server.port = %(port)
-
-#server.document-root = "/home/user/public_html"
-fastcgi.server = (
- "/pyload.fcgi" => (
- "main" => (
- "host" => "127.0.0.1",
- "port" => 9295,
- "check-local" => "disable",
- "docroot" => "/",
- )
- ),
-)
-
-alias.url = (
- "/media/" => "%(media)/",
- "/admin/media/" => "/usr/lib/python%(version)/site-packages/django/contrib/admin/media/",
-)
-
-url.rewrite-once = (
- "^(/media.*)$" => "$1",
- "^(/admin/media.*)$" => "$1",
- "^/favicon\.ico$" => "/media/img/favicon.ico",
- "^(/pyload.fcgi.*)$" => "$1",
- "^(/.*)$" => "/pyload.fcgi$1",
-)
-
-%(ssl)
diff --git a/pyload-cli.py b/pyload-cli.py
index c1e2ff617..0ef70368b 100644
--- a/pyload-cli.py
+++ b/pyload-cli.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.cli.Cli import main
+from pyload.cli.Cli import main
if __name__ == "__main__":
main()
diff --git a/pyload.py b/pyload.py
index b53bf4352..dc1957928 100644
--- a/pyload.py
+++ b/pyload.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Core import main
+from pyload.Core import main
if __name__ == "__main__":
main()
diff --git a/module/Api.py b/pyload/Api.py
index 066d490ec..066d490ec 100644
--- a/module/Api.py
+++ b/pyload/Api.py
diff --git a/module/CaptchaManager.py b/pyload/CaptchaManager.py
index 0ba876ae8..0ba876ae8 100644
--- a/module/CaptchaManager.py
+++ b/pyload/CaptchaManager.py
diff --git a/pyload/ConfigParser.py b/pyload/ConfigParser.py
new file mode 100644
index 000000000..64ce6b10e
--- /dev/null
+++ b/pyload/ConfigParser.py
@@ -0,0 +1,373 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+from time import sleep
+from os.path import exists, join
+from shutil import copy
+
+from traceback import print_exc
+from utils import chmod
+
+# ignore these plugin configs, mainly because plugins were wiped out
+IGNORE = (
+ "FreakshareNet", "SpeedManager", "ArchiveTo", "ShareCx", ('hooks', 'UnRar'),
+ 'EasyShareCom', 'FlyshareCz'
+ )
+
+CONF_VERSION = 1
+
+class ConfigParser:
+ """
+ holds and manage the configuration
+
+ current dict layout:
+
+ {
+
+ section: {
+ option: {
+ value:
+ type:
+ desc:
+ }
+ desc:
+
+ }
+
+ """
+
+
+ def __init__(self):
+ """Constructor"""
+ self.config = {} # the config values
+ self.plugin = {} # the config for plugins
+ self.oldRemoteData = {}
+
+ self.pluginCB = None # callback when plugin config value is changed
+
+ self.checkVersion()
+
+ self.readConfig()
+
+ self.deleteOldPlugins()
+
+
+ def checkVersion(self, n=0):
+ """determines if config need to be copied"""
+ try:
+ if not exists("pyload.conf"):
+ copy(join(pypath, "pyload", "config", "default.conf"), "pyload.conf")
+
+ if not exists("plugin.conf"):
+ f = open("plugin.conf", "wb")
+ f.write("version: " + str(CONF_VERSION))
+ f.close()
+
+ f = open("pyload.conf", "rb")
+ v = f.readline()
+ f.close()
+ v = v[v.find(":") + 1:].strip()
+
+ if not v or int(v) < CONF_VERSION:
+ copy(join(pypath, "pyload", "config", "default.conf"), "pyload.conf")
+ print "Old version of config was replaced"
+
+ f = open("plugin.conf", "rb")
+ v = f.readline()
+ f.close()
+ v = v[v.find(":") + 1:].strip()
+
+ if not v or int(v) < CONF_VERSION:
+ f = open("plugin.conf", "wb")
+ f.write("version: " + str(CONF_VERSION))
+ f.close()
+ print "Old version of plugin-config replaced"
+ except:
+ if n < 3:
+ sleep(0.3)
+ self.checkVersion(n + 1)
+ else:
+ raise
+
+ def readConfig(self):
+ """reads the config file"""
+
+ self.config = self.parseConfig(join(pypath, "pyload", "config", "default.conf"))
+ self.plugin = self.parseConfig("plugin.conf")
+
+ try:
+ homeconf = self.parseConfig("pyload.conf")
+ if "username" in homeconf["remote"]:
+ if "password" in homeconf["remote"]:
+ self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"],
+ "password": homeconf["remote"]["username"]["value"]}
+ del homeconf["remote"]["password"]
+ del homeconf["remote"]["username"]
+ self.updateValues(homeconf, self.config)
+
+ except Exception, e:
+ print "Config Warning"
+ print_exc()
+
+
+ def parseConfig(self, config):
+ """parses a given configfile"""
+
+ f = open(config)
+
+ config = f.read()
+
+ config = config.splitlines()[1:]
+
+ conf = {}
+
+ section, option, value, typ, desc = "", "", "", "", ""
+
+ listmode = False
+
+ for line in config:
+ comment = line.rfind("#")
+ if line.find(":", comment) < 0 > line.find("=", comment) and comment > 0 and line[comment - 1].isspace():
+ line = line.rpartition("#") # removes comments
+ if line[1]:
+ line = line[0]
+ else:
+ line = line[2]
+
+ line = line.strip()
+
+ try:
+ if line == "":
+ continue
+ elif line.endswith(":"):
+ section, none, desc = line[:-1].partition('-')
+ section = section.strip()
+ desc = desc.replace('"', "").strip()
+ conf[section] = {"desc": desc}
+ else:
+ if listmode:
+ if line.endswith("]"):
+ listmode = False
+ line = line.replace("]", "")
+
+ value += [self.cast(typ, x.strip()) for x in line.split(",") if x]
+
+ if not listmode:
+ conf[section][option] = {"desc": desc,
+ "type": typ,
+ "value": value}
+
+
+ else:
+ content, none, value = line.partition("=")
+
+ content, none, desc = content.partition(":")
+
+ desc = desc.replace('"', "").strip()
+
+ typ, none, option = content.strip().rpartition(" ")
+
+ value = value.strip()
+
+ if value.startswith("["):
+ if value.endswith("]"):
+ listmode = False
+ value = value[:-1]
+ else:
+ listmode = True
+
+ value = [self.cast(typ, x.strip()) for x in value[1:].split(",") if x]
+ else:
+ value = self.cast(typ, value)
+
+ if not listmode:
+ conf[section][option] = {"desc": desc,
+ "type": typ,
+ "value": value}
+
+ except Exception, e:
+ print "Config Warning"
+ print_exc()
+
+ f.close()
+ return conf
+
+
+ def updateValues(self, config, dest):
+ """sets the config values from a parsed config file to values in destination"""
+
+ for section in config.iterkeys():
+ if section in dest:
+ for option in config[section].iterkeys():
+ if option in ("desc", "outline"): continue
+
+ if option in dest[section]:
+ dest[section][option]["value"] = config[section][option]["value"]
+
+ #else:
+ # dest[section][option] = config[section][option]
+
+
+ #else:
+ # dest[section] = config[section]
+
+ def saveConfig(self, config, filename):
+ """saves config to filename"""
+ with open(filename, "wb") as f:
+ chmod(filename, 0600)
+ f.write("version: %i \n" % CONF_VERSION)
+ for section in config.iterkeys():
+ f.write('\n%s - "%s":\n' % (section, config[section]["desc"]))
+
+ for option, data in config[section].iteritems():
+ if option in ("desc", "outline"): continue
+
+ if isinstance(data["value"], list):
+ value = "[ \n"
+ for x in data["value"]:
+ value += "\t\t" + str(x) + ",\n"
+ value += "\t\t]\n"
+ else:
+ if type(data["value"]) in (str, unicode):
+ value = data["value"] + "\n"
+ else:
+ value = str(data["value"]) + "\n"
+ try:
+ f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value))
+ except UnicodeEncodeError:
+ f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8")))
+
+ def cast(self, typ, value):
+ """cast value to given format"""
+ if type(value) not in (str, unicode):
+ return value
+
+ elif typ == "int":
+ return int(value)
+ elif typ == "bool":
+ return True if value.lower() in ("1", "true", "on", "an", "yes") else False
+ elif typ == "time":
+ if not value: value = "0:00"
+ if not ":" in value: value += ":00"
+ return value
+ elif typ in ("str", "file", "folder"):
+ try:
+ return value.encode("utf8")
+ except:
+ return value
+ else:
+ return value
+
+
+ def save(self):
+ """saves the configs to disk"""
+
+ self.saveConfig(self.config, "pyload.conf")
+ self.saveConfig(self.plugin, "plugin.conf")
+
+
+ def __getitem__(self, section):
+ """provides dictonary like access: c['section']['option']"""
+ return Section(self, section)
+
+
+ def get(self, section, option):
+ """get value"""
+ val = self.config[section][option]["value"]
+ try:
+ if type(val) in (str, unicode):
+ return val.decode("utf8")
+ else:
+ return val
+ except:
+ return val
+
+ def set(self, section, option, value):
+ """set value"""
+
+ value = self.cast(self.config[section][option]["type"], value)
+
+ self.config[section][option]["value"] = value
+ self.save()
+
+ def getPlugin(self, plugin, option):
+ """gets a value for a plugin"""
+ val = self.plugin[plugin][option]["value"]
+ try:
+ if type(val) in (str, unicode):
+ return val.decode("utf8")
+ else:
+ return val
+ except:
+ return val
+
+ def setPlugin(self, plugin, option, value):
+ """sets a value for a plugin"""
+
+ value = self.cast(self.plugin[plugin][option]["type"], value)
+
+ if self.pluginCB: self.pluginCB(plugin, option, value)
+
+ self.plugin[plugin][option]["value"] = value
+ self.save()
+
+ def getMetaData(self, section, option):
+ """ get all config data for an option """
+ return self.config[section][option]
+
+ def addPluginConfig(self, name, config, outline=""):
+ """adds config options with tuples (name, type, desc, default)"""
+ if name not in self.plugin:
+ conf = {"desc": name,
+ "outline": outline}
+ self.plugin[name] = conf
+ else:
+ conf = self.plugin[name]
+ conf["outline"] = outline
+
+ for item in config:
+ if item[0] in conf:
+ conf[item[0]]["type"] = item[1]
+ conf[item[0]]["desc"] = item[2]
+ else:
+ conf[item[0]] = {
+ "desc": item[2],
+ "type": item[1],
+ "value": self.cast(item[1], item[3])
+ }
+
+ values = [x[0] for x in config] + ["desc", "outline"]
+ #delete old values
+ for item in conf.keys():
+ if item not in values:
+ del conf[item]
+
+ def deleteConfig(self, name):
+ """Removes a plugin config"""
+ if name in self.plugin:
+ del self.plugin[name]
+
+
+ def deleteOldPlugins(self):
+ """ remove old plugins from config """
+
+ for name in IGNORE:
+ if name in self.plugin:
+ del self.plugin[name]
+
+
+class Section:
+ """provides dictionary like access for configparser"""
+
+ def __init__(self, parser, section):
+ """Constructor"""
+ self.parser = parser
+ self.section = section
+
+ def __getitem__(self, item):
+ """getitem"""
+ return self.parser.get(self.section, item)
+
+ def __setitem__(self, item, value):
+ """setitem"""
+ self.parser.set(self.section, item, value)
diff --git a/pyload/Core.py b/pyload/Core.py
new file mode 100644
index 000000000..5f506b980
--- /dev/null
+++ b/pyload/Core.py
@@ -0,0 +1,663 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: spoob
+ @author: sebnapi
+ @author: RaNaN
+ @author: mkaay
+ @version: v0.4.10
+"""
+CURRENT_VERSION = '0.4.10'
+
+import __builtin__
+
+from getopt import getopt, GetoptError
+import pyload.common.pylgettext as gettext
+from imp import find_module
+import logging
+import logging.handlers
+import os
+from os import _exit, execl, getcwd, makedirs, remove, sep, walk, chdir, close
+from os.path import exists, join
+import signal
+import subprocess
+import sys
+from sys import argv, executable, exit
+from time import time, sleep
+from traceback import print_exc
+
+from pyload import InitHomeDir
+from pyload.plugins.AccountManager import AccountManager
+from pyload.CaptchaManager import CaptchaManager
+from pyload.ConfigParser import ConfigParser
+from pyload.plugins.PluginManager import PluginManager
+from pyload.PullEvents import PullManager
+from pyload.network.RequestFactory import RequestFactory
+from pyload.threads.ServerThread import WebServer
+from pyload.Scheduler import Scheduler
+from pyload.common.JsEngine import JsEngine
+from pyload import remote
+from pyload.remote.RemoteManager import RemoteManager
+from pyload.database import DatabaseBackend, FileHandler
+
+from pyload.utils import freeSpace, formatSize, get_console_encoding
+
+from codecs import getwriter
+
+enc = get_console_encoding(sys.stdout.encoding)
+sys.stdout = getwriter(enc)(sys.stdout, errors="replace")
+
+# TODO List
+# - configurable auth system ldap/mysql
+# - cron job like sheduler
+
+class Core(object):
+ """pyLoad Core, one tool to rule them all... (the filehosters) :D"""
+
+ def __init__(self):
+ self.doDebug = False
+ self.running = False
+ self.daemon = False
+ self.remote = True
+ self.arg_links = []
+ self.pidfile = "pyload.pid"
+ self.deleteLinks = False # will delete links on startup
+
+ if len(argv) > 1:
+ try:
+ options, args = getopt(argv[1:], 'vchdusqp:',
+ ["version", "clear", "clean", "help", "debug", "user",
+ "setup", "configdir=", "changedir", "daemon",
+ "quit", "status", "no-remote","pidfile="])
+
+ for option, argument in options:
+ if option in ("-v", "--version"):
+ print "pyLoad", CURRENT_VERSION
+ exit()
+ elif option in ("-p", "--pidfile"):
+ self.pidfile = argument
+ elif option == "--daemon":
+ self.daemon = True
+ elif option in ("-c", "--clear"):
+ self.deleteLinks = True
+ elif option in ("-h", "--help"):
+ self.print_help()
+ exit()
+ elif option in ("-d", "--debug"):
+ self.doDebug = True
+ elif option in ("-u", "--user"):
+ from pyload.setup import Setup
+
+ self.config = ConfigParser()
+ s = Setup(pypath, self.config)
+ s.set_user()
+ exit()
+ elif option in ("-s", "--setup"):
+ from pyload.setup import Setup
+
+ self.config = ConfigParser()
+ s = Setup(pypath, self.config)
+ s.start()
+ exit()
+ elif option == "--changedir":
+ from pyload.setup import Setup
+
+ self.config = ConfigParser()
+ s = Setup(pypath, self.config)
+ s.conf_path(True)
+ exit()
+ elif option in ("-q", "--quit"):
+ self.quitInstance()
+ exit()
+ elif option == "--status":
+ pid = self.isAlreadyRunning()
+ if self.isAlreadyRunning():
+ print pid
+ exit(0)
+ else:
+ print "false"
+ exit(1)
+ elif option == "--clean":
+ self.cleanTree()
+ exit()
+ elif option == "--no-remote":
+ self.remote = False
+
+ except GetoptError:
+ print 'Unknown Argument(s) "%s"' % " ".join(argv[1:])
+ self.print_help()
+ exit()
+
+ def print_help(self):
+ print
+ print "pyLoad v%s 2008-2014 the pyLoad Team" % CURRENT_VERSION
+ print
+ if sys.argv[0].endswith(".py"):
+ print "Usage: python pyload.py [options]"
+ else:
+ print "Usage: pyload [options]"
+ print
+ print "<Options>"
+ print " -v, --version", " " * 10, "Print version to terminal"
+ print " -c, --clear", " " * 12, "Delete all saved packages/links"
+ #print " -a, --add=<link/list>", " " * 2, "Add the specified links"
+ print " -u, --user", " " * 13, "Manages users"
+ print " -d, --debug", " " * 12, "Enable debug mode"
+ print " -s, --setup", " " * 12, "Run Setup Assistant"
+ print " --configdir=<dir>", " " * 6, "Run with <dir> as config directory"
+ print " -p, --pidfile=<file>", " " * 3, "Set pidfile to <file>"
+ print " --changedir", " " * 12, "Change config dir permanently"
+ print " --daemon", " " * 15, "Daemonmize after start"
+ print " --no-remote", " " * 12, "Disable remote access (saves RAM)"
+ print " --status", " " * 15, "Display pid if running or False"
+ print " --clean", " " * 16, "Remove .pyc/.pyo files"
+ print " -q, --quit", " " * 13, "Quit running pyLoad instance"
+ print " -h, --help", " " * 13, "Display this help screen"
+ print
+
+ def toggle_pause(self):
+ if self.threadManager.pause:
+ self.threadManager.pause = False
+ return False
+ elif not self.threadManager.pause:
+ self.threadManager.pause = True
+ return True
+
+ def quit(self, a, b):
+ self.shutdown()
+ self.log.info(_("Received Quit signal"))
+ _exit(1)
+
+ def writePidFile(self):
+ self.deletePidFile()
+ pid = os.getpid()
+ f = open(self.pidfile, "wb")
+ f.write(str(pid))
+ f.close()
+
+ def deletePidFile(self):
+ if self.checkPidFile():
+ self.log.debug("Deleting old pidfile %s" % self.pidfile)
+ os.remove(self.pidfile)
+
+ def checkPidFile(self):
+ """ return pid as int or 0"""
+ if os.path.isfile(self.pidfile):
+ f = open(self.pidfile, "rb")
+ pid = f.read().strip()
+ f.close()
+ if pid:
+ pid = int(pid)
+ return pid
+
+ return 0
+
+ def isAlreadyRunning(self):
+ pid = self.checkPidFile()
+ if not pid or os.name == "nt": return False
+ try:
+ os.kill(pid, 0) # 0 - default signal (does nothing)
+ except:
+ return 0
+
+ return pid
+
+ def quitInstance(self):
+ if os.name == "nt":
+ print "Not supported on windows."
+ return
+
+ pid = self.isAlreadyRunning()
+ if not pid:
+ print "No pyLoad running."
+ return
+
+ try:
+ os.kill(pid, 3) #SIGUIT
+
+ t = time()
+ print "waiting for pyLoad to quit"
+
+ while exists(self.pidfile) and t + 10 > time():
+ sleep(0.25)
+
+ if not exists(self.pidfile):
+ print "pyLoad successfully stopped"
+ else:
+ os.kill(pid, 9) #SIGKILL
+ print "pyLoad did not respond"
+ print "Kill signal was send to process with id %s" % pid
+
+ except:
+ print "Error quitting pyLoad"
+
+
+ def cleanTree(self):
+ for path, dirs, files in walk(self.path("")):
+ for f in files:
+ if not f.endswith(".pyo") and not f.endswith(".pyc"):
+ continue
+
+ if "_25" in f or "_26" in f or "_27" in f:
+ continue
+
+ print join(path, f)
+ remove(join(path, f))
+
+ def start(self, rpc=True, web=True):
+ """ starts the fun :D """
+
+ self.version = CURRENT_VERSION
+
+ if not exists("pyload.conf"):
+ from pyload.setup import Setup
+
+ print "This is your first start, running configuration assistent now."
+ self.config = ConfigParser()
+ s = Setup(pypath, self.config)
+ res = False
+ try:
+ res = s.start()
+ except SystemExit:
+ pass
+ except KeyboardInterrupt:
+ print "\nSetup interrupted"
+ except:
+ res = False
+ print_exc()
+ print "Setup failed"
+ if not res:
+ remove("pyload.conf")
+
+ exit()
+
+ try: signal.signal(signal.SIGQUIT, self.quit)
+ except: pass
+
+ self.config = ConfigParser()
+
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("pyLoad", self.path("locale"),
+ languages=[self.config['general']['language'], "en"], fallback=True)
+ translation.install(True)
+
+ self.debug = self.doDebug or self.config['general']['debug_mode']
+ self.remote &= self.config['remote']['activated']
+
+ pid = self.isAlreadyRunning()
+ if pid:
+ print _("pyLoad already running with pid %s") % pid
+ exit()
+
+ if os.name != "nt" and self.config["general"]["renice"]:
+ os.system("renice %d %d" % (self.config["general"]["renice"], os.getpid()))
+
+ if self.config["permission"]["change_group"]:
+ if os.name != "nt":
+ try:
+ from grp import getgrnam
+
+ group = getgrnam(self.config["permission"]["group"])
+ os.setgid(group[2])
+ except Exception, e:
+ print _("Failed changing group: %s") % e
+
+ if self.config["permission"]["change_user"]:
+ if os.name != "nt":
+ try:
+ from pwd import getpwnam
+
+ user = getpwnam(self.config["permission"]["user"])
+ os.setuid(user[2])
+ except Exception, e:
+ print _("Failed changing user: %s") % e
+
+ self.check_file(self.config['log']['log_folder'], _("folder for logs"), True)
+
+ if self.debug:
+ self.init_logger(logging.DEBUG) # logging level
+ else:
+ self.init_logger(logging.INFO) # logging level
+
+ self.do_kill = False
+ self.do_restart = False
+ self.shuttedDown = False
+
+ self.log.info(_("Starting") + " pyLoad %s" % CURRENT_VERSION)
+ self.log.info(_("Using home directory: %s") % getcwd())
+
+ self.writePidFile()
+
+ #@TODO refractor
+
+ remote.activated = self.remote
+ self.log.debug("Remote activated: %s" % self.remote)
+
+ self.check_install("Crypto", _("pycrypto to decode container files"))
+ #img = self.check_install("Image", _("Python Image Library (PIL) for captcha reading"))
+ #self.check_install("pycurl", _("pycurl to download any files"), True, True)
+ self.check_file("tmp", _("folder for temporary files"), True)
+ #tesser = self.check_install("tesseract", _("tesseract for captcha reading"), False) if os.name != "nt" else True
+
+ self.captcha = True # checks seems to fail, although tesseract is available
+
+ self.check_file(self.config['general']['download_folder'], _("folder for downloads"), True)
+
+ if self.config['ssl']['activated']:
+ self.check_install("OpenSSL", _("OpenSSL for secure connection"))
+
+ self.setupDB()
+ if self.config.oldRemoteData:
+ self.log.info(_("Moving old user config to DB"))
+ self.db.addUser(self.config.oldRemoteData["username"], self.config.oldRemoteData["password"])
+
+ self.log.info(_("Please check your logindata with ./pyload.py -u"))
+
+ if self.deleteLinks:
+ self.log.info(_("All links removed"))
+ self.db.purgeLinks()
+
+ self.requestFactory = RequestFactory(self)
+ __builtin__.pyreq = self.requestFactory
+
+ self.lastClientConnected = 0
+
+ # later imported because they would trigger api import, and remote value not set correctly
+ from pyload import Api
+ from pyload.HookManager import HookManager
+ from pyload.ThreadManager import ThreadManager
+
+ if Api.activated != self.remote:
+ self.log.warning("Import error: API remote status not correct.")
+
+ self.api = Api.Api(self)
+
+ self.scheduler = Scheduler(self)
+
+ #hell yeah, so many important managers :D
+ self.pluginManager = PluginManager(self)
+ self.pullManager = PullManager(self)
+ self.accountManager = AccountManager(self)
+ self.threadManager = ThreadManager(self)
+ self.captchaManager = CaptchaManager(self)
+ self.hookManager = HookManager(self)
+ self.remoteManager = RemoteManager(self)
+
+ self.js = JsEngine()
+
+ self.log.info(_("Downloadtime: %s") % self.api.isTimeDownload())
+
+ if rpc:
+ self.remoteManager.startBackends()
+
+ if web:
+ self.init_webserver()
+
+ spaceLeft = freeSpace(self.config["general"]["download_folder"])
+
+ self.log.info(_("Free space: %s") % formatSize(spaceLeft))
+
+ self.config.save() #save so config files gets filled
+
+ link_file = join(pypath, "links.txt")
+
+ if exists(link_file):
+ f = open(link_file, "rb")
+ if f.read().strip():
+ self.api.addPackage("links.txt", [link_file], 1)
+ f.close()
+
+ link_file = "links.txt"
+ if exists(link_file):
+ f = open(link_file, "rb")
+ if f.read().strip():
+ self.api.addPackage("links.txt", [link_file], 1)
+ f.close()
+
+ #self.scheduler.addJob(0, self.accountManager.getAccountInfos)
+ self.log.info(_("Activating Accounts..."))
+ self.accountManager.getAccountInfos()
+
+ self.threadManager.pause = False
+ self.running = True
+
+ self.log.info(_("Activating Plugins..."))
+ self.hookManager.coreReady()
+
+ self.log.info(_("pyLoad is up and running"))
+
+ #test api
+# from pyload.common.APIExerciser import startApiExerciser
+# startApiExerciser(self, 3)
+
+ #some memory stats
+# from guppy import hpy
+# hp=hpy()
+# import objgraph
+# objgraph.show_most_common_types(limit=20)
+# import memdebug
+# memdebug.start(8002)
+
+ locals().clear()
+
+ while True:
+ sleep(2)
+ if self.do_restart:
+ self.log.info(_("restarting pyLoad"))
+ self.restart()
+ if self.do_kill:
+ self.shutdown()
+ self.log.info(_("pyLoad quits"))
+ self.removeLogger()
+ _exit(0) #@TODO thrift blocks shutdown
+
+ self.threadManager.work()
+ self.scheduler.work()
+
+ def setupDB(self):
+ self.db = DatabaseBackend(self) # the backend
+ self.db.setup()
+
+ self.files = FileHandler(self)
+ self.db.manager = self.files #ugly?
+
+ def init_webserver(self):
+ if self.config['webinterface']['activated']:
+ self.webserver = WebServer(self)
+ self.webserver.start()
+
+ def init_logger(self, level):
+ console = logging.StreamHandler(sys.stdout)
+ frm = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", "%d.%m.%Y %H:%M:%S")
+ console.setFormatter(frm)
+ self.log = logging.getLogger("log") # settable in config
+
+ if self.config['log']['file_log']:
+ if self.config['log']['log_rotate']:
+ file_handler = logging.handlers.RotatingFileHandler(join(self.config['log']['log_folder'], 'log.txt'),
+ maxBytes=self.config['log']['log_size'] * 1024,
+ backupCount=int(self.config['log']['log_count']),
+ encoding="utf8")
+ else:
+ file_handler = logging.FileHandler(join(self.config['log']['log_folder'], 'log.txt'), encoding="utf8")
+
+ file_handler.setFormatter(frm)
+ self.log.addHandler(file_handler)
+
+ self.log.addHandler(console) #if console logging
+ self.log.setLevel(level)
+
+ def removeLogger(self):
+ for h in list(self.log.handlers):
+ self.log.removeHandler(h)
+ h.close()
+
+ def check_install(self, check_name, legend, python=True, essential=False):
+ """check wether needed tools are installed"""
+ try:
+ if python:
+ find_module(check_name)
+ else:
+ pipe = subprocess.PIPE
+ subprocess.Popen(check_name, stdout=pipe, stderr=pipe)
+
+ return True
+ except:
+ if essential:
+ self.log.info(_("Install %s") % legend)
+ exit()
+
+ return False
+
+ def check_file(self, check_names, description="", folder=False, empty=True, essential=False, quiet=False):
+ """check wether needed files exists"""
+ tmp_names = []
+ if not type(check_names) == list:
+ tmp_names.append(check_names)
+ else:
+ tmp_names.extend(check_names)
+ file_created = True
+ file_exists = True
+ for tmp_name in tmp_names:
+ if not exists(tmp_name):
+ file_exists = False
+ if empty:
+ try:
+ if folder:
+ tmp_name = tmp_name.replace("/", sep)
+ makedirs(tmp_name)
+ else:
+ open(tmp_name, "w")
+ except:
+ file_created = False
+ else:
+ file_created = False
+
+ if not file_exists and not quiet:
+ if file_created:
+ #self.log.info( _("%s created") % description )
+ pass
+ else:
+ if not empty:
+ self.log.warning(
+ _("could not find %(desc)s: %(name)s") % {"desc": description, "name": tmp_name})
+ else:
+ print _("could not create %(desc)s: %(name)s") % {"desc": description, "name": tmp_name}
+ if essential:
+ exit()
+
+ def isClientConnected(self):
+ return (self.lastClientConnected + 30) > time()
+
+ def restart(self):
+ self.shutdown()
+ chdir(owd)
+ # close some open fds
+ for i in range(3, 50):
+ try:
+ close(i)
+ except :
+ pass
+
+ execl(executable, executable, *sys.argv)
+ _exit(0)
+
+ def shutdown(self):
+ self.log.info(_("shutting down..."))
+ try:
+ if self.config['webinterface']['activated'] and hasattr(self, "webserver"):
+ self.webserver.quit()
+
+ for thread in self.threadManager.threads:
+ thread.put("quit")
+ pyfiles = self.files.cache.values()
+
+ for pyfile in pyfiles:
+ pyfile.abortDownload()
+
+ self.hookManager.coreExiting()
+
+ except:
+ if self.debug:
+ print_exc()
+ self.log.info(_("error while shutting down"))
+
+ finally:
+ self.files.syncSave()
+ self.shuttedDown = True
+
+ self.deletePidFile()
+
+
+ def path(self, *args):
+ return join(pypath, *args)
+
+
+def deamon():
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError, e:
+ print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
+ sys.exit(1)
+
+ # decouple from parent environment
+ os.setsid()
+ os.umask(0)
+
+ # do second fork
+ try:
+ pid = os.fork()
+ if pid > 0:
+ # exit from second parent, print eventual PID before
+ print "Daemon PID %d" % pid
+ sys.exit(0)
+ except OSError, e:
+ print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
+ sys.exit(1)
+
+ # Iterate through and close some file descriptors.
+ for fd in range(0, 3):
+ try:
+ os.close(fd)
+ except OSError: # ERROR, fd wasn't open to begin with (ignored)
+ pass
+
+ os.open(os.devnull, os.O_RDWR) # standard input (0)
+ os.dup2(0, 1) # standard output (1)
+ os.dup2(0, 2)
+
+ pyload_core = Core()
+ pyload_core.start()
+
+
+def main():
+ if "--daemon" in sys.argv:
+ deamon()
+ else:
+ pyload_core = Core()
+ try:
+ pyload_core.start()
+ except KeyboardInterrupt:
+ pyload_core.shutdown()
+ pyload_core.log.info(_("killed pyLoad from Terminal"))
+ pyload_core.removeLogger()
+ _exit(1)
+
+# And so it begins...
+if __name__ == "__main__":
+ main()
diff --git a/pyload/HookManager.py b/pyload/HookManager.py
new file mode 100644
index 000000000..7545b4d60
--- /dev/null
+++ b/pyload/HookManager.py
@@ -0,0 +1,305 @@
+# -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN, mkaay
+ @interface-version: 0.1
+"""
+import __builtin__
+
+import traceback
+from thread import start_new_thread
+from threading import RLock
+
+from types import MethodType
+
+from pyload.threads.PluginThread import HookThread
+from pyload.plugins.PluginManager import literal_eval
+from utils import lock
+
+class HookManager:
+ """Manages hooks, delegates and handles Events.
+
+ Every plugin can define events, \
+ but some very usefull events are called by the Core.
+ Contrary to overwriting hook methods you can use event listener,
+ which provides additional entry point in the control flow.
+ Only do very short tasks or use threads.
+
+ **Known Events:**
+ Most hook methods exists as events. These are the additional known events.
+
+ ===================== ============== ==================================
+ Name Arguments Description
+ ===================== ============== ==================================
+ downloadPreparing fid A download was just queued and will be prepared now.
+ downloadStarts fid A plugin will immediately starts the download afterwards.
+ linksAdded links, pid Someone just added links, you are able to modify the links.
+ allDownloadsProcessed Every link was handled, pyload would idle afterwards.
+ allDownloadsFinished Every download in queue is finished.
+ unrarFinished folder, fname An Unrar job finished
+ configChanged The config was changed via the api.
+ pluginConfigChanged The plugin config changed, due to api or internal process.
+ ===================== ============== ==================================
+
+ | Notes:
+ | allDownloadsProcessed is *always* called before allDownloadsFinished.
+ | configChanged is *always* called before pluginConfigChanged.
+
+
+ """
+
+ def __init__(self, core):
+ self.core = core
+ self.config = self.core.config
+
+ __builtin__.hookManager = self #needed to let hooks register themself
+
+ self.log = self.core.log
+ self.plugins = []
+ self.pluginMap = {}
+ self.methods = {} #dict of names and list of methods usable by rpc
+
+ self.events = {} # contains events
+
+ #registering callback for config event
+ self.config.pluginCB = MethodType(self.dispatchEvent, "pluginConfigChanged", basestring)
+
+ self.addEvent("pluginConfigChanged", self.manageHooks)
+
+ self.lock = RLock()
+ self.createIndex()
+
+ def try_catch(func):
+ def new(*args):
+ try:
+ return func(*args)
+ except Exception, e:
+ args[0].log.error(_("Error executing hooks: %s") % str(e))
+ if args[0].core.debug:
+ traceback.print_exc()
+
+ return new
+
+
+ def addRPC(self, plugin, func, doc):
+ plugin = plugin.rpartition(".")[2]
+ doc = doc.strip() if doc else ""
+
+ if plugin in self.methods:
+ self.methods[plugin][func] = doc
+ else:
+ self.methods[plugin] = {func: doc}
+
+ def callRPC(self, plugin, func, args, parse):
+ if not args: args = tuple()
+ if parse:
+ args = tuple([literal_eval(x) for x in args])
+
+ plugin = self.pluginMap[plugin]
+ f = getattr(plugin, func)
+ return f(*args)
+
+
+ def createIndex(self):
+ plugins = []
+
+ active = []
+ deactive = []
+
+ for pluginname in self.core.pluginManager.hookPlugins:
+ try:
+ #hookClass = getattr(plugin, plugin.__name__)
+
+ if self.config.getPlugin(pluginname, "activated"):
+ pluginClass = self.core.pluginManager.loadClass("hooks", pluginname)
+ if not pluginClass: continue
+
+ plugin = pluginClass(self.core, self)
+ plugins.append(plugin)
+ self.pluginMap[pluginClass.__name__] = plugin
+ if plugin.isActivated():
+ active.append(pluginClass.__name__)
+ else:
+ deactive.append(pluginname)
+
+
+ except:
+ self.log.warning(_("Failed activating %(name)s") % {"name": pluginname})
+ if self.core.debug:
+ traceback.print_exc()
+
+ self.log.info(_("Activated plugins: %s") % ", ".join(sorted(active)))
+ self.log.info(_("Deactivate plugins: %s") % ", ".join(sorted(deactive)))
+
+ self.plugins = plugins
+
+ def manageHooks(self, plugin, name, value):
+ if name == "activated" and value:
+ self.activateHook(plugin)
+ elif name == "activated" and not value:
+ self.deactivateHook(plugin)
+
+ def activateHook(self, plugin):
+
+ #check if already loaded
+ for inst in self.plugins:
+ if inst.__name__ == plugin:
+ return
+
+ pluginClass = self.core.pluginManager.loadClass("hooks", plugin)
+
+ if not pluginClass: return
+
+ self.log.debug("Plugin loaded: %s" % plugin)
+
+ plugin = pluginClass(self.core, self)
+ self.plugins.append(plugin)
+ self.pluginMap[pluginClass.__name__] = plugin
+
+ # call core Ready
+ start_new_thread(plugin.coreReady, tuple())
+
+ def deactivateHook(self, plugin):
+
+ hook = None
+ for inst in self.plugins:
+ if inst.__name__ == plugin:
+ hook = inst
+
+ if not hook: return
+
+ self.log.debug("Plugin unloaded: %s" % plugin)
+
+ hook.unload()
+
+ #remove periodic call
+ self.log.debug("Removed callback %s" % self.core.scheduler.removeJob(hook.cb))
+ self.plugins.remove(hook)
+ del self.pluginMap[hook.__name__]
+
+
+ @try_catch
+ def coreReady(self):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.coreReady()
+
+ self.dispatchEvent("coreReady")
+
+ @try_catch
+ def coreExiting(self):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.coreExiting()
+
+ self.dispatchEvent("coreExiting")
+
+ @lock
+ def downloadPreparing(self, pyfile):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.downloadPreparing(pyfile)
+
+ self.dispatchEvent("downloadPreparing", pyfile)
+
+ @lock
+ def downloadFinished(self, pyfile):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.downloadFinished(pyfile)
+
+ self.dispatchEvent("downloadFinished", pyfile)
+
+ @lock
+ @try_catch
+ def downloadFailed(self, pyfile):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.downloadFailed(pyfile)
+
+ self.dispatchEvent("downloadFailed", pyfile)
+
+ @lock
+ def packageFinished(self, package):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.packageFinished(package)
+
+ self.dispatchEvent("packageFinished", package)
+
+ @lock
+ def beforeReconnecting(self, ip):
+ for plugin in self.plugins:
+ plugin.beforeReconnecting(ip)
+
+ self.dispatchEvent("beforeReconnecting", ip)
+
+ @lock
+ def afterReconnecting(self, ip):
+ for plugin in self.plugins:
+ if plugin.isActivated():
+ plugin.afterReconnecting(ip)
+
+ self.dispatchEvent("afterReconnecting", ip)
+
+ def startThread(self, function, *args, **kwargs):
+ t = HookThread(self.core.threadManager, function, args, kwargs)
+
+ def activePlugins(self):
+ """ returns all active plugins """
+ return [x for x in self.plugins if x.isActivated()]
+
+ def getAllInfo(self):
+ """returns info stored by hook plugins"""
+ info = {}
+ for name, plugin in self.pluginMap.iteritems():
+ if plugin.info:
+ #copy and convert so str
+ info[name] = dict([(x, str(y) if not isinstance(y, basestring) else y) for x, y in plugin.info.iteritems()])
+ return info
+
+
+ def getInfo(self, plugin):
+ info = {}
+ if plugin in self.pluginMap and self.pluginMap[plugin].info:
+ info = dict([(x, str(y) if not isinstance(y, basestring) else y)
+ for x, y in self.pluginMap[plugin].info.iteritems()])
+
+ return info
+
+ def addEvent(self, event, func):
+ """Adds an event listener for event name"""
+ if event in self.events:
+ self.events[event].append(func)
+ else:
+ self.events[event] = [func]
+
+ def removeEvent(self, event, func):
+ """removes previously added event listener"""
+ if event in self.events:
+ self.events[event].remove(func)
+
+ def dispatchEvent(self, event, *args):
+ """dispatches event with args"""
+ if event in self.events:
+ for f in self.events[event]:
+ try:
+ f(*args)
+ except Exception, e:
+ self.log.warning("Error calling event handler %s: %s, %s, %s"
+ % (event, f, args, str(e)))
+ if self.core.debug:
+ traceback.print_exc()
diff --git a/pyload/InitHomeDir.py b/pyload/InitHomeDir.py
new file mode 100644
index 000000000..ca229fb1e
--- /dev/null
+++ b/pyload/InitHomeDir.py
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+
+ This modules inits working directories and global variables, pydir and homedir
+"""
+
+from os import makedirs, path, chdir
+from os.path import join
+import sys
+from sys import argv, platform
+
+import __builtin__
+
+__builtin__.owd = path.abspath("") # original working directory
+__builtin__.pypath = path.abspath(path.join(__file__, "..", ".."))
+
+sys.path.append(join(pypath, "pyload", "lib"))
+
+homedir = ""
+
+if platform == 'nt':
+ homedir = path.expanduser("~")
+ if homedir == "~":
+ import ctypes
+
+ CSIDL_APPDATA = 26
+ _SHGetFolderPath = ctypes.windll.shell32.SHGetFolderPathW
+ _SHGetFolderPath.argtypes = [ctypes.wintypes.HWND,
+ ctypes.c_int,
+ ctypes.wintypes.HANDLE,
+ ctypes.wintypes.DWORD, ctypes.wintypes.LPCWSTR]
+
+ path_buf = ctypes.wintypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
+ result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf)
+ homedir = path_buf.value
+else:
+ homedir = path.expanduser("~")
+
+__builtin__.homedir = homedir
+
+args = " ".join(argv[1:])
+
+# dirty method to set configdir from commandline arguments
+if "--configdir=" in args:
+ for aa in argv:
+ if aa.startswith("--configdir="):
+ configdir = aa.replace("--configdir=", "", 1).strip()
+elif path.exists(path.join(pypath, "pyload", "config", "configdir")):
+ f = open(path.join(pypath, "pyload", "config", "configdir"), "rb")
+ c = f.read().strip()
+ f.close()
+ configdir = path.join(pypath, c)
+else:
+ if platform in ("posix", "linux2"):
+ configdir = path.join(homedir, ".pyload")
+ else:
+ configdir = path.join(homedir, "pyload")
+
+if not path.exists(configdir):
+ makedirs(configdir, 0700)
+
+__builtin__.configdir = configdir
+chdir(configdir)
+
+#print "Using %s as working directory." % configdir
diff --git a/pyload/PullEvents.py b/pyload/PullEvents.py
new file mode 100644
index 000000000..0739b4ec8
--- /dev/null
+++ b/pyload/PullEvents.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: mkaay
+"""
+
+from time import time
+from pyload.utils import uniqify
+
+class PullManager:
+ def __init__(self, core):
+ self.core = core
+ self.clients = []
+
+ def newClient(self, uuid):
+ self.clients.append(Client(uuid))
+
+ def clean(self):
+ for n, client in enumerate(self.clients):
+ if client.lastActive + 30 < time():
+ del self.clients[n]
+
+ def getEvents(self, uuid):
+ events = []
+ validUuid = False
+ for client in self.clients:
+ if client.uuid == uuid:
+ client.lastActive = time()
+ validUuid = True
+ while client.newEvents():
+ events.append(client.popEvent().toList())
+ break
+ if not validUuid:
+ self.newClient(uuid)
+ events = [ReloadAllEvent("queue").toList(), ReloadAllEvent("collector").toList()]
+ return uniqify(events)
+
+ def addEvent(self, event):
+ for client in self.clients:
+ client.addEvent(event)
+
+class Client:
+ def __init__(self, uuid):
+ self.uuid = uuid
+ self.lastActive = time()
+ self.events = []
+
+ def newEvents(self):
+ return len(self.events) > 0
+
+ def popEvent(self):
+ if not len(self.events):
+ return None
+ return self.events.pop(0)
+
+ def addEvent(self, event):
+ self.events.append(event)
+
+class UpdateEvent:
+ def __init__(self, itype, iid, destination):
+ assert itype == "pack" or itype == "file"
+ assert destination == "queue" or destination == "collector"
+ self.type = itype
+ self.id = iid
+ self.destination = destination
+
+ def toList(self):
+ return ["update", self.destination, self.type, self.id]
+
+class RemoveEvent:
+ def __init__(self, itype, iid, destination):
+ assert itype == "pack" or itype == "file"
+ assert destination == "queue" or destination == "collector"
+ self.type = itype
+ self.id = iid
+ self.destination = destination
+
+ def toList(self):
+ return ["remove", self.destination, self.type, self.id]
+
+class InsertEvent:
+ def __init__(self, itype, iid, after, destination):
+ assert itype == "pack" or itype == "file"
+ assert destination == "queue" or destination == "collector"
+ self.type = itype
+ self.id = iid
+ self.after = after
+ self.destination = destination
+
+ def toList(self):
+ return ["insert", self.destination, self.type, self.id, self.after]
+
+class ReloadAllEvent:
+ def __init__(self, destination):
+ assert destination == "queue" or destination == "collector"
+ self.destination = destination
+
+ def toList(self):
+ return ["reload", self.destination]
+
+class AccountUpdateEvent:
+ def toList(self):
+ return ["account"]
+
+class ConfigUpdateEvent:
+ def toList(self):
+ return ["config"]
diff --git a/pyload/PyFile.py b/pyload/PyFile.py
new file mode 100644
index 000000000..c4ce71570
--- /dev/null
+++ b/pyload/PyFile.py
@@ -0,0 +1,284 @@
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+ @author: mkaay
+"""
+
+from pyload.PullEvents import UpdateEvent
+from pyload.utils import formatSize, lock
+
+from time import sleep, time
+
+from threading import RLock
+
+statusMap = {
+ "finished": 0,
+ "offline": 1,
+ "online": 2,
+ "queued": 3,
+ "skipped": 4,
+ "waiting": 5,
+ "temp. offline": 6,
+ "starting": 7,
+ "failed": 8,
+ "aborted": 9,
+ "decrypting": 10,
+ "custom": 11,
+ "downloading": 12,
+ "processing": 13,
+ "unknown": 14,
+}
+
+
+def setSize(self, value):
+ self._size = int(value)
+
+class PyFile(object):
+ """
+ Represents a file object at runtime
+ """
+ __slots__ = ("m", "id", "url", "name", "size", "_size", "status", "pluginname", "packageid",
+ "error", "order", "lock", "plugin", "waitUntil", "active", "abort", "statusname",
+ "reconnected", "progress", "maxprogress", "pluginmodule", "pluginclass")
+
+ def __init__(self, manager, id, url, name, size, status, error, pluginname, package, order):
+ self.m = manager
+
+ self.id = int(id)
+ self.url = url
+ self.name = name
+ self.size = size
+ self.status = status
+ self.pluginname = pluginname
+ self.packageid = package #should not be used, use package() instead
+ self.error = error
+ self.order = order
+ # database information ends here
+
+ self.lock = RLock()
+
+ self.plugin = None
+ #self.download = None
+
+ self.waitUntil = 0 # time() + time to wait
+
+ # status attributes
+ self.active = False #obsolete?
+ self.abort = False
+ self.reconnected = False
+
+ self.statusname = None
+
+ self.progress = 0
+ self.maxprogress = 100
+
+ self.m.cache[int(id)] = self
+
+
+ # will convert all sizes to ints
+ size = property(lambda self: self._size, setSize)
+
+ def __repr__(self):
+ return "PyFile %s: %s@%s" % (self.id, self.name, self.pluginname)
+
+ @lock
+ def initPlugin(self):
+ """ inits plugin instance """
+ if not self.plugin:
+ self.pluginmodule = self.m.core.pluginManager.getPlugin(self.pluginname)
+ self.pluginclass = getattr(self.pluginmodule, self.m.core.pluginManager.getPluginName(self.pluginname))
+ self.plugin = self.pluginclass(self)
+
+ @lock
+ def hasPlugin(self):
+ """Thread safe way to determine this file has initialized plugin attribute
+
+ :return:
+ """
+ return hasattr(self, "plugin") and self.plugin
+
+ def package(self):
+ """ return package instance"""
+ return self.m.getPackage(self.packageid)
+
+ def setStatus(self, status):
+ self.status = statusMap[status]
+ self.sync() #@TODO needed aslong no better job approving exists
+
+ def setCustomStatus(self, msg, status="processing"):
+ self.statusname = msg
+ self.setStatus(status)
+
+ def getStatusName(self):
+ if self.status not in (13, 14) or not self.statusname:
+ return self.m.statusMsg[self.status]
+ else:
+ return self.statusname
+
+ def hasStatus(self, status):
+ return statusMap[status] == self.status
+
+ def sync(self):
+ """sync PyFile instance with database"""
+ self.m.updateLink(self)
+
+ @lock
+ def release(self):
+ """sync and remove from cache"""
+ # file has valid package
+ if self.packageid > 0:
+ self.sync()
+
+ if hasattr(self, "plugin") and self.plugin:
+ self.plugin.clean()
+ del self.plugin
+
+ self.m.releaseLink(self.id)
+
+ def delete(self):
+ """delete pyfile from database"""
+ self.m.deleteLink(self.id)
+
+ def toDict(self):
+ """return dict with all information for interface"""
+ return self.toDbDict()
+
+ def toDbDict(self):
+ """return data as dict for databse
+
+ format:
+
+ {
+ id: {'url': url, 'name': name ... }
+ }
+
+ """
+ return {
+ self.id: {
+ 'id': self.id,
+ 'url': self.url,
+ 'name': self.name,
+ 'plugin': self.pluginname,
+ 'size': self.getSize(),
+ 'format_size': self.formatSize(),
+ 'status': self.status,
+ 'statusmsg': self.getStatusName(),
+ 'package': self.packageid,
+ 'error': self.error,
+ 'order': self.order
+ }
+ }
+
+ def abortDownload(self):
+ """abort pyfile if possible"""
+ while self.id in self.m.core.threadManager.processingIds():
+ self.abort = True
+ if self.plugin and self.plugin.req:
+ self.plugin.req.abortDownloads()
+ sleep(0.1)
+
+ self.abort = False
+ if self.hasPlugin() and self.plugin.req:
+ self.plugin.req.abortDownloads()
+
+ self.release()
+
+ def finishIfDone(self):
+ """set status to finish and release file if every thread is finished with it"""
+
+ if self.id in self.m.core.threadManager.processingIds():
+ return False
+
+ self.setStatus("finished")
+ self.release()
+ self.m.checkAllLinksFinished()
+ return True
+
+ def checkIfProcessed(self):
+ self.m.checkAllLinksProcessed(self.id)
+
+ def formatWait(self):
+ """ formats and return wait time in humanreadable format """
+ seconds = self.waitUntil - time()
+
+ if seconds < 0: return "00:00:00"
+
+ hours, seconds = divmod(seconds, 3600)
+ minutes, seconds = divmod(seconds, 60)
+ return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
+
+ def formatSize(self):
+ """ formats size to readable format """
+ return formatSize(self.getSize())
+
+ def formatETA(self):
+ """ formats eta to readable format """
+ seconds = self.getETA()
+
+ if seconds < 0: return "00:00:00"
+
+ hours, seconds = divmod(seconds, 3600)
+ minutes, seconds = divmod(seconds, 60)
+ return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
+
+ def getSpeed(self):
+ """ calculates speed """
+ try:
+ return self.plugin.req.speed
+ except:
+ return 0
+
+ def getETA(self):
+ """ gets established time of arrival"""
+ try:
+ return self.getBytesLeft() / self.getSpeed()
+ except:
+ return 0
+
+ def getBytesLeft(self):
+ """ gets bytes left """
+ try:
+ return self.getSize() - self.plugin.req.arrived
+ except:
+ return 0
+
+ def getPercent(self):
+ """ get % of download """
+ if self.status == 12:
+ try:
+ return self.plugin.req.percent
+ except:
+ return 0
+ else:
+ return self.progress
+
+ def getSize(self):
+ """ get size of download """
+ try:
+ if self.plugin.req.size:
+ return self.plugin.req.size
+ else:
+ return self.size
+ except:
+ return self.size
+
+ def notifyChange(self):
+ e = UpdateEvent("file", self.id, "collector" if not self.package().queue else "queue")
+ self.m.core.pullManager.addEvent(e)
+
+ def setProgress(self, value):
+ if not value == self.progress:
+ self.progress = value
+ self.notifyChange()
diff --git a/pyload/PyPackage.py b/pyload/PyPackage.py
new file mode 100644
index 000000000..3961d8a70
--- /dev/null
+++ b/pyload/PyPackage.py
@@ -0,0 +1,79 @@
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+ @author: mkaay
+"""
+
+from pyload.PullEvents import UpdateEvent
+from pyload.utils import safe_filename
+
+class PyPackage:
+ """
+ Represents a package object at runtime
+ """
+ def __init__(self, manager, id, name, folder, site, password, queue, order):
+ self.m = manager
+ self.m.packageCache[int(id)] = self
+
+ self.id = int(id)
+ self.name = name
+ self._folder = folder
+ self.site = site
+ self.password = password
+ self.queue = queue
+ self.order = order
+ self.setFinished = False
+
+ @property
+ def folder(self):
+ return safe_filename(self._folder)
+
+ def toDict(self):
+ """ Returns a dictionary representation of the data.
+
+ :return: dict: {id: { attr: value }}
+ """
+ return {
+ self.id: {
+ 'id': self.id,
+ 'name': self.name,
+ 'folder': self.folder,
+ 'site': self.site,
+ 'password': self.password,
+ 'queue': self.queue,
+ 'order': self.order,
+ 'links': {}
+ }
+ }
+
+ def getChildren(self):
+ """get information about contained links"""
+ return self.m.getPackageData(self.id)["links"]
+
+ def sync(self):
+ """sync with db"""
+ self.m.updatePackage(self)
+
+ def release(self):
+ """sync and delete from cache"""
+ self.sync()
+ self.m.releasePackage(self.id)
+
+ def delete(self):
+ self.m.deletePackage(self.id)
+
+ def notifyChange(self):
+ e = UpdateEvent("pack", self.id, "collector" if not self.queue else "queue")
+ self.m.core.pullManager.addEvent(e)
diff --git a/module/Scheduler.py b/pyload/Scheduler.py
index 71b5f96af..71b5f96af 100644
--- a/module/Scheduler.py
+++ b/pyload/Scheduler.py
diff --git a/pyload/ThreadManager.py b/pyload/ThreadManager.py
new file mode 100644
index 000000000..d9a6e1b8c
--- /dev/null
+++ b/pyload/ThreadManager.py
@@ -0,0 +1,317 @@
+# -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+from os.path import exists, join
+import re
+from subprocess import Popen
+from threading import Event, Lock
+from time import sleep, time
+from traceback import print_exc
+from random import choice
+
+import pycurl
+
+from pyload.threads import PluginThread
+from pyload.PyFile import PyFile
+from pyload.network.RequestFactory import getURL
+from pyload.utils import freeSpace, lock
+
+
+class ThreadManager:
+ """manages the download threads, assign jobs, reconnect etc"""
+
+
+ def __init__(self, core):
+ """Constructor"""
+ self.core = core
+ self.log = core.log
+
+ self.threads = [] # thread list
+ self.localThreads = [] #hook+decrypter threads
+
+ self.pause = True
+
+ self.reconnecting = Event()
+ self.reconnecting.clear()
+ self.downloaded = 0 #number of files downloaded since last cleanup
+
+ self.lock = Lock()
+
+ # some operations require to fetch url info from hoster, so we caching them so it wont be done twice
+ # contains a timestamp and will be purged after timeout
+ self.infoCache = {}
+
+ # pool of ids for online check
+ self.resultIDs = 0
+
+ # threads which are fetching hoster results
+ self.infoResults = {}
+ #timeout for cache purge
+ self.timestamp = 0
+
+ pycurl.global_init(pycurl.GLOBAL_DEFAULT)
+
+ for i in range(0, self.core.config.get("download", "max_downloads")):
+ self.createThread()
+
+
+ def createThread(self):
+ """create a download thread"""
+
+ thread = PluginThread.DownloadThread(self)
+ self.threads.append(thread)
+
+ def createInfoThread(self, data, pid):
+ """
+ start a thread whichs fetches online status and other infos
+ data = [ .. () .. ]
+ """
+ self.timestamp = time() + 5 * 60
+
+ PluginThread.InfoThread(self, data, pid)
+
+ @lock
+ def createResultThread(self, data, add=False):
+ """ creates a thread to fetch online status, returns result id """
+ self.timestamp = time() + 5 * 60
+
+ rid = self.resultIDs
+ self.resultIDs += 1
+
+ PluginThread.InfoThread(self, data, rid=rid, add=add)
+
+ return rid
+
+
+ @lock
+ def getInfoResult(self, rid):
+ """returns result and clears it"""
+ self.timestamp = time() + 5 * 60
+
+ if rid in self.infoResults:
+ data = self.infoResults[rid]
+ self.infoResults[rid] = {}
+ return data
+ else:
+ return {}
+
+ @lock
+ def setInfoResults(self, rid, result):
+ self.infoResults[rid].update(result)
+
+ def getActiveFiles(self):
+ active = [x.active for x in self.threads if x.active and isinstance(x.active, PyFile)]
+
+ for t in self.localThreads:
+ active.extend(t.getActiveFiles())
+
+ return active
+
+ def processingIds(self):
+ """get a id list of all pyfiles processed"""
+ return [x.id for x in self.getActiveFiles()]
+
+
+ def work(self):
+ """run all task which have to be done (this is for repetivive call by core)"""
+ try:
+ self.tryReconnect()
+ except Exception, e:
+ self.log.error(_("Reconnect Failed: %s") % str(e) )
+ self.reconnecting.clear()
+ if self.core.debug:
+ print_exc()
+ self.checkThreadCount()
+
+ try:
+ self.assignJob()
+ except Exception, e:
+ self.log.warning("Assign job error", e)
+ if self.core.debug:
+ print_exc()
+
+ sleep(0.5)
+ self.assignJob()
+ #it may be failed non critical so we try it again
+
+ if (self.infoCache or self.infoResults) and self.timestamp < time():
+ self.infoCache.clear()
+ self.infoResults.clear()
+ self.log.debug("Cleared Result cache")
+
+ #--------------------------------------------------------------------------
+ def tryReconnect(self):
+ """checks if reconnect needed"""
+
+ if not (self.core.config["reconnect"]["activated"] and self.core.api.isTimeReconnect()):
+ return False
+
+ active = [x.active.plugin.wantReconnect and x.active.plugin.waiting for x in self.threads if x.active]
+
+ if not (0 < active.count(True) == len(active)):
+ return False
+
+ if not exists(self.core.config['reconnect']['method']):
+ if exists(join(pypath, self.core.config['reconnect']['method'])):
+ self.core.config['reconnect']['method'] = join(pypath, self.core.config['reconnect']['method'])
+ else:
+ self.core.config["reconnect"]["activated"] = False
+ self.log.warning(_("Reconnect script not found!"))
+ return
+
+ self.reconnecting.set()
+
+ #Do reconnect
+ self.log.info(_("Starting reconnect"))
+
+ while [x.active.plugin.waiting for x in self.threads if x.active].count(True) != 0:
+ sleep(0.25)
+
+ ip = self.getIP()
+
+ self.core.hookManager.beforeReconnecting(ip)
+
+ self.log.debug("Old IP: %s" % ip)
+
+ try:
+ reconn = Popen(self.core.config['reconnect']['method'], bufsize=-1, shell=True)#, stdout=subprocess.PIPE)
+ except:
+ self.log.warning(_("Failed executing reconnect script!"))
+ self.core.config["reconnect"]["activated"] = False
+ self.reconnecting.clear()
+ if self.core.debug:
+ print_exc()
+ return
+
+ reconn.wait()
+ sleep(1)
+ ip = self.getIP()
+ self.core.hookManager.afterReconnecting(ip)
+
+ self.log.info(_("Reconnected, new IP: %s") % ip)
+
+ self.reconnecting.clear()
+
+ def getIP(self):
+ """retrieve current ip"""
+ services = [("http://automation.whatismyip.com/n09230945.asp", "(\S+)"),
+ ("http://checkip.dyndns.org/",".*Current IP Address: (\S+)</body>.*")]
+
+ ip = ""
+ for i in range(10):
+ try:
+ sv = choice(services)
+ ip = getURL(sv[0])
+ ip = re.match(sv[1], ip).group(1)
+ break
+ except:
+ ip = ""
+ sleep(1)
+
+ return ip
+
+ #--------------------------------------------------------------------------
+ def checkThreadCount(self):
+ """checks if there are need for increasing or reducing thread count"""
+
+ if len(self.threads) == self.core.config.get("download", "max_downloads"):
+ return True
+ elif len(self.threads) < self.core.config.get("download", "max_downloads"):
+ self.createThread()
+ else:
+ free = [x for x in self.threads if not x.active]
+ if free:
+ free[0].put("quit")
+
+
+ def cleanPycurl(self):
+ """ make a global curl cleanup (currently ununused) """
+ if self.processingIds():
+ return False
+ pycurl.global_cleanup()
+ pycurl.global_init(pycurl.GLOBAL_DEFAULT)
+ self.downloaded = 0
+ self.log.debug("Cleaned up pycurl")
+ return True
+
+ #--------------------------------------------------------------------------
+ def assignJob(self):
+ """assing a job to a thread if possible"""
+
+ if self.pause or not self.core.api.isTimeDownload(): return
+
+ #if self.downloaded > 20:
+ # if not self.cleanPyCurl(): return
+
+ free = [x for x in self.threads if not x.active]
+
+ inuse = set([(x.active.pluginname, self.getLimit(x)) for x in self.threads if x.active and x.active.hasPlugin() and x.active.plugin.account])
+ inuse = map(lambda x: (x[0], x[1], len([y for y in self.threads if y.active and y.active.pluginname == x[0]])) ,inuse)
+ onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]]
+
+ occ = [x.active.pluginname for x in self.threads if x.active and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit
+
+ occ.sort()
+ occ = tuple(set(occ))
+ job = self.core.files.getJob(occ)
+ if job:
+ try:
+ job.initPlugin()
+ except Exception, e:
+ self.log.critical(str(e))
+ print_exc()
+ job.setStatus("failed")
+ job.error = str(e)
+ job.release()
+ return
+
+ if job.plugin.__type__ == "hoster":
+ spaceLeft = freeSpace(self.core.config["general"]["download_folder"]) / 1024 / 1024
+ if spaceLeft < self.core.config["general"]["min_free_space"]:
+ self.log.warning(_("Not enough space left on device"))
+ self.pause = True
+
+ if free and not self.pause:
+ thread = free[0]
+ #self.downloaded += 1
+
+ thread.put(job)
+ else:
+ #put job back
+ if occ not in self.core.files.jobCache:
+ self.core.files.jobCache[occ] = []
+ self.core.files.jobCache[occ].append(job.id)
+
+ #check for decrypt jobs
+ job = self.core.files.getDecryptJob()
+ if job:
+ job.initPlugin()
+ thread = PluginThread.DecrypterThread(self, job)
+
+
+ else:
+ thread = PluginThread.DecrypterThread(self, job)
+
+ def getLimit(self, thread):
+ limit = thread.active.plugin.account.getAccountData(thread.active.plugin.user)["options"].get("limitDL", ["0"])[0]
+ return int(limit)
+
+ def cleanup(self):
+ """do global cleanup, should be called when finished with pycurl"""
+ pycurl.global_cleanup()
diff --git a/module/__init__.py b/pyload/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/__init__.py
+++ b/pyload/__init__.py
diff --git a/module/cli/AddPackage.py b/pyload/cli/AddPackage.py
index 16b32b9ee..16b32b9ee 100644
--- a/module/cli/AddPackage.py
+++ b/pyload/cli/AddPackage.py
diff --git a/pyload/cli/Cli.py b/pyload/cli/Cli.py
new file mode 100644
index 000000000..20b82a0f2
--- /dev/null
+++ b/pyload/cli/Cli.py
@@ -0,0 +1,585 @@
+# -*- coding: utf-8 -*-
+#
+#Copyright (C) 2008-2014 RaNaN
+#
+#This program is free software; you can redistribute it and/or modify
+#it under the terms of the GNU General Public License as published by
+#the Free Software Foundation; either version 3 of the License,
+#or (at your option) any later version.
+#
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#See the GNU General Public License for more details.
+#
+#You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+###
+from __future__ import with_statement
+from getopt import GetoptError, getopt
+
+import pyload.common.pylgettext as gettext
+import os
+from os import _exit
+from os.path import join, exists, abspath, basename
+import sys
+from sys import exit
+from threading import Thread, Lock
+from time import sleep
+from traceback import print_exc
+
+import ConfigParser
+
+from codecs import getwriter
+
+if os.name == "nt":
+ enc = "cp850"
+else:
+ enc = "utf8"
+
+sys.stdout = getwriter(enc)(sys.stdout, errors="replace")
+
+from pyload import InitHomeDir
+from pyload.cli.printer import *
+from pyload.cli import AddPackage, ManageFiles
+
+from pyload.Api import Destination
+from pyload.utils import formatSize, decode
+from pyload.remote.thriftbackend.ThriftClient import ThriftClient, NoConnection, NoSSL, WrongLogin, ConnectionClosed
+from pyload.lib.Getch import Getch
+from pyload.lib.rename_process import renameProcess
+
+class Cli:
+ def __init__(self, client, command):
+ self.client = client
+ self.command = command
+
+ if not self.command:
+ renameProcess('pyload-cli')
+ self.getch = Getch()
+ self.input = ""
+ self.inputline = 0
+ self.lastLowestLine = 0
+ self.menuline = 0
+
+ self.lock = Lock()
+
+ #processor funcions, these will be changed dynamically depending on control flow
+ self.headerHandler = self #the download status
+ self.bodyHandler = self #the menu section
+ self.inputHandler = self
+
+ os.system("clear")
+ println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
+ println(2, "")
+
+ self.thread = RefreshThread(self)
+ self.thread.start()
+
+ self.start()
+ else:
+ self.processCommand()
+
+ def reset(self):
+ """ reset to initial main menu """
+ self.input = ""
+ self.headerHandler = self.bodyHandler = self.inputHandler = self
+
+ def start(self):
+ """ main loop. handle input """
+ while True:
+ #inp = raw_input()
+ inp = self.getch.impl()
+ if ord(inp) == 3:
+ os.system("clear")
+ sys.exit() # ctrl + c
+ elif ord(inp) == 13: #enter
+ try:
+ self.lock.acquire()
+ self.inputHandler.onEnter(self.input)
+
+ except Exception, e:
+ println(2, red(e))
+ finally:
+ self.lock.release()
+
+ elif ord(inp) == 127:
+ self.input = self.input[:-1] #backspace
+ try:
+ self.lock.acquire()
+ self.inputHandler.onBackSpace()
+ finally:
+ self.lock.release()
+
+ elif ord(inp) == 27: #ugly symbol
+ pass
+ else:
+ self.input += inp
+ try:
+ self.lock.acquire()
+ self.inputHandler.onChar(inp)
+ finally:
+ self.lock.release()
+
+ self.inputline = self.bodyHandler.renderBody(self.menuline)
+ self.renderFooter(self.inputline)
+
+
+ def refresh(self):
+ """refresh screen"""
+
+ println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
+ println(2, "")
+
+ self.lock.acquire()
+
+ self.menuline = self.headerHandler.renderHeader(3) + 1
+ println(self.menuline - 1, "")
+ self.inputline = self.bodyHandler.renderBody(self.menuline)
+ self.renderFooter(self.inputline)
+
+ self.lock.release()
+
+
+ def setInput(self, string=""):
+ self.input = string
+
+ def setHandler(self, klass):
+ #create new handler with reference to cli
+ self.bodyHandler = self.inputHandler = klass(self)
+ self.input = ""
+
+ def renderHeader(self, line):
+ """ prints download status """
+ #print updated information
+ # print "\033[J" #clear screen
+ # self.println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface")))
+ # self.println(2, "")
+ # self.println(3, white(_("%s Downloads:") % (len(data))))
+
+ data = self.client.statusDownloads()
+ speed = 0
+
+ println(line, white(_("%s Downloads:") % (len(data))))
+ line += 1
+
+ for download in data:
+ if download.status == 12: # downloading
+ percent = download.percent
+ z = percent / 4
+ speed += download.speed
+ println(line, cyan(download.name))
+ line += 1
+ println(line,
+ blue("[") + yellow(z * "#" + (25 - z) * " ") + blue("] ") + green(str(percent) + "%") + _(
+ " Speed: ") + green(formatSize(download.speed) + "/s") + _(" Size: ") + green(
+ download.format_size) + _(" Finished in: ") + green(download.format_eta) + _(
+ " ID: ") + green(download.fid))
+ line += 1
+ if download.status == 5:
+ println(line, cyan(download.name))
+ line += 1
+ println(line, _("waiting: ") + green(download.format_wait))
+ line += 1
+
+ println(line, "")
+ line += 1
+ status = self.client.statusServer()
+ if status.pause:
+ paused = _("Status:") + " " + red(_("paused"))
+ else:
+ paused = _("Status:") + " " + red(_("running"))
+
+ println(line,"%s %s: %s %s: %s %s: %s" % (
+ paused, _("total Speed"), red(formatSize(speed) + "/s"), _("Files in queue"), red(
+ status.queue), _("Total"), red(status.total)))
+
+ return line + 1
+
+ def renderBody(self, line):
+ """ prints initial menu """
+ println(line, white(_("Menu:")))
+ println(line + 1, "")
+ println(line + 2, mag("1.") + _(" Add Links"))
+ println(line + 3, mag("2.") + _(" Manage Queue"))
+ println(line + 4, mag("3.") + _(" Manage Collector"))
+ println(line + 5, mag("4.") + _(" (Un)Pause Server"))
+ println(line + 6, mag("5.") + _(" Kill Server"))
+ println(line + 7, mag("6.") + _(" Quit"))
+
+ return line + 8
+
+ def renderFooter(self, line):
+ """ prints out the input line with input """
+ println(line, "")
+ line += 1
+
+ println(line, white(" Input: ") + decode(self.input))
+
+ #clear old output
+ if line < self.lastLowestLine:
+ for i in range(line + 1, self.lastLowestLine + 1):
+ println(i, "")
+
+ self.lastLowestLine = line
+
+ #set cursor to position
+ print "\033[" + str(self.inputline) + ";0H"
+
+ def onChar(self, char):
+ """ default no special handling for single chars """
+ if char == "1":
+ self.setHandler(AddPackage)
+ elif char == "2":
+ self.setHandler(ManageFiles)
+ elif char == "3":
+ self.setHandler(ManageFiles)
+ self.bodyHandler.target = Destination.Collector
+ elif char == "4":
+ self.client.togglePause()
+ self.setInput()
+ elif char == "5":
+ self.client.kill()
+ self.client.close()
+ sys.exit()
+ elif char == "6":
+ os.system('clear')
+ sys.exit()
+
+ def onEnter(self, inp):
+ pass
+
+ def onBackSpace(self):
+ pass
+
+ def processCommand(self):
+ command = self.command[0]
+ args = []
+ if len(self.command) > 1:
+ args = self.command[1:]
+
+ if command == "status":
+ files = self.client.statusDownloads()
+
+ if not files:
+ print "No downloads running."
+
+ for download in files:
+ if download.status == 12: # downloading
+ print print_status(download)
+ print "\tDownloading: %s @ %s/s\t %s (%s%%)" % (
+ download.format_eta, formatSize(download.speed), formatSize(download.size - download.bleft),
+ download.percent)
+ elif download.status == 5:
+ print print_status(download)
+ print "\tWaiting: %s" % download.format_wait
+ else:
+ print print_status(download)
+
+ elif command == "queue":
+ print_packages(self.client.getQueueData())
+
+ elif command == "collector":
+ print_packages(self.client.getCollectorData())
+
+ elif command == "add":
+ if len(args) < 2:
+ print _("Please use this syntax: add <Package name> <link> <link2> ...")
+ return
+
+ self.client.addPackage(args[0], args[1:], Destination.Queue)
+
+ elif command == "add_coll":
+ if len(args) < 2:
+ print _("Please use this syntax: add <Package name> <link> <link2> ...")
+ return
+
+ self.client.addPackage(args[0], args[1:], Destination.Collector)
+
+ elif command == "del_file":
+ self.client.deleteFiles([int(x) for x in args])
+ print "Files deleted."
+
+ elif command == "del_package":
+ self.client.deletePackages([int(x) for x in args])
+ print "Packages deleted."
+
+ elif command == "move":
+ for pid in args:
+ pack = self.client.getPackageInfo(int(pid))
+ self.client.movePackage((pack.dest + 1) % 2, pack.pid)
+
+ elif command == "check":
+ print _("Checking %d links:") % len(args)
+ print
+ rid = self.client.checkOnlineStatus(args).rid
+ self.printOnlineCheck(self.client, rid)
+
+
+ elif command == "check_container":
+ path = args[0]
+ if not exists(join(owd, path)):
+ print _("File does not exists.")
+ return
+
+ f = open(join(owd, path), "rb")
+ content = f.read()
+ f.close()
+
+ rid = self.client.checkOnlineStatusContainer([], basename(f.name), content).rid
+ self.printOnlineCheck(self.client, rid)
+
+
+ elif command == "pause":
+ self.client.pause()
+
+ elif command == "unpause":
+ self.client.unpause()
+
+ elif command == "toggle":
+ self.client.togglePause()
+
+ elif command == "kill":
+ self.client.kill()
+ elif command == "restart_file":
+ for x in args:
+ self.client.restartFile(int(x))
+ print "Files restarted."
+ elif command == "restart_package":
+ for pid in args:
+ self.client.restartPackage(int(pid))
+ print "Packages restarted."
+
+ else:
+ print_commands()
+
+ def printOnlineCheck(self, client, rid):
+ while True:
+ sleep(1)
+ result = client.pollResults(rid)
+ for url, status in result.data.iteritems():
+ if status.status == 2: check = "Online"
+ elif status.status == 1: check = "Offline"
+ else: check = "Unknown"
+
+ print "%-45s %-12s\t %-15s\t %s" % (status.name, formatSize(status.size), status.plugin, check)
+
+ if result.rid == -1: break
+
+
+class RefreshThread(Thread):
+ def __init__(self, cli):
+ Thread.__init__(self)
+ self.setDaemon(True)
+ self.cli = cli
+
+ def run(self):
+ while True:
+ sleep(1)
+ try:
+ self.cli.refresh()
+ except ConnectionClosed:
+ os.system("clear")
+ print _("pyLoad was terminated")
+ _exit(0)
+ except Exception, e:
+ println(2, red(str(e)))
+ self.cli.reset()
+ print_exc()
+
+
+def print_help(config):
+ print
+ print "pyLoad CLI Copyright (c) 2008-2014 the pyLoad Team"
+ print
+ print "Usage: [python] pyload-cli.py [options] [command]"
+ print
+ print "<Commands>"
+ print "See pyload-cli.py -c for a complete listing."
+ print
+ print "<Options>"
+ print " -i, --interactive", " Start in interactive mode"
+ print
+ print " -u, --username=", " " * 2, "Specify Username"
+ print " --pw=<password>", " " * 2, "Password"
+ print " -a, --address=", " " * 3, "Specify address (current=%s)" % config["addr"]
+ print " -p, --port", " " * 7, "Specify port (current=%s)" % config["port"]
+ print
+ print " -l, --language", " " * 3, "Set user interface language (current=%s)" % config["language"]
+ print " -h, --help", " " * 7, "Display this help screen"
+ print " -c, --commands", " " * 3, "List all available commands"
+ print
+
+
+def print_packages(data):
+ for pack in data:
+ print "Package %s (#%s):" % (pack.name, pack.pid)
+ for download in pack.links:
+ print "\t" + print_file(download)
+ print
+
+
+def print_file(download):
+ return "#%(id)-6d %(name)-30s %(statusmsg)-10s %(plugin)-8s" % {
+ "id": download.fid,
+ "name": download.name,
+ "statusmsg": download.statusmsg,
+ "plugin": download.plugin
+ }
+
+
+def print_status(download):
+ return "#%(id)-6s %(name)-40s Status: %(statusmsg)-10s Size: %(size)s" % {
+ "id": download.fid,
+ "name": download.name,
+ "statusmsg": download.statusmsg,
+ "size": download.format_size
+ }
+
+
+def print_commands():
+ commands = [("status", _("Prints server status")),
+ ("queue", _("Prints downloads in queue")),
+ ("collector", _("Prints downloads in collector")),
+ ("add <name> <link1> <link2>...", _("Adds package to queue")),
+ ("add_coll <name> <link1> <link2>...", _("Adds package to collector")),
+ ("del_file <fid> <fid2>...", _("Delete Files from Queue/Collector")),
+ ("del_package <pid> <pid2>...", _("Delete Packages from Queue/Collector")),
+ ("move <pid> <pid2>...", _("Move Packages from Queue to Collector or vice versa")),
+ ("restart_file <fid> <fid2>...", _("Restart files")),
+ ("restart_package <pid> <pid2>...", _("Restart packages")),
+ ("check <container|url> ...", _("Check online status, works with local container")),
+ ("check_container path", _("Checks online status of a container file")),
+ ("pause", _("Pause the server")),
+ ("unpause", _("continue downloads")),
+ ("toggle", _("Toggle pause/unpause")),
+ ("kill", _("kill server")), ]
+
+ print _("List of commands:")
+ print
+ for c in commands:
+ print "%-35s %s" % c
+
+
+def writeConfig(opts):
+ try:
+ with open(join(homedir, ".pyload-cli"), "w") as cfgfile:
+ cfgfile.write("[cli]")
+ for opt in opts:
+ cfgfile.write("%s=%s\n" % (opt, opts[opt]))
+ except:
+ print _("Couldn't write user config file")
+
+
+def main():
+ config = {"addr": "127.0.0.1", "port": "7227", "language": "en"}
+ try:
+ config["language"] = os.environ["LANG"][0:2]
+ except:
+ pass
+
+ if (not exists(join(pypath, "locale", config["language"]))) or config["language"] == "":
+ config["language"] = "en"
+
+ configFile = ConfigParser.ConfigParser()
+ configFile.read(join(homedir, ".pyload-cli"))
+
+ if configFile.has_section("cli"):
+ for opt in configFile.items("cli"):
+ config[opt[0]] = opt[1]
+
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("Cli", join(pypath, "locale"),
+ languages=[config["language"], "en"], fallback=True)
+ translation.install(unicode=True)
+
+ interactive = False
+ command = None
+ username = ""
+ password = ""
+
+ shortOptions = 'iu:p:a:hcl:'
+ longOptions = ['interactive', "username=", "pw=", "address=", "port=", "help", "commands", "language="]
+
+ try:
+ opts, extraparams = getopt(sys.argv[1:], shortOptions, longOptions)
+ for option, params in opts:
+ if option in ("-i", "--interactive"):
+ interactive = True
+ elif option in ("-u", "--username"):
+ username = params
+ elif option in ("-a", "--address"):
+ config["addr"] = params
+ elif option in ("-p", "--port"):
+ config["port"] = params
+ elif option in ("-l", "--language"):
+ config["language"] = params
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("Cli", join(pypath, "locale"),
+ languages=[config["language"], "en"], fallback=True)
+ translation.install(unicode=True)
+ elif option in ("-h", "--help"):
+ print_help(config)
+ exit()
+ elif option in ("--pw"):
+ password = params
+ elif option in ("-c", "--comands"):
+ print_commands()
+ exit()
+
+ except GetoptError:
+ print 'Unknown Argument(s) "%s"' % " ".join(sys.argv[1:])
+ print_help(config)
+ exit()
+
+ if len(extraparams) >= 1:
+ command = extraparams
+
+ client = False
+
+ if interactive:
+ try:
+ client = ThriftClient(config["addr"], int(config["port"]), username, password)
+ except WrongLogin:
+ pass
+ except NoSSL:
+ print _("You need py-openssl to connect to this pyLoad Core.")
+ exit()
+ except NoConnection:
+ config["addr"] = False
+ config["port"] = False
+
+ if not client:
+ if not config["addr"]: config["addr"] = raw_input(_("Address: "))
+ if not config["port"]: config["port"] = raw_input(_("Port: "))
+ if not username: username = raw_input(_("Username: "))
+ if not password:
+ from getpass import getpass
+
+ password = getpass(_("Password: "))
+
+ try:
+ client = ThriftClient(config["addr"], int(config["port"]), username, password)
+ except WrongLogin:
+ print _("Login data is wrong.")
+ except NoConnection:
+ print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"],
+ "port": config["port"]})
+
+ else:
+ try:
+ client = ThriftClient(config["addr"], int(config["port"]), username, password)
+ except WrongLogin:
+ print _("Login data is wrong.")
+ except NoConnection:
+ print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"],
+ "port": config["port"]})
+ except NoSSL:
+ print _("You need py-openssl to connect to this pyLoad core.")
+
+ if interactive and command: print _("Interactive mode ignored since you passed some commands.")
+
+ if client:
+ writeConfig(config)
+ cli = Cli(client, command)
diff --git a/module/cli/Handler.py b/pyload/cli/Handler.py
index 37b0d7b99..37b0d7b99 100644
--- a/module/cli/Handler.py
+++ b/pyload/cli/Handler.py
diff --git a/pyload/cli/ManageFiles.py b/pyload/cli/ManageFiles.py
new file mode 100644
index 000000000..fba96b990
--- /dev/null
+++ b/pyload/cli/ManageFiles.py
@@ -0,0 +1,203 @@
+# -*- coding: utf-8 -*-
+#
+#Copyright (C) 2011-2014 RaNaN
+#
+#This program is free software; you can redistribute it and/or modify
+#it under the terms of the GNU General Public License as published by
+#the Free Software Foundation; either version 3 of the License,
+#or (at your option) any later version.
+#
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#See the GNU General Public License for more details.
+#
+#You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+###
+
+from itertools import islice
+from time import time
+
+from Handler import Handler
+from printer import *
+
+from pyload.Api import Destination, PackageData
+
+class ManageFiles(Handler):
+ """ possibility to manage queue/collector """
+
+ def init(self):
+ self.target = Destination.Queue
+ self.pos = 0 #position in queue
+ self.package = -1 #choosen package
+ self.mode = "" # move/delete/restart
+
+ self.cache = None
+ self.links = None
+ self.time = 0
+
+ def onChar(self, char):
+ if char in ("m", "d", "r"):
+ self.mode = char
+ self.setInput()
+ elif char == "p":
+ self.pos = max(0, self.pos - 5)
+ self.backspace()
+ elif char == "n":
+ self.pos += 5
+ self.backspace()
+
+ def onBackSpace(self):
+ if not self.input and self.mode:
+ self.mode = ""
+ if not self.input and self.package > -1:
+ self.package = -1
+
+ def onEnter(self, input):
+ if input == "0":
+ self.cli.reset()
+ elif self.package < 0 and self.mode:
+ #mode select
+ packs = self.parseInput(input)
+ if self.mode == "m":
+ [self.client.movePackage((self.target + 1) % 2, x) for x in packs]
+ elif self.mode == "d":
+ self.client.deletePackages(packs)
+ elif self.mode == "r":
+ [self.client.restartPackage(x) for x in packs]
+
+ elif self.mode:
+ #edit links
+ links = self.parseInput(input, False)
+
+ if self.mode == "d":
+ self.client.deleteFiles(links)
+ elif self.mode == "r":
+ map(self.client.restartFile, links)
+
+ else:
+ #look into package
+ try:
+ self.package = int(input)
+ except:
+ pass
+
+ self.cache = None
+ self.links = None
+ self.pos = 0
+ self.mode = ""
+ self.setInput()
+
+
+ def renderBody(self, line):
+ if self.package < 0:
+ println(line, white(_("Manage Packages:")))
+ else:
+ println(line, white((_("Manage Links:"))))
+ line += 1
+
+ if self.mode:
+ if self.mode == "m":
+ println(line, _("What do you want to move?"))
+ elif self.mode == "d":
+ println(line, _("What do you want to delete?"))
+ elif self.mode == "r":
+ println(line, _("What do you want to restart?"))
+
+ println(line + 1, "Enter single number, comma seperated numbers or ranges. eg. 1, 2, 3 or 1-3.")
+ line += 2
+ else:
+ println(line, _("Choose what yout want to do or enter package number."))
+ println(line + 1, ("%s - %%s, %s - %%s, %s - %%s" % (mag("d"), mag("m"), mag("r"))) % (
+ _("delete"), _("move"), _("restart")))
+ line += 2
+
+ if self.package < 0:
+ #print package info
+ pack = self.getPackages()
+ i = 0
+ for value in islice(pack, self.pos, self.pos + 5):
+ try:
+ println(line, mag(str(value.pid)) + ": " + value.name)
+ line += 1
+ i += 1
+ except Exception, e:
+ pass
+ for x in range(5 - i):
+ println(line, "")
+ line += 1
+ else:
+ #print links info
+ pack = self.getLinks()
+ i = 0
+ for value in islice(pack.links, self.pos, self.pos + 5):
+ try:
+ println(line, mag(value.fid) + ": %s | %s | %s" % (
+ value.name, value.statusmsg, value.plugin))
+ line += 1
+ i += 1
+ except Exception, e:
+ pass
+ for x in range(5 - i):
+ println(line, "")
+ line += 1
+
+ println(line, mag("p") + _(" - previous") + " | " + mag("n") + _(" - next"))
+ println(line + 1, mag("0.") + _(" back to main menu"))
+
+ return line + 2
+
+
+ def getPackages(self):
+ if self.cache and self.time + 2 < time():
+ return self.cache
+
+ if self.target == Destination.Queue:
+ data = self.client.getQueue()
+ else:
+ data = self.client.getCollector()
+
+
+ self.cache = data
+ self.time = time()
+
+ return data
+
+ def getLinks(self):
+ if self.links and self.time + 1 < time():
+ return self.links
+
+ try:
+ data = self.client.getPackageData(self.package)
+ except:
+ data = PackageData(links=[])
+
+ self.links = data
+ self.time = time()
+
+ return data
+
+ def parseInput(self, inp, package=True):
+ inp = inp.strip()
+ if "-" in inp:
+ l, n, h = inp.partition("-")
+ l = int(l)
+ h = int(h)
+ r = range(l, h + 1)
+
+ ret = []
+ if package:
+ for p in self.cache:
+ if p.pid in r:
+ ret.append(p.pid)
+ else:
+ for l in self.links.links:
+ if l.lid in r:
+ ret.append(l.lid)
+
+ return ret
+
+ else:
+ return [int(x) for x in inp.split(",")]
diff --git a/module/cli/__init__.py b/pyload/cli/__init__.py
index 413c6a638..413c6a638 100644
--- a/module/cli/__init__.py
+++ b/pyload/cli/__init__.py
diff --git a/module/cli/printer.py b/pyload/cli/printer.py
index 0b2f5a0e3..0b2f5a0e3 100644
--- a/module/cli/printer.py
+++ b/pyload/cli/printer.py
diff --git a/pyload/common/APIExerciser.py b/pyload/common/APIExerciser.py
new file mode 100644
index 000000000..886c72a4a
--- /dev/null
+++ b/pyload/common/APIExerciser.py
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+
+import string
+from threading import Thread
+from random import choice, random, sample, randint
+from time import time, sleep
+from math import floor
+import gc
+
+from traceback import print_exc, format_exc
+
+from pyload.remote.thriftbackend.ThriftClient import ThriftClient, Destination
+
+def createURLs():
+ """ create some urls, some may fail """
+ urls = []
+ for x in range(0, randint(20, 100)):
+ name = "DEBUG_API"
+ if randint(0, 5) == 5:
+ name = "" #this link will fail
+
+ urls.append(name + "".join(sample(string.ascii_letters, randint(10, 20))))
+
+ return urls
+
+AVOID = (0, 3, 8)
+
+idPool = 0
+sumCalled = 0
+
+
+def startApiExerciser(core, n):
+ for i in range(n):
+ APIExerciser(core).start()
+
+class APIExerciser(Thread):
+
+
+ def __init__(self, core, thrift=False, user=None, pw=None):
+ global idPool
+
+ Thread.__init__(self)
+ self.setDaemon(True)
+ self.core = core
+ self.count = 0 #number of methods
+ self.time = time()
+
+ if thrift:
+ self.api = ThriftClient(user=user, password=pw)
+ else:
+ self.api = core.api
+
+
+ self.id = idPool
+
+ idPool += 1
+
+ #self.start()
+
+ def run(self):
+
+ self.core.log.info("API Excerciser started %d" % self.id)
+
+ out = open("error.log", "ab")
+ #core errors are not logged of course
+ out.write("\n" + "Starting\n")
+ out.flush()
+
+ while True:
+ try:
+ self.testAPI()
+ except Exception:
+ self.core.log.error("Excerciser %d throw an execption" % self.id)
+ print_exc()
+ out.write(format_exc() + 2 * "\n")
+ out.flush()
+
+ if not self.count % 100:
+ self.core.log.info("Exerciser %d tested %d api calls" % (self.id, self.count))
+ if not self.count % 1000:
+ out.flush()
+
+ if not sumCalled % 1000: #not thread safe
+ self.core.log.info("Exercisers tested %d api calls" % sumCalled)
+ persec = sumCalled / (time() - self.time)
+ self.core.log.info("Approx. %.2f calls per second." % persec)
+ self.core.log.info("Approx. %.2f ms per call." % (1000 / persec))
+ self.core.log.info("Collected garbage: %d" % gc.collect())
+
+
+ #sleep(random() / 500)
+
+ def testAPI(self):
+ global sumCalled
+
+ m = ["statusDownloads", "statusServer", "addPackage", "getPackageData", "getFileData", "deleteFiles",
+ "deletePackages", "getQueue", "getCollector", "getQueueData", "getCollectorData", "isCaptchaWaiting",
+ "getCaptchaTask", "stopAllDownloads", "getAllInfo", "getServices" , "getAccounts", "getAllUserData"]
+
+ method = choice(m)
+ #print "Testing:", method
+
+ if hasattr(self, method):
+ res = getattr(self, method)()
+ else:
+ res = getattr(self.api, method)()
+
+ self.count += 1
+ sumCalled += 1
+
+ #print res
+
+ def addPackage(self):
+ name = "".join(sample(string.ascii_letters, 10))
+ urls = createURLs()
+
+ self.api.addPackage(name, urls, choice([Destination.Queue, Destination.Collector]))
+
+
+ def deleteFiles(self):
+ info = self.api.getQueueData()
+ if not info: return
+
+ pack = choice(info)
+ fids = pack.links
+
+ if len(fids):
+ fids = [f.fid for f in sample(fids, randint(1, max(len(fids) / 2, 1)))]
+ self.api.deleteFiles(fids)
+
+
+ def deletePackages(self):
+ info = choice([self.api.getQueue(), self.api.getCollector()])
+ if not info: return
+
+ pids = [p.pid for p in info]
+ if len(pids):
+ pids = sample(pids, randint(1, max(floor(len(pids) / 2.5), 1)))
+ self.api.deletePackages(pids)
+
+ def getFileData(self):
+ info = self.api.getQueueData()
+ if info:
+ p = choice(info)
+ if p.links:
+ self.api.getFileData(choice(p.links).fid)
+
+ def getPackageData(self):
+ info = self.api.getQueue()
+ if info:
+ self.api.getPackageData(choice(info).pid)
+
+ def getAccounts(self):
+ self.api.getAccounts(False)
+
+ def getCaptchaTask(self):
+ self.api.getCaptchaTask(False)
diff --git a/module/common/ImportDebugger.py b/pyload/common/ImportDebugger.py
index ae3aef629..ae3aef629 100644
--- a/module/common/ImportDebugger.py
+++ b/pyload/common/ImportDebugger.py
diff --git a/module/common/JsEngine.py b/pyload/common/JsEngine.py
index 46789f64d..46789f64d 100644
--- a/module/common/JsEngine.py
+++ b/pyload/common/JsEngine.py
diff --git a/module/common/__init__.py b/pyload/common/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/common/__init__.py
+++ b/pyload/common/__init__.py
diff --git a/module/common/json_layer.py b/pyload/common/json_layer.py
index bb3937cdc..bb3937cdc 100644
--- a/module/common/json_layer.py
+++ b/pyload/common/json_layer.py
diff --git a/module/common/packagetools.py b/pyload/common/packagetools.py
index d5ab4d182..d5ab4d182 100644
--- a/module/common/packagetools.py
+++ b/pyload/common/packagetools.py
diff --git a/pyload/common/pavement.py b/pyload/common/pavement.py
new file mode 100644
index 000000000..9b2dc98b3
--- /dev/null
+++ b/pyload/common/pavement.py
@@ -0,0 +1,412 @@
+# -*- coding: utf-8 -*-
+
+from paver.easy import *
+from paver.setuputils import setup
+from paver.doctools import cog
+
+import os
+import sys
+import shutil
+import re
+from glob import glob
+from tempfile import mkdtemp
+from urllib import urlretrieve
+from subprocess import call, Popen, PIPE
+from zipfile import ZipFile
+
+PROJECT_DIR = path(__file__).dirname()
+sys.path.append(PROJECT_DIR)
+
+options = environment.options
+path("pyload").mkdir()
+
+extradeps = []
+if sys.version_info <= (2, 5):
+ extradeps += 'simplejson'
+
+setup(
+ name="pyload",
+ version="0.4.10",
+ description='Fast, lightweight and full featured download manager.',
+ long_description=open(PROJECT_DIR / "README.md").read(),
+ keywords = ("pyload", "download-manager", "one-click-hoster", "download"),
+ url="http://pyload.org",
+ download_url='http://pyload.org/download',
+ license='GPL v3',
+ author="pyLoad Team",
+ author_email="support@pyload.org",
+ platforms = ('Any',),
+ #package_dir={'pyload': "src"},
+ packages=["pyload"],
+ #package_data=find_package_data(),
+ #data_files=[],
+ include_package_data=True,
+ exclude_package_data={'pyload': ["docs*", "scripts*", "tests*"]}, #exluced from build but not from sdist
+ # 'bottle >= 0.10.0' not in list, because its small and contain little modifications
+ install_requires=['thrift >= 0.8.0', 'jinja2', 'pycurl', 'Beaker', 'BeautifulSoup >= 3.2, < 3.3'] + extradeps,
+ extras_require={
+ 'SSL': ["pyOpenSSL"],
+ 'DLC': ['pycrypto'],
+ 'lightweight webserver': ['bjoern'],
+ 'RSS plugins': ['feedparser'],
+ },
+ #setup_requires=["setuptools_hg"],
+ entry_points={
+ 'console_scripts': [
+ 'pyLoadCore = pyLoadCore:main',
+ 'pyLoadCli = pyLoadCli:main'
+ ]},
+ zip_safe=False,
+ classifiers=[
+ "Development Status :: 5 - Production/Stable",
+ "Topic :: Internet :: WWW/HTTP",
+ "Environment :: Console",
+ "Environment :: Web Environment",
+ "Intended Audience :: End Users/Desktop",
+ "License :: OSI Approved :: GNU General Public License (GPL)",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python :: 2"
+ ]
+)
+
+options(
+ sphinx=Bunch(
+ builddir="_build",
+ sourcedir=""
+ ),
+ get_source=Bunch(
+ src="https://bitbucket.org/spoob/pyload/get/tip.zip",
+ rev=None,
+ clean=False
+ ),
+ thrift=Bunch(
+ path="../thrift/trunk/compiler/cpp/thrift",
+ gen=""
+ ),
+ virtualenv=Bunch(
+ dir="env",
+ python="python2",
+ virtual="virtualenv2",
+ ),
+ cog=Bunch(
+ pattern="*.py",
+ )
+)
+
+# xgettext args
+xargs = ["--language=Python", "--add-comments=L10N",
+ "--from-code=utf-8", "--copyright-holder=pyLoad Team", "--package-name=pyLoad",
+ "--package-version=%s" % options.version, "--msgid-bugs-address='bugs@pyload.org'"]
+
+@task
+@needs('cog')
+def html():
+ """Build html documentation"""
+ module = path("docs") / "pyload"
+ pyload.rmtree()
+ call_task('paver.doctools.html')
+
+
+@task
+@cmdopts([
+ ('src=', 's', 'Url to source'),
+ ('rev=', 'r', "HG revision"),
+ ("clean", 'c', 'Delete old source folder')
+])
+def get_source(options):
+ """ Downloads pyload source from bitbucket tip or given rev"""
+ if options.rev: options.url = "https://bitbucket.org/spoob/pyload/get/%s.zip" % options.rev
+
+ pyload = path("pyload")
+
+ if len(pyload.listdir()) and not options.clean:
+ return
+ elif pyload.exists():
+ pyload.rmtree()
+
+ urlretrieve(options.src, "pyload_src.zip")
+ zip = ZipFile("pyload_src.zip")
+ zip.extractall()
+ path("pyload_src.zip").remove()
+
+ folder = [x for x in path(".").dirs() if x.name.startswith("spoob-pyload-")][0]
+ folder.move(pyload)
+
+ change_mode(pyload, 0644)
+ change_mode(pyload, 0755, folder=True)
+
+ for file in pyload.files():
+ if file.name.endswith(".py"):
+ file.chmod(0755)
+
+ (pyload / ".hgtags").remove()
+ (pyload / ".gitignore").remove()
+ #(pyload / "docs").rmtree()
+
+ f = open(pyload / "__init__.py", "wb")
+ f.close()
+
+ #options.setup.packages = find_packages()
+ #options.setup.package_data = find_package_data()
+
+
+@task
+@needs('clean', 'generate_setup', 'minilib', 'get_source', 'setuptools.command.sdist')
+def sdist():
+ """ Build source code package with distutils """
+
+
+@task
+@cmdopts([
+ ('path=', 'p', 'Thrift path'),
+ ('gen=', 'g', "Extra --gen option")
+])
+def thrift(options):
+ """ Generate Thrift stubs """
+
+ print "add import for TApplicationException manually as long it is not fixed"
+
+ outdir = path("pyload") / "remote" / "thriftbackend"
+ (outdir / "gen-py").rmtree()
+
+ cmd = [options.thrift.path, "-strict", "-o", outdir, "--gen", "py:slots, dynamic", outdir / "pyload.thrift"]
+
+ if options.gen:
+ cmd.insert(len(cmd) - 1, "--gen")
+ cmd.insert(len(cmd) - 1, options.gen)
+
+ print "running", cmd
+
+ p = Popen(cmd)
+ p.communicate()
+
+ (outdir / "thriftgen").rmtree()
+ (outdir / "gen-py").move(outdir / "thriftgen")
+
+ #create light ttypes
+ from pyload.remote.socketbackend.create_ttypes import main
+ main()
+
+@task
+def compile_js():
+ """ Compile .coffee files to javascript"""
+
+ root = path("pyload") / "web" / "media" / "js"
+ for f in root.glob("*.coffee"):
+ print "generate", f
+ coffee = Popen(["coffee", "-cbs"], stdin=open(f, "rb"), stdout=PIPE)
+ yui = Popen(["yuicompressor", "--type", "js"], stdin=coffee.stdout, stdout=PIPE)
+ coffee.stdout.close()
+ content = yui.communicate()[0]
+ with open(root / f.name.replace(".coffee", ".js"), "wb") as js:
+ js.write("{% autoescape true %}\n")
+ js.write(content)
+ js.write("\n{% endautoescape %}")
+
+
+@task
+def generate_locale():
+ """ Generates localization files """
+
+ EXCLUDE = ["BeautifulSoup.py", "pyload/cli", "web/locale", "web/ajax", "web/cnl", "web/pyload",
+ "setup.py"]
+ makepot("core", path("pyload"), EXCLUDE, "./pyload.py\n")
+
+ makepot("cli", path("pyload") / "cli", [], includes="./pyload-cli.py\n")
+ makepot("setup", "", [], includes="./pyload/setup.py\n")
+
+ EXCLUDE = ["ServerThread.py", "web/media/default"]
+
+ # strings from js files
+ strings = set()
+
+ for fi in path("pyload/web").walkfiles():
+ if not fi.name.endswith(".js") and not fi.endswith(".coffee"): continue
+ with open(fi, "rb") as c:
+ content = c.read()
+
+ strings.update(re.findall(r"_\s*\(\s*\"([^\"]+)", content))
+ strings.update(re.findall(r"_\s*\(\s*\'([^\']+)", content))
+
+ trans = path("pyload") / "web" / "translations.js"
+
+ with open(trans, "wb") as js:
+ for s in strings:
+ js.write('_("%s")\n' % s)
+
+ makepot("django", path("pyload/web"), EXCLUDE, "./%s\n" % trans.relpath(), [".py", ".html"], ["--language=Python"])
+
+ trans.remove()
+
+ path("includes.txt").remove()
+
+ print "Locale generated"
+
+
+@task
+@cmdopts([
+ ('key=', 'k', 'api key')
+])
+def upload_translations(options):
+ """ Uploads the locale files to translation server """
+ tmp = path(mkdtemp())
+
+ shutil.copy('locale/crowdin.yaml', tmp)
+ os.mkdir(tmp / 'pyLoad')
+ for f in glob('locale/*.pot'):
+ if os.path.isfile(f):
+ shutil.copy(f, tmp / 'pyLoad')
+
+ config = tmp / 'crowdin.yaml'
+ content = open(config, 'rb').read()
+ content = content.format(key=options.key, tmp=tmp)
+ f = open(config, 'wb')
+ f.write(content)
+ f.close()
+
+ call(['crowdin-cli', '-c', config, 'upload', 'source'])
+
+ shutil.rmtree(tmp)
+
+ print "Translations uploaded"
+
+
+@task
+@cmdopts([
+ ('key=', 'k', 'api key')
+])
+def download_translations(options):
+ """ Downloads the translated files from translation server """
+ tmp = path(mkdtemp())
+
+ shutil.copy('locale/crowdin.yaml', tmp)
+ os.mkdir(tmp / 'pyLoad')
+ for f in glob('locale/*.pot'):
+ if os.path.isfile(f):
+ shutil.copy(f, tmp / 'pyLoad')
+
+ config = tmp / 'crowdin.yaml'
+ content = open(config, 'rb').read()
+ content = content.format(key=options.key, tmp=tmp)
+ f = open(config, 'wb')
+ f.write(content)
+ f.close()
+
+ call(['crowdin-cli', '-c', config, 'download'])
+
+ for language in (tmp / 'pyLoad').listdir():
+ if not language.isdir():
+ continue
+
+ target = path('locale') / language.basename()
+ print "Copy language %s" % target
+ if target.exists():
+ shutil.rmtree(target)
+
+ shutil.copytree(language, target)
+
+ shutil.rmtree(tmp)
+
+
+@task
+def compile_translations():
+ """ Compile PO files to MO """
+ for language in path('locale').listdir():
+ if not language.isdir():
+ continue
+
+ for f in glob(language / 'LC_MESSAGES' / '*.po'):
+ print "Compiling %s" % f
+ call(['msgfmt', '-o', f.replace('.po', '.mo'), f])
+
+
+@task
+def tests():
+ call(["nosetests2"])
+
+@task
+def virtualenv(options):
+ """Setup virtual environment"""
+ if path(options.dir).exists():
+ return
+
+ call([options.virtual, "--no-site-packages", "--python", options.python, options.dir])
+ print "$ source %s/bin/activate" % options.dir
+
+
+@task
+def clean_env():
+ """Deletes the virtual environment"""
+ env = path(options.virtualenv.dir)
+ if env.exists():
+ env.rmtree()
+
+
+@task
+@needs('generate_setup', 'minilib', 'get_source', 'virtualenv')
+def env_install():
+ """Install pyLoad into the virtualenv"""
+ venv = options.virtualenv
+ call([path(venv.dir) / "bin" / "easy_install", "."])
+
+
+@task
+def clean():
+ """Cleans build directories"""
+ path("build").rmtree()
+ path("dist").rmtree()
+
+
+#helper functions
+
+def walk_trans(path, EXCLUDE, endings=[".py"]):
+ result = ""
+
+ for f in path.walkfiles():
+ if [True for x in EXCLUDE if x in f.dirname().relpath()]: continue
+ if f.name in EXCLUDE: continue
+
+ for e in endings:
+ if f.name.endswith(e):
+ result += "./%s\n" % f.relpath()
+ break
+
+ return result
+
+
+def makepot(domain, p, excludes=[], includes="", endings=[".py"], xxargs=[]):
+ print "Generate %s.pot" % domain
+
+ f = open("includes.txt", "wb")
+ if includes:
+ f.write(includes)
+
+ if p:
+ f.write(walk_trans(path(p), excludes, endings))
+
+ f.close()
+
+ call(["xgettext", "--files-from=includes.txt", "--default-domain=%s" % domain] + xargs + xxargs)
+
+ # replace charset und move file
+ with open("%s.po" % domain, "rb") as f:
+ content = f.read()
+
+ path("%s.po" % domain).remove()
+ content = content.replace("charset=CHARSET", "charset=UTF-8")
+
+ with open("locale/%s.pot" % domain, "wb") as f:
+ f.write(content)
+
+
+def change_owner(dir, uid, gid):
+ for p in dir.walk():
+ p.chown(uid, gid)
+
+
+def change_mode(dir, mode, folder=False):
+ for p in dir.walk():
+ if folder and p.isdir():
+ p.chmod(mode)
+ elif p.isfile() and not folder:
+ p.chmod(mode)
diff --git a/module/common/pylgettext.py b/pyload/common/pylgettext.py
index cab631cf4..cab631cf4 100644
--- a/module/common/pylgettext.py
+++ b/pyload/common/pylgettext.py
diff --git a/pyload/common/test_api.py b/pyload/common/test_api.py
new file mode 100644
index 000000000..4efaa35d6
--- /dev/null
+++ b/pyload/common/test_api.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common import APIExerciser
+from nose.tools import nottest
+
+
+class TestApi:
+
+ def __init__(self):
+ self.api = APIExerciser.APIExerciser(None, True, "TestUser", "pwhere")
+
+ def test_login(self):
+ assert self.api.api.login("crapp", "wrong pw") is False
+
+ #takes really long, only test when needed
+ @nottest
+ def test_random(self):
+
+ for i in range(0, 100):
+ self.api.testAPI()
diff --git a/module/common/test_json.py b/pyload/common/test_json.py
index 320a42d4f..320a42d4f 100644
--- a/module/common/test_json.py
+++ b/pyload/common/test_json.py
diff --git a/module/config/default.conf b/pyload/config/default.conf
index 3a513f122..3a513f122 100644
--- a/module/config/default.conf
+++ b/pyload/config/default.conf
diff --git a/pyload/database/DatabaseBackend.py b/pyload/database/DatabaseBackend.py
new file mode 100644
index 000000000..9ebe31701
--- /dev/null
+++ b/pyload/database/DatabaseBackend.py
@@ -0,0 +1,305 @@
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+ @author: mkaay
+"""
+from threading import Thread
+from threading import Event
+from os import remove
+from os.path import exists
+from shutil import move
+
+from Queue import Queue
+from traceback import print_exc
+
+from pyload.utils import chmod
+
+try:
+ from pysqlite2 import dbapi2 as sqlite3
+except:
+ import sqlite3
+
+DB_VERSION = 4
+
+class style:
+ db = None
+
+ @classmethod
+ def setDB(cls, db):
+ cls.db = db
+
+ @classmethod
+ def inner(cls, f):
+ @staticmethod
+ def x(*args, **kwargs):
+ if cls.db:
+ return f(cls.db, *args, **kwargs)
+ return x
+
+ @classmethod
+ def queue(cls, f):
+ @staticmethod
+ def x(*args, **kwargs):
+ if cls.db:
+ return cls.db.queue(f, *args, **kwargs)
+ return x
+
+ @classmethod
+ def async(cls, f):
+ @staticmethod
+ def x(*args, **kwargs):
+ if cls.db:
+ return cls.db.async(f, *args, **kwargs)
+ return x
+
+class DatabaseJob:
+ def __init__(self, f, *args, **kwargs):
+ self.done = Event()
+
+ self.f = f
+ self.args = args
+ self.kwargs = kwargs
+
+ self.result = None
+ self.exception = False
+
+# import inspect
+# self.frame = inspect.currentframe()
+
+ def __repr__(self):
+ from os.path import basename
+ frame = self.frame.f_back
+ output = ""
+ for i in range(5):
+ output += "\t%s:%s, %s\n" % (basename(frame.f_code.co_filename), frame.f_lineno, frame.f_code.co_name)
+ frame = frame.f_back
+ del frame
+ del self.frame
+
+ return "DataBase Job %s:%s\n%sResult: %s" % (self.f.__name__, self.args[1:], output, self.result)
+
+ def processJob(self):
+ try:
+ self.result = self.f(*self.args, **self.kwargs)
+ except Exception, e:
+ print_exc()
+ try:
+ print "Database Error @", self.f.__name__, self.args[1:], self.kwargs, e
+ except:
+ pass
+
+ self.exception = e
+ finally:
+ self.done.set()
+
+ def wait(self):
+ self.done.wait()
+
+class DatabaseBackend(Thread):
+ subs = []
+ def __init__(self, core):
+ Thread.__init__(self)
+ self.setDaemon(True)
+ self.core = core
+
+ self.jobs = Queue()
+
+ self.setuplock = Event()
+
+ style.setDB(self)
+
+ def setup(self):
+ self.start()
+ self.setuplock.wait()
+
+ def run(self):
+ """main loop, which executes commands"""
+ convert = self._checkVersion() #returns None or current version
+
+ self.conn = sqlite3.connect("files.db")
+ chmod("files.db", 0600)
+
+ self.c = self.conn.cursor() #compatibility
+
+ if convert is not None:
+ self._convertDB(convert)
+
+ self._createTables()
+ self._migrateUser()
+
+ self.conn.commit()
+
+ self.setuplock.set()
+
+ while True:
+ j = self.jobs.get()
+ if j == "quit":
+ self.c.close()
+ self.conn.close()
+ break
+ j.processJob()
+
+ @style.queue
+ def shutdown(self):
+ self.conn.commit()
+ self.jobs.put("quit")
+
+ def _checkVersion(self):
+ """ check db version and delete it if needed"""
+ if not exists("files.version"):
+ f = open("files.version", "wb")
+ f.write(str(DB_VERSION))
+ f.close()
+ return
+
+ f = open("files.version", "rb")
+ v = int(f.read().strip())
+ f.close()
+ if v < DB_VERSION:
+ if v < 2:
+ try:
+ self.manager.core.log.warning(_("Filedatabase was deleted due to incompatible version."))
+ except:
+ print "Filedatabase was deleted due to incompatible version."
+ remove("files.version")
+ move("files.db", "files.backup.db")
+ f = open("files.version", "wb")
+ f.write(str(DB_VERSION))
+ f.close()
+ return v
+
+ def _convertDB(self, v):
+ try:
+ getattr(self, "_convertV%i" % v)()
+ except:
+ try:
+ self.core.log.error(_("Filedatabase could NOT be converted."))
+ except:
+ print "Filedatabase could NOT be converted."
+
+ #convert scripts start-----------------------------------------------------
+
+ def _convertV2(self):
+ self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")')
+ try:
+ self.manager.core.log.info(_("Database was converted from v2 to v3."))
+ except:
+ print "Database was converted from v2 to v3."
+ self._convertV3()
+
+ def _convertV3(self):
+ self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)')
+ try:
+ self.manager.core.log.info(_("Database was converted from v3 to v4."))
+ except:
+ print "Database was converted from v3 to v4."
+
+ #convert scripts end-------------------------------------------------------
+
+ def _createTables(self):
+ """create tables for database"""
+
+ self.c.execute('CREATE TABLE IF NOT EXISTS "packages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "folder" TEXT, "password" TEXT DEFAULT "", "site" TEXT DEFAULT "", "queue" INTEGER DEFAULT 0 NOT NULL, "packageorder" INTEGER DEFAULT 0 NOT NULL)')
+ self.c.execute('CREATE TABLE IF NOT EXISTS "links" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "url" TEXT NOT NULL, "name" TEXT, "size" INTEGER DEFAULT 0 NOT NULL, "status" INTEGER DEFAULT 3 NOT NULL, "plugin" TEXT DEFAULT "BasePlugin" NOT NULL, "error" TEXT DEFAULT "", "linkorder" INTEGER DEFAULT 0 NOT NULL, "package" INTEGER DEFAULT 0 NOT NULL, FOREIGN KEY(package) REFERENCES packages(id))')
+ self.c.execute('CREATE INDEX IF NOT EXISTS "pIdIndex" ON links(package)')
+ self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")')
+ self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)')
+
+ self.c.execute('CREATE VIEW IF NOT EXISTS "pstats" AS \
+ SELECT p.id AS id, SUM(l.size) AS sizetotal, COUNT(l.id) AS linkstotal, linksdone, sizedone\
+ FROM packages p JOIN links l ON p.id = l.package LEFT OUTER JOIN\
+ (SELECT p.id AS id, COUNT(*) AS linksdone, SUM(l.size) AS sizedone \
+ FROM packages p JOIN links l ON p.id = l.package AND l.status in (0, 4, 13) GROUP BY p.id) s ON s.id = p.id \
+ GROUP BY p.id')
+
+ #try to lower ids
+ self.c.execute('SELECT max(id) FROM LINKS')
+ fid = self.c.fetchone()[0]
+ if fid:
+ fid = int(fid)
+ else:
+ fid = 0
+ self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (fid, "links"))
+
+
+ self.c.execute('SELECT max(id) FROM packages')
+ pid = self.c.fetchone()[0]
+ if pid:
+ pid = int(pid)
+ else:
+ pid = 0
+ self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (pid, "packages"))
+
+ self.c.execute('VACUUM')
+
+
+ def _migrateUser(self):
+ if exists("pyload.db"):
+ try:
+ self.core.log.info(_("Converting old Django DB"))
+ except:
+ print "Converting old Django DB"
+ conn = sqlite3.connect('pyload.db')
+ c = conn.cursor()
+ c.execute("SELECT username, password, email from auth_user WHERE is_superuser")
+ users = []
+ for r in c:
+ pw = r[1].split("$")
+ users.append((r[0], pw[1] + pw[2], r[2]))
+ c.close()
+ conn.close()
+
+ self.c.executemany("INSERT INTO users(name, password, email) VALUES (?, ?, ?)", users)
+ move("pyload.db", "pyload.old.db")
+
+ def createCursor(self):
+ return self.conn.cursor()
+
+ @style.async
+ def commit(self):
+ self.conn.commit()
+
+ @style.queue
+ def syncSave(self):
+ self.conn.commit()
+
+ @style.async
+ def rollback(self):
+ self.conn.rollback()
+
+ def async(self, f, *args, **kwargs):
+ args = (self,) + args
+ job = DatabaseJob(f, *args, **kwargs)
+ self.jobs.put(job)
+
+ def queue(self, f, *args, **kwargs):
+ args = (self,) + args
+ job = DatabaseJob(f, *args, **kwargs)
+ self.jobs.put(job)
+ job.wait()
+ return job.result
+
+ @classmethod
+ def registerSub(cls, klass):
+ cls.subs.append(klass)
+
+ @classmethod
+ def unregisterSub(cls, klass):
+ cls.subs.remove(klass)
+
+ def __getattr__(self, attr):
+ for sub in DatabaseBackend.subs:
+ if hasattr(sub, attr):
+ return getattr(sub, attr)
diff --git a/pyload/database/FileDatabase.py b/pyload/database/FileDatabase.py
new file mode 100644
index 000000000..fb30735bb
--- /dev/null
+++ b/pyload/database/FileDatabase.py
@@ -0,0 +1,891 @@
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+ @author: mkaay
+"""
+
+
+from threading import RLock
+from time import time
+
+from pyload.utils import formatSize, lock
+from pyload.PullEvents import InsertEvent, ReloadAllEvent, RemoveEvent, UpdateEvent
+from pyload.PyPackage import PyPackage
+from pyload.PyFile import PyFile
+from pyload.database import style, DatabaseBackend
+
+try:
+ from pysqlite2 import dbapi2 as sqlite3
+except:
+ import sqlite3
+
+
+class FileHandler:
+ """Handles all request made to obtain information,
+ modify status or other request for links or packages"""
+
+ def __init__(self, core):
+ """Constructor"""
+ self.core = core
+
+ # translations
+ self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("skipped"), _("waiting"), _("temp. offline"), _("starting"), _("failed"), _("aborted"), _("decrypting"), _("custom"), _("downloading"), _("processing"), _("unknown")]
+
+ self.cache = {} #holds instances for files
+ self.packageCache = {} # same for packages
+ #@TODO: purge the cache
+
+ self.jobCache = {}
+
+ self.lock = RLock() #@TODO should be a Lock w/o R
+ #self.lock._Verbose__verbose = True
+
+ self.filecount = -1 # if an invalid value is set get current value from db
+ self.queuecount = -1 #number of package to be loaded
+ self.unchanged = False #determines if any changes was made since last call
+
+ self.db = self.core.db
+
+ def change(func):
+ def new(*args):
+ args[0].unchanged = False
+ args[0].filecount = -1
+ args[0].queuecount = -1
+ args[0].jobCache = {}
+ return func(*args)
+ return new
+
+ #--------------------------------------------------------------------------
+ def save(self):
+ """saves all data to backend"""
+ self.db.commit()
+
+ #--------------------------------------------------------------------------
+ def syncSave(self):
+ """saves all data to backend and waits until all data are written"""
+ pyfiles = self.cache.values()
+ for pyfile in pyfiles:
+ pyfile.sync()
+
+ pypacks = self.packageCache.values()
+ for pypack in pypacks:
+ pypack.sync()
+
+ self.db.syncSave()
+
+ @lock
+ def getCompleteData(self, queue=1):
+ """gets a complete data representation"""
+
+ data = self.db.getAllLinks(queue)
+ packs = self.db.getAllPackages(queue)
+
+ data.update([(x.id, x.toDbDict()[x.id]) for x in self.cache.values()])
+
+ for x in self.packageCache.itervalues():
+ if x.queue != queue or x.id not in packs: continue
+ packs[x.id].update(x.toDict()[x.id])
+
+ for key, value in data.iteritems():
+ if value["package"] in packs:
+ packs[value["package"]]["links"][key] = value
+
+ return packs
+
+ @lock
+ def getInfoData(self, queue=1):
+ """gets a data representation without links"""
+
+ packs = self.db.getAllPackages(queue)
+ for x in self.packageCache.itervalues():
+ if x.queue != queue or x.id not in packs: continue
+ packs[x.id].update(x.toDict()[x.id])
+
+ return packs
+
+ @lock
+ @change
+ def addLinks(self, urls, package):
+ """adds links"""
+
+ self.core.hookManager.dispatchEvent("linksAdded", urls, package)
+
+ data = self.core.pluginManager.parseUrls(urls)
+
+ self.db.addLinks(data, package)
+ self.core.threadManager.createInfoThread(data, package)
+
+ #@TODO change from reloadAll event to package update event
+ self.core.pullManager.addEvent(ReloadAllEvent("collector"))
+
+ #--------------------------------------------------------------------------
+ @lock
+ @change
+ def addPackage(self, name, folder, queue=0):
+ """adds a package, default to link collector"""
+ lastID = self.db.addPackage(name, folder, queue)
+ p = self.db.getPackage(lastID)
+ e = InsertEvent("pack", lastID, p.order, "collector" if not queue else "queue")
+ self.core.pullManager.addEvent(e)
+ return lastID
+
+ #--------------------------------------------------------------------------
+ @lock
+ @change
+ def deletePackage(self, id):
+ """delete package and all contained links"""
+
+ p = self.getPackage(id)
+ if not p:
+ if id in self.packageCache: del self.packageCache[id]
+ return
+
+ oldorder = p.order
+ queue = p.queue
+
+ e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
+
+ pyfiles = self.cache.values()
+
+ for pyfile in pyfiles:
+ if pyfile.packageid == id:
+ pyfile.abortDownload()
+ pyfile.release()
+
+ self.db.deletePackage(p)
+ self.core.pullManager.addEvent(e)
+ self.core.hookManager.dispatchEvent("packageDeleted", id)
+
+ if id in self.packageCache:
+ del self.packageCache[id]
+
+ packs = self.packageCache.values()
+ for pack in packs:
+ if pack.queue == queue and pack.order > oldorder:
+ pack.order -= 1
+ pack.notifyChange()
+
+ #--------------------------------------------------------------------------
+ @lock
+ @change
+ def deleteLink(self, id):
+ """deletes links"""
+
+ f = self.getFile(id)
+ if not f:
+ return None
+
+ pid = f.packageid
+ e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue")
+
+ oldorder = f.order
+
+ if id in self.core.threadManager.processingIds():
+ self.cache[id].abortDownload()
+
+ if id in self.cache:
+ del self.cache[id]
+
+ self.db.deleteLink(f)
+
+ self.core.pullManager.addEvent(e)
+
+ p = self.getPackage(pid)
+ if not len(p.getChildren()):
+ p.delete()
+
+ pyfiles = self.cache.values()
+ for pyfile in pyfiles:
+ if pyfile.packageid == pid and pyfile.order > oldorder:
+ pyfile.order -= 1
+ pyfile.notifyChange()
+
+ #--------------------------------------------------------------------------
+ def releaseLink(self, id):
+ """removes pyfile from cache"""
+ if id in self.cache:
+ del self.cache[id]
+
+ #--------------------------------------------------------------------------
+ def releasePackage(self, id):
+ """removes package from cache"""
+ if id in self.packageCache:
+ del self.packageCache[id]
+
+ #--------------------------------------------------------------------------
+ def updateLink(self, pyfile):
+ """updates link"""
+ self.db.updateLink(pyfile)
+
+ e = UpdateEvent("file", pyfile.id, "collector" if not pyfile.package().queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ #--------------------------------------------------------------------------
+ def updatePackage(self, pypack):
+ """updates a package"""
+ self.db.updatePackage(pypack)
+
+ e = UpdateEvent("pack", pypack.id, "collector" if not pypack.queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ #--------------------------------------------------------------------------
+ def getPackage(self, id):
+ """return package instance"""
+
+ if id in self.packageCache:
+ return self.packageCache[id]
+ else:
+ return self.db.getPackage(id)
+
+ #--------------------------------------------------------------------------
+ def getPackageData(self, id):
+ """returns dict with package information"""
+ pack = self.getPackage(id)
+
+ if not pack:
+ return None
+
+ pack = pack.toDict()[id]
+
+ data = self.db.getPackageData(id)
+
+ tmplist = []
+
+ cache = self.cache.values()
+ for x in cache:
+ if int(x.toDbDict()[x.id]["package"]) == int(id):
+ tmplist.append((x.id, x.toDbDict()[x.id]))
+ data.update(tmplist)
+
+ pack["links"] = data
+
+ return pack
+
+ #--------------------------------------------------------------------------
+ def getFileData(self, id):
+ """returns dict with file information"""
+ if id in self.cache:
+ return self.cache[id].toDbDict()
+
+ return self.db.getLinkData(id)
+
+ #--------------------------------------------------------------------------
+ def getFile(self, id):
+ """returns pyfile instance"""
+ if id in self.cache:
+ return self.cache[id]
+ else:
+ return self.db.getFile(id)
+
+ #--------------------------------------------------------------------------
+ @lock
+ def getJob(self, occ):
+ """get suitable job"""
+
+ #@TODO clean mess
+ #@TODO improve selection of valid jobs
+
+ if occ in self.jobCache:
+ if self.jobCache[occ]:
+ id = self.jobCache[occ].pop()
+ if id == "empty":
+ pyfile = None
+ self.jobCache[occ].append("empty")
+ else:
+ pyfile = self.getFile(id)
+ else:
+ jobs = self.db.getJob(occ)
+ jobs.reverse()
+ if not jobs:
+ self.jobCache[occ].append("empty")
+ pyfile = None
+ else:
+ self.jobCache[occ].extend(jobs)
+ pyfile = self.getFile(self.jobCache[occ].pop())
+
+ else:
+ self.jobCache = {} #better not caching to much
+ jobs = self.db.getJob(occ)
+ jobs.reverse()
+ self.jobCache[occ] = jobs
+
+ if not jobs:
+ self.jobCache[occ].append("empty")
+ pyfile = None
+ else:
+ pyfile = self.getFile(self.jobCache[occ].pop())
+
+ #@TODO: maybe the new job has to be approved...
+
+
+ #pyfile = self.getFile(self.jobCache[occ].pop())
+ return pyfile
+
+ @lock
+ def getDecryptJob(self):
+ """return job for decrypting"""
+ if "decrypt" in self.jobCache:
+ return None
+
+ plugins = self.core.pluginManager.crypterPlugins.keys() + self.core.pluginManager.containerPlugins.keys()
+ plugins = str(tuple(plugins))
+
+ jobs = self.db.getPluginJob(plugins)
+ if jobs:
+ return self.getFile(jobs[0])
+ else:
+ self.jobCache["decrypt"] = "empty"
+ return None
+
+ def getFileCount(self):
+ """returns number of files"""
+
+ if self.filecount == -1:
+ self.filecount = self.db.filecount(1)
+
+ return self.filecount
+
+ def getQueueCount(self, force=False):
+ """number of files that have to be processed"""
+ if self.queuecount == -1 or force:
+ self.queuecount = self.db.queuecount(1)
+
+ return self.queuecount
+
+ def checkAllLinksFinished(self):
+ """checks if all files are finished and dispatch event"""
+
+ if not self.getQueueCount(True):
+ self.core.hookManager.dispatchEvent("allDownloadsFinished")
+ self.core.log.debug("All downloads finished")
+ return True
+
+ return False
+
+ def checkAllLinksProcessed(self, fid):
+ """checks if all files was processed and pyload would idle now, needs fid which will be ignored when counting"""
+
+ # reset count so statistic will update (this is called when dl was processed)
+ self.resetCount()
+
+ if not self.db.processcount(1, fid):
+ self.core.hookManager.dispatchEvent("allDownloadsProcessed")
+ self.core.log.debug("All downloads processed")
+ return True
+
+ return False
+
+ def resetCount(self):
+ self.queuecount = -1
+
+ @lock
+ @change
+ def restartPackage(self, id):
+ """restart package"""
+ pyfiles = self.cache.values()
+ for pyfile in pyfiles:
+ if pyfile.packageid == id:
+ self.restartFile(pyfile.id)
+
+ self.db.restartPackage(id)
+
+ if id in self.packageCache:
+ self.packageCache[id].setFinished = False
+
+ e = UpdateEvent("pack", id, "collector" if not self.getPackage(id).queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ @lock
+ @change
+ def restartFile(self, id):
+ """ restart file"""
+ if id in self.cache:
+ self.cache[id].status = 3
+ self.cache[id].name = self.cache[id].url
+ self.cache[id].error = ""
+ self.cache[id].abortDownload()
+
+
+ self.db.restartFile(id)
+
+ e = UpdateEvent("file", id, "collector" if not self.getFile(id).package().queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ @lock
+ @change
+ def setPackageLocation(self, id, queue):
+ """push package to queue"""
+
+ p = self.db.getPackage(id)
+ oldorder = p.order
+
+ e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ self.db.clearPackageOrder(p)
+
+ p = self.db.getPackage(id)
+
+ p.queue = queue
+ self.db.updatePackage(p)
+
+ self.db.reorderPackage(p, -1, True)
+
+ packs = self.packageCache.values()
+ for pack in packs:
+ if pack.queue != queue and pack.order > oldorder:
+ pack.order -= 1
+ pack.notifyChange()
+
+ self.db.commit()
+ self.releasePackage(id)
+ p = self.getPackage(id)
+
+ e = InsertEvent("pack", id, p.order, "collector" if not p.queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ @lock
+ @change
+ def reorderPackage(self, id, position):
+ p = self.getPackage(id)
+
+ e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")
+ self.core.pullManager.addEvent(e)
+ self.db.reorderPackage(p, position)
+
+ packs = self.packageCache.values()
+ for pack in packs:
+ if pack.queue != p.queue or pack.order < 0 or pack == p: continue
+ if p.order > position:
+ if pack.order >= position and pack.order < p.order:
+ pack.order += 1
+ pack.notifyChange()
+ elif p.order < position:
+ if pack.order <= position and pack.order > p.order:
+ pack.order -= 1
+ pack.notifyChange()
+
+ p.order = position
+ self.db.commit()
+
+ e = InsertEvent("pack", id, position, "collector" if not p.queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ @lock
+ @change
+ def reorderFile(self, id, position):
+ f = self.getFileData(id)
+ f = f[id]
+
+ e = RemoveEvent("file", id, "collector" if not self.getPackage(f["package"]).queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ self.db.reorderLink(f, position)
+
+ pyfiles = self.cache.values()
+ for pyfile in pyfiles:
+ if pyfile.packageid != f["package"] or pyfile.order < 0: continue
+ if f["order"] > position:
+ if pyfile.order >= position and pyfile.order < f["order"]:
+ pyfile.order += 1
+ pyfile.notifyChange()
+ elif f["order"] < position:
+ if pyfile.order <= position and pyfile.order > f["order"]:
+ pyfile.order -= 1
+ pyfile.notifyChange()
+
+ if id in self.cache:
+ self.cache[id].order = position
+
+ self.db.commit()
+
+ e = InsertEvent("file", id, position, "collector" if not self.getPackage(f["package"]).queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ @change
+ def updateFileInfo(self, data, pid):
+ """ updates file info (name, size, status, url)"""
+ ids = self.db.updateLinkInfo(data)
+ e = UpdateEvent("pack", pid, "collector" if not self.getPackage(pid).queue else "queue")
+ self.core.pullManager.addEvent(e)
+
+ def checkPackageFinished(self, pyfile):
+ """ checks if package is finished and calls hookmanager """
+
+ ids = self.db.getUnfinished(pyfile.packageid)
+ if not ids or (pyfile.id in ids and len(ids) == 1):
+ if not pyfile.package().setFinished:
+ self.core.log.info(_("Package finished: %s") % pyfile.package().name)
+ self.core.hookManager.packageFinished(pyfile.package())
+ pyfile.package().setFinished = True
+
+
+ def reCheckPackage(self, pid):
+ """ recheck links in package """
+ data = self.db.getPackageData(pid)
+
+ urls = []
+
+ for pyfile in data.itervalues():
+ if pyfile["status"] not in (0, 12, 13):
+ urls.append((pyfile["url"], pyfile["plugin"]))
+
+ self.core.threadManager.createInfoThread(urls, pid)
+
+ @lock
+ @change
+ def deleteFinishedLinks(self):
+ """ deletes finished links and packages, return deleted packages """
+
+ old_packs = self.getInfoData(0)
+ old_packs.update(self.getInfoData(1))
+
+ self.db.deleteFinished()
+
+ new_packs = self.db.getAllPackages(0)
+ new_packs.update(self.db.getAllPackages(1))
+ #get new packages only from db
+
+ deleted = []
+ for id in old_packs.iterkeys():
+ if id not in new_packs:
+ deleted.append(id)
+ self.deletePackage(int(id))
+
+ return deleted
+
+ @lock
+ @change
+ def restartFailed(self):
+ """ restart all failed links """
+ self.db.restartFailed()
+
+class FileMethods:
+ @style.queue
+ def filecount(self, queue):
+ """returns number of files in queue"""
+ self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=?", (queue,))
+ return self.c.fetchone()[0]
+
+ @style.queue
+ def queuecount(self, queue):
+ """ number of files in queue not finished yet"""
+ self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status NOT IN (0, 4)", (queue,))
+ return self.c.fetchone()[0]
+
+ @style.queue
+ def processcount(self, queue, fid):
+ """ number of files which have to be proccessed """
+ self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status IN (2, 3, 5, 7, 12) AND l.id != ?", (queue, str(fid)))
+ return self.c.fetchone()[0]
+
+ @style.inner
+ def _nextPackageOrder(self, queue=0):
+ self.c.execute('SELECT MAX(packageorder) FROM packages WHERE queue=?', (queue,))
+ max = self.c.fetchone()[0]
+ if max is not None:
+ return max + 1
+ else:
+ return 0
+
+ @style.inner
+ def _nextFileOrder(self, package):
+ self.c.execute('SELECT MAX(linkorder) FROM links WHERE package=?', (package,))
+ max = self.c.fetchone()[0]
+ if max is not None:
+ return max + 1
+ else:
+ return 0
+
+ @style.queue
+ def addLink(self, url, name, plugin, package):
+ order = self._nextFileOrder(package)
+ self.c.execute('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', (url, name, plugin, package, order))
+ return self.c.lastrowid
+
+ @style.queue
+ def addLinks(self, links, package):
+ """ links is a list of tupels (url, plugin)"""
+ order = self._nextFileOrder(package)
+ orders = [order + x for x in range(len(links))]
+ links = [(x[0], x[0], x[1], package, o) for x, o in zip(links, orders)]
+ self.c.executemany('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', links)
+
+ @style.queue
+ def addPackage(self, name, folder, queue):
+ order = self._nextPackageOrder(queue)
+ self.c.execute('INSERT INTO packages(name, folder, queue, packageorder) VALUES(?,?,?,?)', (name, folder, queue, order))
+ return self.c.lastrowid
+
+ @style.queue
+ def deletePackage(self, p):
+
+ self.c.execute('DELETE FROM links WHERE package=?', (str(p.id),))
+ self.c.execute('DELETE FROM packages WHERE id=?', (str(p.id),))
+ self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', (p.order, p.queue))
+
+ @style.queue
+ def deleteLink(self, f):
+
+ self.c.execute('DELETE FROM links WHERE id=?', (str(f.id),))
+ self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', (f.order, str(f.packageid)))
+
+
+ @style.queue
+ def getAllLinks(self, q):
+ """return information about all links in queue q
+
+ q0 queue
+ q1 collector
+
+ format:
+
+ {
+ id: {'name': name, ... 'package': id }, ...
+ }
+
+ """
+ self.c.execute('SELECT l.id, l.url, l.name, l.size, l.status, l.error, l.plugin, l.package, l.linkorder FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? ORDER BY l.linkorder', (q,))
+ data = {}
+ for r in self.c:
+ data[r[0]] = {
+ 'id': r[0],
+ 'url': r[1],
+ 'name': r[2],
+ 'size': r[3],
+ 'format_size': formatSize(r[3]),
+ 'status': r[4],
+ 'statusmsg': self.manager.statusMsg[r[4]],
+ 'error': r[5],
+ 'plugin': r[6],
+ 'package': r[7],
+ 'order': r[8],
+ }
+
+ return data
+
+ @style.queue
+ def getAllPackages(self, q):
+ """return information about packages in queue q
+ (only useful in get all data)
+
+ q0 queue
+ q1 collector
+
+ format:
+
+ {
+ id: {'name': name ... 'links': {}}, ...
+ }
+ """
+ self.c.execute('SELECT p.id, p.name, p.folder, p.site, p.password, p.queue, p.packageorder, s.sizetotal, s.sizedone, s.linksdone, s.linkstotal \
+ FROM packages p JOIN pstats s ON p.id = s.id \
+ WHERE p.queue=? ORDER BY p.packageorder', str(q))
+
+ data = {}
+ for r in self.c:
+ data[r[0]] = {
+ 'id': r[0],
+ 'name': r[1],
+ 'folder': r[2],
+ 'site': r[3],
+ 'password': r[4],
+ 'queue': r[5],
+ 'order': r[6],
+ 'sizetotal': int(r[7]),
+ 'sizedone': r[8] if r[8] else 0, #these can be None
+ 'linksdone': r[9] if r[9] else 0,
+ 'linkstotal': r[10],
+ 'links': {}
+ }
+
+ return data
+
+ @style.queue
+ def getLinkData(self, id):
+ """get link information as dict"""
+ self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?', (str(id),))
+ data = {}
+ r = self.c.fetchone()
+ if not r:
+ return None
+ data[r[0]] = {
+ 'id': r[0],
+ 'url': r[1],
+ 'name': r[2],
+ 'size': r[3],
+ 'format_size': formatSize(r[3]),
+ 'status': r[4],
+ 'statusmsg': self.manager.statusMsg[r[4]],
+ 'error': r[5],
+ 'plugin': r[6],
+ 'package': r[7],
+ 'order': r[8],
+ }
+
+ return data
+
+ @style.queue
+ def getPackageData(self, id):
+ """get data about links for a package"""
+ self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE package=? ORDER BY linkorder', (str(id),))
+
+ data = {}
+ for r in self.c:
+ data[r[0]] = {
+ 'id': r[0],
+ 'url': r[1],
+ 'name': r[2],
+ 'size': r[3],
+ 'format_size': formatSize(r[3]),
+ 'status': r[4],
+ 'statusmsg': self.manager.statusMsg[r[4]],
+ 'error': r[5],
+ 'plugin': r[6],
+ 'package': r[7],
+ 'order': r[8],
+ }
+
+ return data
+
+
+ @style.async
+ def updateLink(self, f):
+ self.c.execute('UPDATE links SET url=?, name=?, size=?, status=?, error=?, package=? WHERE id=?', (f.url, f.name, f.size, f.status, f.error, str(f.packageid), str(f.id)))
+
+ @style.queue
+ def updatePackage(self, p):
+ self.c.execute('UPDATE packages SET name=?, folder=?, site=?, password=?, queue=? WHERE id=?', (p.name, p.folder, p.site, p.password, p.queue, str(p.id)))
+
+ @style.queue
+ def updateLinkInfo(self, data):
+ """ data is list of tupels (name, size, status, url) """
+ self.c.executemany('UPDATE links SET name=?, size=?, status=? WHERE url=? AND status IN (1, 2, 3, 14)', data)
+ ids = []
+ self.c.execute('SELECT id FROM links WHERE url IN (\'%s\')' % "','".join([x[3] for x in data]))
+ for r in self.c:
+ ids.append(int(r[0]))
+ return ids
+
+ @style.queue
+ def reorderPackage(self, p, position, noMove=False):
+ if position == -1:
+ position = self._nextPackageOrder(p.queue)
+ if not noMove:
+ if p.order > position:
+ self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND packageorder < ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue))
+ elif p.order < position:
+ self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder <= ? AND packageorder > ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue))
+
+ self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (position, str(p.id)))
+
+ @style.queue
+ def reorderLink(self, f, position):
+ """ reorder link with f as dict for pyfile """
+ if f["order"] > position:
+ self.c.execute('UPDATE links SET linkorder=linkorder+1 WHERE linkorder >= ? AND linkorder < ? AND package=?', (position, f["order"], f["package"]))
+ elif f["order"] < position:
+ self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder <= ? AND linkorder > ? AND package=?', (position, f["order"], f["package"]))
+
+ self.c.execute('UPDATE links SET linkorder=? WHERE id=?', (position, f["id"]))
+
+ @style.queue
+ def clearPackageOrder(self, p):
+ self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (-1, str(p.id)))
+ self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=? AND id != ?', (p.order, p.queue, str(p.id)))
+
+ @style.async
+ def restartFile(self, id):
+ self.c.execute('UPDATE links SET status=3, error="" WHERE id=?', (str(id),))
+
+ @style.async
+ def restartPackage(self, id):
+ self.c.execute('UPDATE links SET status=3 WHERE package=?', (str(id),))
+
+ @style.queue
+ def getPackage(self, id):
+ """return package instance from id"""
+ self.c.execute("SELECT name, folder, site, password, queue, packageorder FROM packages WHERE id=?", (str(id),))
+ r = self.c.fetchone()
+ if not r: return None
+ return PyPackage(self.manager, id, * r)
+
+ #--------------------------------------------------------------------------
+ @style.queue
+ def getFile(self, id):
+ """return link instance from id"""
+ self.c.execute("SELECT url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?", (str(id),))
+ r = self.c.fetchone()
+ if not r: return None
+ return PyFile(self.manager, id, * r)
+
+
+ @style.queue
+ def getJob(self, occ):
+ """return pyfile ids, which are suitable for download and dont use a occupied plugin"""
+
+ #@TODO improve this hardcoded method
+ pre = "('DLC', 'LinkList', 'SerienjunkiesOrg', 'CCF', 'RSDF')" #plugins which are processed in collector
+
+ cmd = "("
+ for i, item in enumerate(occ):
+ if i: cmd += ", "
+ cmd += "'%s'" % item
+
+ cmd += ")"
+
+ cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE ((p.queue=1 AND l.plugin NOT IN %s) OR l.plugin IN %s) AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % (cmd, pre)
+
+ self.c.execute(cmd) # very bad!
+
+ return [x[0] for x in self.c]
+
+ @style.queue
+ def getPluginJob(self, plugins):
+ """returns pyfile ids with suited plugins"""
+ cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE l.plugin IN %s AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % plugins
+
+ self.c.execute(cmd) # very bad!
+
+ return [x[0] for x in self.c]
+
+ @style.queue
+ def getUnfinished(self, pid):
+ """return list of max length 3 ids with pyfiles in package not finished or processed"""
+
+ self.c.execute("SELECT id FROM links WHERE package=? AND status NOT IN (0, 4, 13) LIMIT 3", (str(pid),))
+ return [r[0] for r in self.c]
+
+ @style.queue
+ def deleteFinished(self):
+ self.c.execute("DELETE FROM links WHERE status IN (0, 4)")
+ self.c.execute("DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE packages.id=links.package)")
+
+ @style.queue
+ def restartFailed(self):
+ self.c.execute("UPDATE links SET status=3, error='' WHERE status IN (6, 8, 9)")
+
+ @style.queue
+ def findDuplicates(self, id, folder, filename):
+ """ checks if filename exists with different id and same package """
+ self.c.execute("SELECT l.plugin FROM links as l INNER JOIN packages as p ON l.package=p.id AND p.folder=? WHERE l.id!=? AND l.status=0 AND l.name=?", (folder, id, filename))
+ return self.c.fetchone()
+
+ @style.queue
+ def purgeLinks(self):
+ self.c.execute("DELETE FROM links;")
+ self.c.execute("DELETE FROM packages;")
+
+DatabaseBackend.registerSub(FileMethods)
diff --git a/pyload/database/StorageDatabase.py b/pyload/database/StorageDatabase.py
new file mode 100644
index 000000000..c2473e7b7
--- /dev/null
+++ b/pyload/database/StorageDatabase.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: mkaay
+"""
+
+from pyload.database import style
+from pyload.database import DatabaseBackend
+
+class StorageMethods:
+ @style.queue
+ def setStorage(db, identifier, key, value):
+ db.c.execute("SELECT id FROM storage WHERE identifier=? AND key=?", (identifier, key))
+ if db.c.fetchone() is not None:
+ db.c.execute("UPDATE storage SET value=? WHERE identifier=? AND key=?", (value, identifier, key))
+ else:
+ db.c.execute("INSERT INTO storage (identifier, key, value) VALUES (?, ?, ?)", (identifier, key, value))
+
+ @style.queue
+ def getStorage(db, identifier, key=None):
+ if key is not None:
+ db.c.execute("SELECT value FROM storage WHERE identifier=? AND key=?", (identifier, key))
+ row = db.c.fetchone()
+ if row is not None:
+ return row[0]
+ else:
+ db.c.execute("SELECT key, value FROM storage WHERE identifier=?", (identifier,))
+ d = {}
+ for row in db.c:
+ d[row[0]] = row[1]
+ return d
+
+ @style.queue
+ def delStorage(db, identifier, key):
+ db.c.execute("DELETE FROM storage WHERE identifier=? AND key=?", (identifier, key))
+
+DatabaseBackend.registerSub(StorageMethods)
diff --git a/module/database/UserDatabase.py b/pyload/database/UserDatabase.py
index 59b0f6dbf..59b0f6dbf 100644
--- a/module/database/UserDatabase.py
+++ b/pyload/database/UserDatabase.py
diff --git a/module/database/__init__.py b/pyload/database/__init__.py
index 5f287a47f..5f287a47f 100644
--- a/module/database/__init__.py
+++ b/pyload/database/__init__.py
diff --git a/module/debug.py b/pyload/debug.py
index 54a159e78..54a159e78 100644
--- a/module/debug.py
+++ b/pyload/debug.py
diff --git a/module/forwarder.py b/pyload/forwarder.py
index 3cb3a7748..3cb3a7748 100644
--- a/module/forwarder.py
+++ b/pyload/forwarder.py
diff --git a/module/lib/BeautifulSoup.py b/pyload/lib/BeautifulSoup.py
index 7278215ca..7278215ca 100644
--- a/module/lib/BeautifulSoup.py
+++ b/pyload/lib/BeautifulSoup.py
diff --git a/module/lib/Getch.py b/pyload/lib/Getch.py
index 22b7ea7f8..22b7ea7f8 100644
--- a/module/lib/Getch.py
+++ b/pyload/lib/Getch.py
diff --git a/module/lib/MultipartPostHandler.py b/pyload/lib/MultipartPostHandler.py
index 94aee0193..94aee0193 100644
--- a/module/lib/MultipartPostHandler.py
+++ b/pyload/lib/MultipartPostHandler.py
diff --git a/module/lib/SafeEval.py b/pyload/lib/SafeEval.py
index 8fc57f261..8fc57f261 100644
--- a/module/lib/SafeEval.py
+++ b/pyload/lib/SafeEval.py
diff --git a/module/lib/__init__.py b/pyload/lib/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/lib/__init__.py
+++ b/pyload/lib/__init__.py
diff --git a/module/lib/beaker/__init__.py b/pyload/lib/beaker/__init__.py
index d07785c52..d07785c52 100644
--- a/module/lib/beaker/__init__.py
+++ b/pyload/lib/beaker/__init__.py
diff --git a/module/lib/beaker/cache.py b/pyload/lib/beaker/cache.py
index 0ae96e020..0ae96e020 100644
--- a/module/lib/beaker/cache.py
+++ b/pyload/lib/beaker/cache.py
diff --git a/module/lib/beaker/container.py b/pyload/lib/beaker/container.py
index 5a2e8e75c..5a2e8e75c 100644
--- a/module/lib/beaker/container.py
+++ b/pyload/lib/beaker/container.py
diff --git a/module/lib/beaker/converters.py b/pyload/lib/beaker/converters.py
index 3fb80692f..3fb80692f 100644
--- a/module/lib/beaker/converters.py
+++ b/pyload/lib/beaker/converters.py
diff --git a/module/lib/beaker/crypto/__init__.py b/pyload/lib/beaker/crypto/__init__.py
index ac13da527..ac13da527 100644
--- a/module/lib/beaker/crypto/__init__.py
+++ b/pyload/lib/beaker/crypto/__init__.py
diff --git a/module/lib/beaker/crypto/jcecrypto.py b/pyload/lib/beaker/crypto/jcecrypto.py
index ce313d6e1..ce313d6e1 100644
--- a/module/lib/beaker/crypto/jcecrypto.py
+++ b/pyload/lib/beaker/crypto/jcecrypto.py
diff --git a/module/lib/beaker/crypto/nsscrypto.py b/pyload/lib/beaker/crypto/nsscrypto.py
index 3a7797877..3a7797877 100644
--- a/module/lib/beaker/crypto/nsscrypto.py
+++ b/pyload/lib/beaker/crypto/nsscrypto.py
diff --git a/module/lib/beaker/crypto/pbkdf2.py b/pyload/lib/beaker/crypto/pbkdf2.py
index 71df22198..71df22198 100644
--- a/module/lib/beaker/crypto/pbkdf2.py
+++ b/pyload/lib/beaker/crypto/pbkdf2.py
diff --git a/module/lib/beaker/crypto/pycrypto.py b/pyload/lib/beaker/crypto/pycrypto.py
index 6657bff56..6657bff56 100644
--- a/module/lib/beaker/crypto/pycrypto.py
+++ b/pyload/lib/beaker/crypto/pycrypto.py
diff --git a/module/lib/beaker/crypto/util.py b/pyload/lib/beaker/crypto/util.py
index 7f96ac856..7f96ac856 100644
--- a/module/lib/beaker/crypto/util.py
+++ b/pyload/lib/beaker/crypto/util.py
diff --git a/module/lib/beaker/exceptions.py b/pyload/lib/beaker/exceptions.py
index 4f81e456d..4f81e456d 100644
--- a/module/lib/beaker/exceptions.py
+++ b/pyload/lib/beaker/exceptions.py
diff --git a/module/lib/beaker/ext/__init__.py b/pyload/lib/beaker/ext/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/lib/beaker/ext/__init__.py
+++ b/pyload/lib/beaker/ext/__init__.py
diff --git a/module/lib/beaker/ext/database.py b/pyload/lib/beaker/ext/database.py
index 462fb8de4..462fb8de4 100644
--- a/module/lib/beaker/ext/database.py
+++ b/pyload/lib/beaker/ext/database.py
diff --git a/module/lib/beaker/ext/google.py b/pyload/lib/beaker/ext/google.py
index d0a6205f4..d0a6205f4 100644
--- a/module/lib/beaker/ext/google.py
+++ b/pyload/lib/beaker/ext/google.py
diff --git a/module/lib/beaker/ext/memcached.py b/pyload/lib/beaker/ext/memcached.py
index 94e3da3c9..94e3da3c9 100644
--- a/module/lib/beaker/ext/memcached.py
+++ b/pyload/lib/beaker/ext/memcached.py
diff --git a/module/lib/beaker/ext/sqla.py b/pyload/lib/beaker/ext/sqla.py
index 6405c2919..6405c2919 100644
--- a/module/lib/beaker/ext/sqla.py
+++ b/pyload/lib/beaker/ext/sqla.py
diff --git a/module/lib/beaker/middleware.py b/pyload/lib/beaker/middleware.py
index 803398584..803398584 100644
--- a/module/lib/beaker/middleware.py
+++ b/pyload/lib/beaker/middleware.py
diff --git a/module/lib/beaker/session.py b/pyload/lib/beaker/session.py
index d70a670eb..d70a670eb 100644
--- a/module/lib/beaker/session.py
+++ b/pyload/lib/beaker/session.py
diff --git a/module/lib/beaker/synchronization.py b/pyload/lib/beaker/synchronization.py
index f236b8cfe..f236b8cfe 100644
--- a/module/lib/beaker/synchronization.py
+++ b/pyload/lib/beaker/synchronization.py
diff --git a/module/lib/beaker/util.py b/pyload/lib/beaker/util.py
index c7002cd92..c7002cd92 100644
--- a/module/lib/beaker/util.py
+++ b/pyload/lib/beaker/util.py
diff --git a/module/lib/bottle.py b/pyload/lib/bottle.py
index bcc284c1d..bcc284c1d 100644
--- a/module/lib/bottle.py
+++ b/pyload/lib/bottle.py
diff --git a/module/lib/feedparser.py b/pyload/lib/feedparser.py
index c78e6a39b..c78e6a39b 100644
--- a/module/lib/feedparser.py
+++ b/pyload/lib/feedparser.py
diff --git a/module/lib/jinja2/__init__.py b/pyload/lib/jinja2/__init__.py
index a4f7e9c4e..a4f7e9c4e 100644
--- a/module/lib/jinja2/__init__.py
+++ b/pyload/lib/jinja2/__init__.py
diff --git a/module/lib/jinja2/_compat.py b/pyload/lib/jinja2/_compat.py
index 8fa8a49a0..8fa8a49a0 100644
--- a/module/lib/jinja2/_compat.py
+++ b/pyload/lib/jinja2/_compat.py
diff --git a/module/lib/jinja2/_stringdefs.py b/pyload/lib/jinja2/_stringdefs.py
index da5830e9f..da5830e9f 100644
--- a/module/lib/jinja2/_stringdefs.py
+++ b/pyload/lib/jinja2/_stringdefs.py
diff --git a/module/lib/jinja2/bccache.py b/pyload/lib/jinja2/bccache.py
index 2d28ab8b2..2d28ab8b2 100644
--- a/module/lib/jinja2/bccache.py
+++ b/pyload/lib/jinja2/bccache.py
diff --git a/module/lib/jinja2/compiler.py b/pyload/lib/jinja2/compiler.py
index 75a60b8d2..75a60b8d2 100644
--- a/module/lib/jinja2/compiler.py
+++ b/pyload/lib/jinja2/compiler.py
diff --git a/module/lib/jinja2/constants.py b/pyload/lib/jinja2/constants.py
index cab203cc7..cab203cc7 100644
--- a/module/lib/jinja2/constants.py
+++ b/pyload/lib/jinja2/constants.py
diff --git a/module/lib/jinja2/debug.py b/pyload/lib/jinja2/debug.py
index 815cc18a4..815cc18a4 100644
--- a/module/lib/jinja2/debug.py
+++ b/pyload/lib/jinja2/debug.py
diff --git a/module/lib/jinja2/defaults.py b/pyload/lib/jinja2/defaults.py
index a27cb80cb..a27cb80cb 100644
--- a/module/lib/jinja2/defaults.py
+++ b/pyload/lib/jinja2/defaults.py
diff --git a/module/lib/jinja2/environment.py b/pyload/lib/jinja2/environment.py
index 45fabada2..45fabada2 100644
--- a/module/lib/jinja2/environment.py
+++ b/pyload/lib/jinja2/environment.py
diff --git a/module/lib/jinja2/exceptions.py b/pyload/lib/jinja2/exceptions.py
index c9df6dc7c..c9df6dc7c 100644
--- a/module/lib/jinja2/exceptions.py
+++ b/pyload/lib/jinja2/exceptions.py
diff --git a/module/lib/jinja2/ext.py b/pyload/lib/jinja2/ext.py
index c2df12d55..c2df12d55 100644
--- a/module/lib/jinja2/ext.py
+++ b/pyload/lib/jinja2/ext.py
diff --git a/module/lib/jinja2/filters.py b/pyload/lib/jinja2/filters.py
index fd0db04aa..fd0db04aa 100644
--- a/module/lib/jinja2/filters.py
+++ b/pyload/lib/jinja2/filters.py
diff --git a/module/lib/jinja2/lexer.py b/pyload/lib/jinja2/lexer.py
index a50128507..a50128507 100644
--- a/module/lib/jinja2/lexer.py
+++ b/pyload/lib/jinja2/lexer.py
diff --git a/module/lib/jinja2/loaders.py b/pyload/lib/jinja2/loaders.py
index cc9c6836e..cc9c6836e 100644
--- a/module/lib/jinja2/loaders.py
+++ b/pyload/lib/jinja2/loaders.py
diff --git a/module/lib/jinja2/meta.py b/pyload/lib/jinja2/meta.py
index 3110cff60..3110cff60 100644
--- a/module/lib/jinja2/meta.py
+++ b/pyload/lib/jinja2/meta.py
diff --git a/module/lib/jinja2/nodes.py b/pyload/lib/jinja2/nodes.py
index c5697e6b5..c5697e6b5 100644
--- a/module/lib/jinja2/nodes.py
+++ b/pyload/lib/jinja2/nodes.py
diff --git a/module/lib/jinja2/optimizer.py b/pyload/lib/jinja2/optimizer.py
index 00eab115e..00eab115e 100644
--- a/module/lib/jinja2/optimizer.py
+++ b/pyload/lib/jinja2/optimizer.py
diff --git a/module/lib/jinja2/parser.py b/pyload/lib/jinja2/parser.py
index f60cd018c..f60cd018c 100644
--- a/module/lib/jinja2/parser.py
+++ b/pyload/lib/jinja2/parser.py
diff --git a/module/lib/jinja2/runtime.py b/pyload/lib/jinja2/runtime.py
index 7791c645a..7791c645a 100644
--- a/module/lib/jinja2/runtime.py
+++ b/pyload/lib/jinja2/runtime.py
diff --git a/module/lib/jinja2/sandbox.py b/pyload/lib/jinja2/sandbox.py
index da479c1ba..da479c1ba 100644
--- a/module/lib/jinja2/sandbox.py
+++ b/pyload/lib/jinja2/sandbox.py
diff --git a/module/lib/jinja2/tests.py b/pyload/lib/jinja2/tests.py
index 48a3e0618..48a3e0618 100644
--- a/module/lib/jinja2/tests.py
+++ b/pyload/lib/jinja2/tests.py
diff --git a/module/lib/jinja2/testsuite/__init__.py b/pyload/lib/jinja2/testsuite/__init__.py
index 635c83e5d..635c83e5d 100644
--- a/module/lib/jinja2/testsuite/__init__.py
+++ b/pyload/lib/jinja2/testsuite/__init__.py
diff --git a/module/lib/jinja2/testsuite/api.py b/pyload/lib/jinja2/testsuite/api.py
index 1b68bf8b3..1b68bf8b3 100644
--- a/module/lib/jinja2/testsuite/api.py
+++ b/pyload/lib/jinja2/testsuite/api.py
diff --git a/module/lib/jinja2/testsuite/bytecode_cache.py b/pyload/lib/jinja2/testsuite/bytecode_cache.py
index 9f5c635b8..9f5c635b8 100644
--- a/module/lib/jinja2/testsuite/bytecode_cache.py
+++ b/pyload/lib/jinja2/testsuite/bytecode_cache.py
diff --git a/module/lib/jinja2/testsuite/core_tags.py b/pyload/lib/jinja2/testsuite/core_tags.py
index f1a20fd44..f1a20fd44 100644
--- a/module/lib/jinja2/testsuite/core_tags.py
+++ b/pyload/lib/jinja2/testsuite/core_tags.py
diff --git a/module/lib/jinja2/testsuite/debug.py b/pyload/lib/jinja2/testsuite/debug.py
index 2588a83ea..2588a83ea 100644
--- a/module/lib/jinja2/testsuite/debug.py
+++ b/pyload/lib/jinja2/testsuite/debug.py
diff --git a/module/lib/jinja2/testsuite/doctests.py b/pyload/lib/jinja2/testsuite/doctests.py
index 616d3b6ee..616d3b6ee 100644
--- a/module/lib/jinja2/testsuite/doctests.py
+++ b/pyload/lib/jinja2/testsuite/doctests.py
diff --git a/module/lib/jinja2/testsuite/ext.py b/pyload/lib/jinja2/testsuite/ext.py
index 0f93be945..0f93be945 100644
--- a/module/lib/jinja2/testsuite/ext.py
+++ b/pyload/lib/jinja2/testsuite/ext.py
diff --git a/module/lib/jinja2/testsuite/filters.py b/pyload/lib/jinja2/testsuite/filters.py
index 282dd2d85..282dd2d85 100644
--- a/module/lib/jinja2/testsuite/filters.py
+++ b/pyload/lib/jinja2/testsuite/filters.py
diff --git a/module/lib/jinja2/testsuite/imports.py b/pyload/lib/jinja2/testsuite/imports.py
index 3db9008de..3db9008de 100644
--- a/module/lib/jinja2/testsuite/imports.py
+++ b/pyload/lib/jinja2/testsuite/imports.py
diff --git a/module/lib/jinja2/testsuite/inheritance.py b/pyload/lib/jinja2/testsuite/inheritance.py
index e0f51cda9..e0f51cda9 100644
--- a/module/lib/jinja2/testsuite/inheritance.py
+++ b/pyload/lib/jinja2/testsuite/inheritance.py
diff --git a/module/lib/jinja2/testsuite/lexnparse.py b/pyload/lib/jinja2/testsuite/lexnparse.py
index bd1c94cd3..bd1c94cd3 100644
--- a/module/lib/jinja2/testsuite/lexnparse.py
+++ b/pyload/lib/jinja2/testsuite/lexnparse.py
diff --git a/module/lib/jinja2/testsuite/loader.py b/pyload/lib/jinja2/testsuite/loader.py
index a7350aab9..a7350aab9 100644
--- a/module/lib/jinja2/testsuite/loader.py
+++ b/pyload/lib/jinja2/testsuite/loader.py
diff --git a/module/lib/jinja2/testsuite/regression.py b/pyload/lib/jinja2/testsuite/regression.py
index c5f7d5c65..c5f7d5c65 100644
--- a/module/lib/jinja2/testsuite/regression.py
+++ b/pyload/lib/jinja2/testsuite/regression.py
diff --git a/module/lib/jinja2/testsuite/res/__init__.py b/pyload/lib/jinja2/testsuite/res/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/lib/jinja2/testsuite/res/__init__.py
+++ b/pyload/lib/jinja2/testsuite/res/__init__.py
diff --git a/module/lib/jinja2/testsuite/res/templates/broken.html b/pyload/lib/jinja2/testsuite/res/templates/broken.html
index 77669fae5..77669fae5 100644
--- a/module/lib/jinja2/testsuite/res/templates/broken.html
+++ b/pyload/lib/jinja2/testsuite/res/templates/broken.html
diff --git a/module/lib/jinja2/testsuite/res/templates/foo/test.html b/pyload/lib/jinja2/testsuite/res/templates/foo/test.html
index b7d6715e2..b7d6715e2 100644
--- a/module/lib/jinja2/testsuite/res/templates/foo/test.html
+++ b/pyload/lib/jinja2/testsuite/res/templates/foo/test.html
diff --git a/module/lib/jinja2/testsuite/res/templates/syntaxerror.html b/pyload/lib/jinja2/testsuite/res/templates/syntaxerror.html
index f21b81793..f21b81793 100644
--- a/module/lib/jinja2/testsuite/res/templates/syntaxerror.html
+++ b/pyload/lib/jinja2/testsuite/res/templates/syntaxerror.html
diff --git a/module/lib/jinja2/testsuite/res/templates/test.html b/pyload/lib/jinja2/testsuite/res/templates/test.html
index ba578e48b..ba578e48b 100644
--- a/module/lib/jinja2/testsuite/res/templates/test.html
+++ b/pyload/lib/jinja2/testsuite/res/templates/test.html
diff --git a/module/lib/jinja2/testsuite/security.py b/pyload/lib/jinja2/testsuite/security.py
index 246d0f073..246d0f073 100644
--- a/module/lib/jinja2/testsuite/security.py
+++ b/pyload/lib/jinja2/testsuite/security.py
diff --git a/module/lib/jinja2/testsuite/tests.py b/pyload/lib/jinja2/testsuite/tests.py
index 3ece7a8ff..3ece7a8ff 100644
--- a/module/lib/jinja2/testsuite/tests.py
+++ b/pyload/lib/jinja2/testsuite/tests.py
diff --git a/module/lib/jinja2/testsuite/utils.py b/pyload/lib/jinja2/testsuite/utils.py
index cab9b09a9..cab9b09a9 100644
--- a/module/lib/jinja2/testsuite/utils.py
+++ b/pyload/lib/jinja2/testsuite/utils.py
diff --git a/module/lib/jinja2/utils.py b/pyload/lib/jinja2/utils.py
index ddc47da0a..ddc47da0a 100644
--- a/module/lib/jinja2/utils.py
+++ b/pyload/lib/jinja2/utils.py
diff --git a/module/lib/jinja2/visitor.py b/pyload/lib/jinja2/visitor.py
index 413e7c309..413e7c309 100644
--- a/module/lib/jinja2/visitor.py
+++ b/pyload/lib/jinja2/visitor.py
diff --git a/module/lib/markupsafe/__init__.py b/pyload/lib/markupsafe/__init__.py
index 275540154..275540154 100644
--- a/module/lib/markupsafe/__init__.py
+++ b/pyload/lib/markupsafe/__init__.py
diff --git a/module/lib/markupsafe/_compat.py b/pyload/lib/markupsafe/_compat.py
index 62e5632ad..62e5632ad 100644
--- a/module/lib/markupsafe/_compat.py
+++ b/pyload/lib/markupsafe/_compat.py
diff --git a/module/lib/markupsafe/_constants.py b/pyload/lib/markupsafe/_constants.py
index 919bf03c5..919bf03c5 100644
--- a/module/lib/markupsafe/_constants.py
+++ b/pyload/lib/markupsafe/_constants.py
diff --git a/module/lib/markupsafe/_native.py b/pyload/lib/markupsafe/_native.py
index 5e83f10a1..5e83f10a1 100644
--- a/module/lib/markupsafe/_native.py
+++ b/pyload/lib/markupsafe/_native.py
diff --git a/module/lib/markupsafe/_speedups.c b/pyload/lib/markupsafe/_speedups.c
index f349febf2..f349febf2 100644
--- a/module/lib/markupsafe/_speedups.c
+++ b/pyload/lib/markupsafe/_speedups.c
diff --git a/module/lib/markupsafe/tests.py b/pyload/lib/markupsafe/tests.py
index 636993629..636993629 100644
--- a/module/lib/markupsafe/tests.py
+++ b/pyload/lib/markupsafe/tests.py
diff --git a/module/lib/rename_process.py b/pyload/lib/rename_process.py
index 2527cef39..2527cef39 100644
--- a/module/lib/rename_process.py
+++ b/pyload/lib/rename_process.py
diff --git a/module/lib/simplejson/__init__.py b/pyload/lib/simplejson/__init__.py
index a5c01379a..a5c01379a 100644
--- a/module/lib/simplejson/__init__.py
+++ b/pyload/lib/simplejson/__init__.py
diff --git a/module/lib/simplejson/compat.py b/pyload/lib/simplejson/compat.py
index a0af4a1cb..a0af4a1cb 100644
--- a/module/lib/simplejson/compat.py
+++ b/pyload/lib/simplejson/compat.py
diff --git a/module/lib/simplejson/decoder.py b/pyload/lib/simplejson/decoder.py
index 1a6c5d938..1a6c5d938 100644
--- a/module/lib/simplejson/decoder.py
+++ b/pyload/lib/simplejson/decoder.py
diff --git a/module/lib/simplejson/encoder.py b/pyload/lib/simplejson/encoder.py
index db18244ec..db18244ec 100644
--- a/module/lib/simplejson/encoder.py
+++ b/pyload/lib/simplejson/encoder.py
diff --git a/module/lib/simplejson/ordered_dict.py b/pyload/lib/simplejson/ordered_dict.py
index 87ad88824..87ad88824 100644
--- a/module/lib/simplejson/ordered_dict.py
+++ b/pyload/lib/simplejson/ordered_dict.py
diff --git a/module/lib/simplejson/scanner.py b/pyload/lib/simplejson/scanner.py
index 5abed357b..5abed357b 100644
--- a/module/lib/simplejson/scanner.py
+++ b/pyload/lib/simplejson/scanner.py
diff --git a/module/lib/simplejson/tool.py b/pyload/lib/simplejson/tool.py
index 062e8e2c1..062e8e2c1 100644
--- a/module/lib/simplejson/tool.py
+++ b/pyload/lib/simplejson/tool.py
diff --git a/module/lib/thrift/TSCons.py b/pyload/lib/thrift/TSCons.py
index da8d2833b..da8d2833b 100644
--- a/module/lib/thrift/TSCons.py
+++ b/pyload/lib/thrift/TSCons.py
diff --git a/module/lib/thrift/TSerialization.py b/pyload/lib/thrift/TSerialization.py
index 8a58d89df..8a58d89df 100644
--- a/module/lib/thrift/TSerialization.py
+++ b/pyload/lib/thrift/TSerialization.py
diff --git a/module/lib/thrift/TTornado.py b/pyload/lib/thrift/TTornado.py
index af309c3d9..af309c3d9 100644
--- a/module/lib/thrift/TTornado.py
+++ b/pyload/lib/thrift/TTornado.py
diff --git a/module/lib/thrift/Thrift.py b/pyload/lib/thrift/Thrift.py
index 9890af7e1..9890af7e1 100644
--- a/module/lib/thrift/Thrift.py
+++ b/pyload/lib/thrift/Thrift.py
diff --git a/module/lib/thrift/__init__.py b/pyload/lib/thrift/__init__.py
index 48d659c40..48d659c40 100644
--- a/module/lib/thrift/__init__.py
+++ b/pyload/lib/thrift/__init__.py
diff --git a/module/lib/thrift/protocol/TBase.py b/pyload/lib/thrift/protocol/TBase.py
index 6cbd5f39a..6cbd5f39a 100644
--- a/module/lib/thrift/protocol/TBase.py
+++ b/pyload/lib/thrift/protocol/TBase.py
diff --git a/module/lib/thrift/protocol/TBinaryProtocol.py b/pyload/lib/thrift/protocol/TBinaryProtocol.py
index 6fdd08c26..6fdd08c26 100644
--- a/module/lib/thrift/protocol/TBinaryProtocol.py
+++ b/pyload/lib/thrift/protocol/TBinaryProtocol.py
diff --git a/module/lib/thrift/protocol/TCompactProtocol.py b/pyload/lib/thrift/protocol/TCompactProtocol.py
index cdec60773..cdec60773 100644
--- a/module/lib/thrift/protocol/TCompactProtocol.py
+++ b/pyload/lib/thrift/protocol/TCompactProtocol.py
diff --git a/module/lib/thrift/protocol/TJSONProtocol.py b/pyload/lib/thrift/protocol/TJSONProtocol.py
index 3048197d4..3048197d4 100644
--- a/module/lib/thrift/protocol/TJSONProtocol.py
+++ b/pyload/lib/thrift/protocol/TJSONProtocol.py
diff --git a/module/lib/thrift/protocol/TProtocol.py b/pyload/lib/thrift/protocol/TProtocol.py
index dc2b095de..dc2b095de 100644
--- a/module/lib/thrift/protocol/TProtocol.py
+++ b/pyload/lib/thrift/protocol/TProtocol.py
diff --git a/module/lib/thrift/protocol/__init__.py b/pyload/lib/thrift/protocol/__init__.py
index 7eefb458a..7eefb458a 100644
--- a/module/lib/thrift/protocol/__init__.py
+++ b/pyload/lib/thrift/protocol/__init__.py
diff --git a/module/lib/thrift/protocol/fastbinary.c b/pyload/lib/thrift/protocol/fastbinary.c
index 2ce56603c..2ce56603c 100644
--- a/module/lib/thrift/protocol/fastbinary.c
+++ b/pyload/lib/thrift/protocol/fastbinary.c
diff --git a/module/lib/thrift/server/THttpServer.py b/pyload/lib/thrift/server/THttpServer.py
index be54bab94..be54bab94 100644
--- a/module/lib/thrift/server/THttpServer.py
+++ b/pyload/lib/thrift/server/THttpServer.py
diff --git a/module/lib/thrift/server/TNonblockingServer.py b/pyload/lib/thrift/server/TNonblockingServer.py
index fa478d01f..fa478d01f 100644
--- a/module/lib/thrift/server/TNonblockingServer.py
+++ b/pyload/lib/thrift/server/TNonblockingServer.py
diff --git a/module/lib/thrift/server/TProcessPoolServer.py b/pyload/lib/thrift/server/TProcessPoolServer.py
index 7a695a883..7a695a883 100644
--- a/module/lib/thrift/server/TProcessPoolServer.py
+++ b/pyload/lib/thrift/server/TProcessPoolServer.py
diff --git a/module/lib/thrift/server/TServer.py b/pyload/lib/thrift/server/TServer.py
index 2f24842c4..2f24842c4 100644
--- a/module/lib/thrift/server/TServer.py
+++ b/pyload/lib/thrift/server/TServer.py
diff --git a/module/lib/thrift/server/__init__.py b/pyload/lib/thrift/server/__init__.py
index 1bf6e254e..1bf6e254e 100644
--- a/module/lib/thrift/server/__init__.py
+++ b/pyload/lib/thrift/server/__init__.py
diff --git a/module/lib/thrift/transport/THttpClient.py b/pyload/lib/thrift/transport/THttpClient.py
index ea80a1ae8..ea80a1ae8 100644
--- a/module/lib/thrift/transport/THttpClient.py
+++ b/pyload/lib/thrift/transport/THttpClient.py
diff --git a/module/lib/thrift/transport/TSSLSocket.py b/pyload/lib/thrift/transport/TSSLSocket.py
index 81e098426..81e098426 100644
--- a/module/lib/thrift/transport/TSSLSocket.py
+++ b/pyload/lib/thrift/transport/TSSLSocket.py
diff --git a/module/lib/thrift/transport/TSocket.py b/pyload/lib/thrift/transport/TSocket.py
index 9e2b3849b..9e2b3849b 100644
--- a/module/lib/thrift/transport/TSocket.py
+++ b/pyload/lib/thrift/transport/TSocket.py
diff --git a/module/lib/thrift/transport/TTransport.py b/pyload/lib/thrift/transport/TTransport.py
index 4481371a6..4481371a6 100644
--- a/module/lib/thrift/transport/TTransport.py
+++ b/pyload/lib/thrift/transport/TTransport.py
diff --git a/module/lib/thrift/transport/TTwisted.py b/pyload/lib/thrift/transport/TTwisted.py
index 3ce3eb220..3ce3eb220 100644
--- a/module/lib/thrift/transport/TTwisted.py
+++ b/pyload/lib/thrift/transport/TTwisted.py
diff --git a/module/lib/thrift/transport/TZlibTransport.py b/pyload/lib/thrift/transport/TZlibTransport.py
index a2f42a5d2..a2f42a5d2 100644
--- a/module/lib/thrift/transport/TZlibTransport.py
+++ b/pyload/lib/thrift/transport/TZlibTransport.py
diff --git a/module/lib/thrift/transport/__init__.py b/pyload/lib/thrift/transport/__init__.py
index c9596d9a6..c9596d9a6 100644
--- a/module/lib/thrift/transport/__init__.py
+++ b/pyload/lib/thrift/transport/__init__.py
diff --git a/module/lib/wsgiserver/LICENSE.txt b/pyload/lib/wsgiserver/LICENSE.txt
index a15165ee2..a15165ee2 100644
--- a/module/lib/wsgiserver/LICENSE.txt
+++ b/pyload/lib/wsgiserver/LICENSE.txt
diff --git a/module/lib/wsgiserver/__init__.py b/pyload/lib/wsgiserver/__init__.py
index 1058b19ff..1058b19ff 100644
--- a/module/lib/wsgiserver/__init__.py
+++ b/pyload/lib/wsgiserver/__init__.py
diff --git a/module/network/Browser.py b/pyload/network/Browser.py
index e78d24688..e78d24688 100644
--- a/module/network/Browser.py
+++ b/pyload/network/Browser.py
diff --git a/module/network/Bucket.py b/pyload/network/Bucket.py
index a096d644a..a096d644a 100644
--- a/module/network/Bucket.py
+++ b/pyload/network/Bucket.py
diff --git a/module/network/CookieJar.py b/pyload/network/CookieJar.py
index a6ae090bc..a6ae090bc 100644
--- a/module/network/CookieJar.py
+++ b/pyload/network/CookieJar.py
diff --git a/pyload/network/HTTPChunk.py b/pyload/network/HTTPChunk.py
new file mode 100644
index 000000000..b9d2a5379
--- /dev/null
+++ b/pyload/network/HTTPChunk.py
@@ -0,0 +1,292 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+from os import remove, stat, fsync
+from os.path import exists
+from time import sleep
+from re import search
+from pyload.utils import fs_encode
+import codecs
+import pycurl
+
+from HTTPRequest import HTTPRequest
+
+class WrongFormat(Exception):
+ pass
+
+
+class ChunkInfo:
+ def __init__(self, name):
+ self.name = unicode(name)
+ self.size = 0
+ self.resume = False
+ self.chunks = []
+
+ def __repr__(self):
+ ret = "ChunkInfo: %s, %s\n" % (self.name, self.size)
+ for i, c in enumerate(self.chunks):
+ ret += "%s# %s\n" % (i, c[1])
+
+ return ret
+
+ def setSize(self, size):
+ self.size = int(size)
+
+ def addChunk(self, name, range):
+ self.chunks.append((name, range))
+
+ def clear(self):
+ self.chunks = []
+
+ def createChunks(self, chunks):
+ self.clear()
+ chunk_size = self.size / chunks
+
+ current = 0
+ for i in range(chunks):
+ end = self.size - 1 if (i == chunks - 1) else current + chunk_size
+ self.addChunk("%s.chunk%s" % (self.name, i), (current, end))
+ current += chunk_size + 1
+
+
+ def save(self):
+ fs_name = fs_encode("%s.chunks" % self.name)
+ fh = codecs.open(fs_name, "w", "utf_8")
+ fh.write("name:%s\n" % self.name)
+ fh.write("size:%s\n" % self.size)
+ for i, c in enumerate(self.chunks):
+ fh.write("#%d:\n" % i)
+ fh.write("\tname:%s\n" % c[0])
+ fh.write("\trange:%i-%i\n" % c[1])
+ fh.close()
+
+ @staticmethod
+ def load(name):
+ fs_name = fs_encode("%s.chunks" % name)
+ if not exists(fs_name):
+ raise IOError()
+ fh = codecs.open(fs_name, "r", "utf_8")
+ name = fh.readline()[:-1]
+ size = fh.readline()[:-1]
+ if name.startswith("name:") and size.startswith("size:"):
+ name = name[5:]
+ size = size[5:]
+ else:
+ fh.close()
+ raise WrongFormat()
+ ci = ChunkInfo(name)
+ ci.loaded = True
+ ci.setSize(size)
+ while True:
+ if not fh.readline(): #skip line
+ break
+ name = fh.readline()[1:-1]
+ range = fh.readline()[1:-1]
+ if name.startswith("name:") and range.startswith("range:"):
+ name = name[5:]
+ range = range[6:].split("-")
+ else:
+ raise WrongFormat()
+
+ ci.addChunk(name, (long(range[0]), long(range[1])))
+ fh.close()
+ return ci
+
+ def remove(self):
+ fs_name = fs_encode("%s.chunks" % self.name)
+ if exists(fs_name): remove(fs_name)
+
+ def getCount(self):
+ return len(self.chunks)
+
+ def getChunkName(self, index):
+ return self.chunks[index][0]
+
+ def getChunkRange(self, index):
+ return self.chunks[index][1]
+
+
+class HTTPChunk(HTTPRequest):
+ def __init__(self, id, parent, range=None, resume=False):
+ self.id = id
+ self.p = parent # HTTPDownload instance
+ self.range = range # tuple (start, end)
+ self.resume = resume
+ self.log = parent.log
+
+ self.size = range[1] - range[0] if range else -1
+ self.arrived = 0
+ self.lastURL = self.p.referer
+
+ self.c = pycurl.Curl()
+
+ self.header = ""
+ self.headerParsed = False #indicates if the header has been processed
+
+ self.fp = None #file handle
+
+ self.initHandle()
+ self.setInterface(self.p.options)
+
+ self.BOMChecked = False # check and remove byte order mark
+
+ self.rep = None
+
+ self.sleep = 0.000
+ self.lastSize = 0
+
+ def __repr__(self):
+ return "<HTTPChunk id=%d, size=%d, arrived=%d>" % (self.id, self.size, self.arrived)
+
+ @property
+ def cj(self):
+ return self.p.cj
+
+ def getHandle(self):
+ """ returns a Curl handle ready to use for perform/multiperform """
+
+ self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj)
+ self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody)
+ self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader)
+
+ # request all bytes, since some servers in russia seems to have a defect arihmetic unit
+
+ fs_name = fs_encode(self.p.info.getChunkName(self.id))
+ if self.resume:
+ self.fp = open(fs_name, "ab")
+ self.arrived = self.fp.tell()
+ if not self.arrived:
+ self.arrived = stat(fs_name).st_size
+
+ if self.range:
+ #do nothing if chunk already finished
+ if self.arrived + self.range[0] >= self.range[1]: return None
+
+ if self.id == len(self.p.info.chunks) - 1: #as last chunk dont set end range, so we get everything
+ range = "%i-" % (self.arrived + self.range[0])
+ else:
+ range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1))
+
+ self.log.debug("Chunked resume with range %s" % range)
+ self.c.setopt(pycurl.RANGE, range)
+ else:
+ self.log.debug("Resume File from %i" % self.arrived)
+ self.c.setopt(pycurl.RESUME_FROM, self.arrived)
+
+ else:
+ if self.range:
+ if self.id == len(self.p.info.chunks) - 1: # see above
+ range = "%i-" % self.range[0]
+ else:
+ range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1))
+
+ self.log.debug("Chunked with range %s" % range)
+ self.c.setopt(pycurl.RANGE, range)
+
+ self.fp = open(fs_name, "wb")
+
+ return self.c
+
+ def writeHeader(self, buf):
+ self.header += buf
+ #@TODO forward headers?, this is possibly unneeeded, when we just parse valid 200 headers
+ # as first chunk, we will parse the headers
+ if not self.range and self.header.endswith("\r\n\r\n"):
+ self.parseHeader()
+ elif not self.range and buf.startswith("150") and "data connection" in buf.lower(): #: ftp file size parsing
+ size = search(r"(\d+) bytes", buf)
+ if size:
+ self.p.size = int(size.group(1))
+ self.p.chunkSupport = True
+
+ self.headerParsed = True
+
+ def writeBody(self, buf):
+ #ignore BOM, it confuses unrar
+ if not self.BOMChecked:
+ if [ord(b) for b in buf[:3]] == [239, 187, 191]:
+ buf = buf[3:]
+ self.BOMChecked = True
+
+ size = len(buf)
+
+ self.arrived += size
+
+ self.fp.write(buf)
+
+ if self.p.bucket:
+ sleep(self.p.bucket.consumed(size))
+ else:
+ # Avoid small buffers, increasing sleep time slowly if buffer size gets smaller
+ # otherwise reduce sleep time percentual (values are based on tests)
+ # So in general cpu time is saved without reducing bandwith too much
+
+ if size < self.lastSize:
+ self.sleep += 0.002
+ else:
+ self.sleep *= 0.7
+
+ self.lastSize = size
+
+ sleep(self.sleep)
+
+ if self.range and self.arrived > self.size:
+ return 0 #close if we have enough data
+
+
+ def parseHeader(self):
+ """parse data from recieved header"""
+ for orgline in self.decodeResponse(self.header).splitlines():
+ line = orgline.strip().lower()
+ if line.startswith("accept-ranges") and "bytes" in line:
+ self.p.chunkSupport = True
+
+ if line.startswith("content-disposition") and "filename=" in line:
+ name = orgline.partition("filename=")[2]
+ name = name.replace('"', "").replace("'", "").replace(";", "").strip()
+ self.p.nameDisposition = name
+ self.log.debug("Content-Disposition: %s" % name)
+
+ if not self.resume and line.startswith("content-length"):
+ self.p.size = int(line.split(":")[1])
+
+ self.headerParsed = True
+
+ def stop(self):
+ """The download will not proceed after next call of writeBody"""
+ self.range = [0, 0]
+ self.size = 0
+
+ def resetRange(self):
+ """ Reset the range, so the download will load all data available """
+ self.range = None
+
+ def setRange(self, range):
+ self.range = range
+ self.size = range[1] - range[0]
+
+ def flushFile(self):
+ """ flush and close file """
+ self.fp.flush()
+ fsync(self.fp.fileno()) #make sure everything was written to disk
+ self.fp.close() #needs to be closed, or merging chunks will fail
+
+ def close(self):
+ """ closes everything, unusable after this """
+ if self.fp: self.fp.close()
+ self.c.close()
+ if hasattr(self, "p"): del self.p
diff --git a/pyload/network/HTTPDownload.py b/pyload/network/HTTPDownload.py
new file mode 100644
index 000000000..50c6b4bdf
--- /dev/null
+++ b/pyload/network/HTTPDownload.py
@@ -0,0 +1,325 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+from os import remove, fsync
+from os.path import dirname
+from time import sleep, time
+from shutil import move
+from logging import getLogger
+
+import pycurl
+
+from HTTPChunk import ChunkInfo, HTTPChunk
+from HTTPRequest import BadHeader
+
+from pyload.plugins.Plugin import Abort
+from pyload.utils import safe_join, fs_encode
+
+class HTTPDownload:
+ """ loads a url http + ftp """
+
+ def __init__(self, url, filename, get={}, post={}, referer=None, cj=None, bucket=None,
+ options={}, progressNotify=None, disposition=False):
+ self.url = url
+ self.filename = filename #complete file destination, not only name
+ self.get = get
+ self.post = post
+ self.referer = referer
+ self.cj = cj #cookiejar if cookies are needed
+ self.bucket = bucket
+ self.options = options
+ self.disposition = disposition
+ # all arguments
+
+ self.abort = False
+ self.size = 0
+ self.nameDisposition = None #will be parsed from content disposition
+
+ self.chunks = []
+
+ self.log = getLogger("log")
+
+ try:
+ self.info = ChunkInfo.load(filename)
+ self.info.resume = True #resume is only possible with valid info file
+ self.size = self.info.size
+ self.infoSaved = True
+ except IOError:
+ self.info = ChunkInfo(filename)
+
+ self.chunkSupport = None
+ self.m = pycurl.CurlMulti()
+
+ #needed for speed calculation
+ self.lastArrived = []
+ self.speeds = []
+ self.lastSpeeds = [0, 0]
+
+ self.progressNotify = progressNotify
+
+ @property
+ def speed(self):
+ last = [sum(x) for x in self.lastSpeeds if x]
+ return (sum(self.speeds) + sum(last)) / (1 + len(last))
+
+ @property
+ def arrived(self):
+ return sum([c.arrived for c in self.chunks])
+
+ @property
+ def percent(self):
+ if not self.size: return 0
+ return (self.arrived * 100) / self.size
+
+ def _copyChunks(self):
+ init = fs_encode(self.info.getChunkName(0)) #initial chunk name
+
+ if self.info.getCount() > 1:
+ fo = open(init, "rb+") #first chunkfile
+ for i in range(1, self.info.getCount()):
+ #input file
+ fo.seek(
+ self.info.getChunkRange(i - 1)[1] + 1) #seek to beginning of chunk, to get rid of overlapping chunks
+ fname = fs_encode("%s.chunk%d" % (self.filename, i))
+ fi = open(fname, "rb")
+ buf = 32 * 1024
+ while True: #copy in chunks, consumes less memory
+ data = fi.read(buf)
+ if not data:
+ break
+ fo.write(data)
+ fi.close()
+ if fo.tell() < self.info.getChunkRange(i)[1]:
+ fo.close()
+ remove(init)
+ self.info.remove() #there are probably invalid chunks
+ raise Exception("Downloaded content was smaller than expected. Try to reduce download connections.")
+ remove(fname) #remove chunk
+ fo.close()
+
+ if self.nameDisposition and self.disposition:
+ self.filename = safe_join(dirname(self.filename), self.nameDisposition)
+
+ move(init, fs_encode(self.filename))
+ self.info.remove() #remove info file
+
+ def download(self, chunks=1, resume=False):
+ """ returns new filename or None """
+
+ chunks = max(1, chunks)
+ resume = self.info.resume and resume
+
+ try:
+ self._download(chunks, resume)
+ except pycurl.error, e:
+ #code 33 - no resume
+ code = e.args[0]
+ if code == 33:
+ # try again without resume
+ self.log.debug("Errno 33 -> Restart without resume")
+
+ #remove old handles
+ for chunk in self.chunks:
+ self.closeChunk(chunk)
+
+ return self._download(chunks, False)
+ else:
+ raise
+ finally:
+ self.close()
+
+ if self.nameDisposition and self.disposition: return self.nameDisposition
+ return None
+
+ def _download(self, chunks, resume):
+ if not resume:
+ self.info.clear()
+ self.info.addChunk("%s.chunk0" % self.filename, (0, 0)) #create an initial entry
+
+ self.chunks = []
+
+ init = HTTPChunk(0, self, None, resume) #initial chunk that will load complete file (if needed)
+
+ self.chunks.append(init)
+ self.m.add_handle(init.getHandle())
+
+ lastFinishCheck = 0
+ lastTimeCheck = 0
+ chunksDone = set() # list of curl handles that are finished
+ chunksCreated = False
+ done = False
+ if self.info.getCount() > 1: # This is a resume, if we were chunked originally assume still can
+ self.chunkSupport = True
+
+ while 1:
+ #need to create chunks
+ if not chunksCreated and self.chunkSupport and self.size: #will be setted later by first chunk
+
+ if not resume:
+ self.info.setSize(self.size)
+ self.info.createChunks(chunks)
+ self.info.save()
+
+ chunks = self.info.getCount()
+
+ init.setRange(self.info.getChunkRange(0))
+
+ for i in range(1, chunks):
+ c = HTTPChunk(i, self, self.info.getChunkRange(i), resume)
+
+ handle = c.getHandle()
+ if handle:
+ self.chunks.append(c)
+ self.m.add_handle(handle)
+ else:
+ #close immediatly
+ self.log.debug("Invalid curl handle -> closed")
+ c.close()
+
+ chunksCreated = True
+
+ while 1:
+ ret, num_handles = self.m.perform()
+ if ret != pycurl.E_CALL_MULTI_PERFORM:
+ break
+
+ t = time()
+
+ # reduce these calls
+ while lastFinishCheck + 0.5 < t:
+ # list of failed curl handles
+ failed = []
+ ex = None # save only last exception, we can only raise one anyway
+
+ num_q, ok_list, err_list = self.m.info_read()
+ for c in ok_list:
+ chunk = self.findChunk(c)
+ try: # check if the header implies success, else add it to failed list
+ chunk.verifyHeader()
+ except BadHeader, e:
+ self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e)))
+ failed.append(chunk)
+ ex = e
+ else:
+ chunksDone.add(c)
+
+ for c in err_list:
+ curl, errno, msg = c
+ chunk = self.findChunk(curl)
+ #test if chunk was finished
+ if errno != 23 or "0 !=" not in msg:
+ failed.append(chunk)
+ ex = pycurl.error(errno, msg)
+ self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(ex)))
+ continue
+
+ try: # check if the header implies success, else add it to failed list
+ chunk.verifyHeader()
+ except BadHeader, e:
+ self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e)))
+ failed.append(chunk)
+ ex = e
+ else:
+ chunksDone.add(curl)
+ if not num_q: # no more infos to get
+
+ # check if init is not finished so we reset download connections
+ # note that other chunks are closed and downloaded with init too
+ if failed and init not in failed and init.c not in chunksDone:
+ self.log.error(_("Download chunks failed, fallback to single connection | %s" % (str(ex))))
+
+ #list of chunks to clean and remove
+ to_clean = filter(lambda x: x is not init, self.chunks)
+ for chunk in to_clean:
+ self.closeChunk(chunk)
+ self.chunks.remove(chunk)
+ remove(fs_encode(self.info.getChunkName(chunk.id)))
+
+ #let first chunk load the rest and update the info file
+ init.resetRange()
+ self.info.clear()
+ self.info.addChunk("%s.chunk0" % self.filename, (0, self.size))
+ self.info.save()
+ elif failed:
+ raise ex
+
+ lastFinishCheck = t
+
+ if len(chunksDone) >= len(self.chunks):
+ if len(chunksDone) > len(self.chunks):
+ self.log.warning("Finished download chunks size incorrect, please report bug.")
+ done = True #all chunks loaded
+
+ break
+
+ if done:
+ break #all chunks loaded
+
+ # calc speed once per second, averaging over 3 seconds
+ if lastTimeCheck + 1 < t:
+ diff = [c.arrived - (self.lastArrived[i] if len(self.lastArrived) > i else 0) for i, c in
+ enumerate(self.chunks)]
+
+ self.lastSpeeds[1] = self.lastSpeeds[0]
+ self.lastSpeeds[0] = self.speeds
+ self.speeds = [float(a) / (t - lastTimeCheck) for a in diff]
+ self.lastArrived = [c.arrived for c in self.chunks]
+ lastTimeCheck = t
+ self.updateProgress()
+
+ if self.abort:
+ raise Abort()
+
+ #sleep(0.003) #supress busy waiting - limits dl speed to (1 / x) * buffersize
+ self.m.select(1)
+
+ for chunk in self.chunks:
+ chunk.flushFile() #make sure downloads are written to disk
+
+ self._copyChunks()
+
+ def updateProgress(self):
+ if self.progressNotify:
+ self.progressNotify(self.percent)
+
+ def findChunk(self, handle):
+ """ linear search to find a chunk (should be ok since chunk size is usually low) """
+ for chunk in self.chunks:
+ if chunk.c == handle: return chunk
+
+ def closeChunk(self, chunk):
+ try:
+ self.m.remove_handle(chunk.c)
+ except pycurl.error, e:
+ self.log.debug("Error removing chunk: %s" % str(e))
+ finally:
+ chunk.close()
+
+ def close(self):
+ """ cleanup """
+ for chunk in self.chunks:
+ self.closeChunk(chunk)
+
+ self.chunks = []
+ if hasattr(self, "m"):
+ self.m.close()
+ del self.m
+ if hasattr(self, "cj"):
+ del self.cj
+ if hasattr(self, "info"):
+ del self.info
diff --git a/pyload/network/HTTPRequest.py b/pyload/network/HTTPRequest.py
new file mode 100644
index 000000000..66e355b77
--- /dev/null
+++ b/pyload/network/HTTPRequest.py
@@ -0,0 +1,303 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+import pycurl
+
+from codecs import getincrementaldecoder, lookup, BOM_UTF8
+from urllib import quote, urlencode
+from httplib import responses
+from logging import getLogger
+from cStringIO import StringIO
+
+from pyload.plugins.Plugin import Abort
+
+def myquote(url):
+ return quote(url.encode('utf_8') if isinstance(url, unicode) else url, safe="%/:=&?~#+!$,;'@()*[]")
+
+def myurlencode(data):
+ data = dict(data)
+ return urlencode(dict((x.encode('utf_8') if isinstance(x, unicode) else x, \
+ y.encode('utf_8') if isinstance(y, unicode) else y ) for x, y in data.iteritems()))
+
+bad_headers = range(400, 404) + range(405, 418) + range(500, 506)
+
+class BadHeader(Exception):
+ def __init__(self, code, content=""):
+ Exception.__init__(self, "Bad server response: %s %s" % (code, responses[int(code)]))
+ self.code = code
+ self.content = content
+
+
+class HTTPRequest:
+ def __init__(self, cookies=None, options=None):
+ self.c = pycurl.Curl()
+ self.rep = StringIO()
+
+ self.cj = cookies #cookiejar
+
+ self.lastURL = None
+ self.lastEffectiveURL = None
+ self.abort = False
+ self.code = 0 # last http code
+
+ self.header = ""
+
+ self.headers = [] #temporary request header
+
+ self.initHandle()
+ self.setInterface(options)
+
+ self.c.setopt(pycurl.WRITEFUNCTION, self.write)
+ self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader)
+
+ self.log = getLogger("log")
+
+
+ def initHandle(self):
+ """ sets common options to curl handle """
+ self.c.setopt(pycurl.FOLLOWLOCATION, 1)
+ self.c.setopt(pycurl.MAXREDIRS, 5)
+ self.c.setopt(pycurl.CONNECTTIMEOUT, 30)
+ self.c.setopt(pycurl.NOSIGNAL, 1)
+ self.c.setopt(pycurl.NOPROGRESS, 1)
+ if hasattr(pycurl, "AUTOREFERER"):
+ self.c.setopt(pycurl.AUTOREFERER, 1)
+ self.c.setopt(pycurl.SSL_VERIFYPEER, 0)
+ self.c.setopt(pycurl.LOW_SPEED_TIME, 30)
+ self.c.setopt(pycurl.LOW_SPEED_LIMIT, 5)
+
+ #self.c.setopt(pycurl.VERBOSE, 1)
+
+ self.c.setopt(pycurl.USERAGENT,
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64;en; rv:5.0) Gecko/20110619 Firefox/5.0")
+ if pycurl.version_info()[7]:
+ self.c.setopt(pycurl.ENCODING, "gzip, deflate")
+ self.c.setopt(pycurl.HTTPHEADER, ["Accept: */*",
+ "Accept-Language: en-US, en",
+ "Accept-Charset: ISO-8859-1, utf-8;q=0.7,*;q=0.7",
+ "Connection: keep-alive",
+ "Keep-Alive: 300",
+ "Expect:"])
+
+ def setInterface(self, options):
+
+ interface, proxy, ipv6 = options["interface"], options["proxies"], options["ipv6"]
+
+ if interface and interface.lower() != "none":
+ self.c.setopt(pycurl.INTERFACE, str(interface))
+
+ if proxy:
+ if proxy["type"] == "socks4":
+ self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS4)
+ elif proxy["type"] == "socks5":
+ self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
+ else:
+ self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP)
+
+ self.c.setopt(pycurl.PROXY, str(proxy["address"]))
+ self.c.setopt(pycurl.PROXYPORT, proxy["port"])
+
+ if proxy["username"]:
+ self.c.setopt(pycurl.PROXYUSERPWD, str("%s:%s" % (proxy["username"], proxy["password"])))
+
+ if ipv6:
+ self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_WHATEVER)
+ else:
+ self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_V4)
+
+ if "auth" in options:
+ self.c.setopt(pycurl.USERPWD, str(options["auth"]))
+
+ if "timeout" in options:
+ self.c.setopt(pycurl.LOW_SPEED_TIME, options["timeout"])
+
+
+ def addCookies(self):
+ """ put cookies from curl handle to cj """
+ if self.cj:
+ self.cj.addCookies(self.c.getinfo(pycurl.INFO_COOKIELIST))
+
+ def getCookies(self):
+ """ add cookies from cj to curl handle """
+ if self.cj:
+ for c in self.cj.getCookies():
+ self.c.setopt(pycurl.COOKIELIST, c)
+ return
+
+ def clearCookies(self):
+ self.c.setopt(pycurl.COOKIELIST, "")
+
+ def setRequestContext(self, url, get, post, referer, cookies, multipart=False):
+ """ sets everything needed for the request """
+
+ url = myquote(url)
+
+ if get:
+ get = urlencode(get)
+ url = "%s?%s" % (url, get)
+
+ self.c.setopt(pycurl.URL, url)
+ self.c.lastUrl = url
+
+ if post:
+ self.c.setopt(pycurl.POST, 1)
+ if not multipart:
+ if type(post) == unicode:
+ post = str(post) #unicode not allowed
+ elif type(post) == str:
+ pass
+ else:
+ post = myurlencode(post)
+
+ self.c.setopt(pycurl.POSTFIELDS, post)
+ else:
+ post = [(x, y.encode('utf8') if type(y) == unicode else y ) for x, y in post.iteritems()]
+ self.c.setopt(pycurl.HTTPPOST, post)
+ else:
+ self.c.setopt(pycurl.POST, 0)
+
+ if referer and self.lastURL:
+ self.c.setopt(pycurl.REFERER, str(self.lastURL))
+
+ if cookies:
+ self.c.setopt(pycurl.COOKIEFILE, "")
+ self.c.setopt(pycurl.COOKIEJAR, "")
+ self.getCookies()
+
+
+ def load(self, url, get={}, post={}, referer=True, cookies=True, just_header=False, multipart=False, decode=False):
+ """ load and returns a given page """
+
+ self.setRequestContext(url, get, post, referer, cookies, multipart)
+
+ self.header = ""
+
+ self.c.setopt(pycurl.HTTPHEADER, self.headers)
+
+ if just_header:
+ self.c.setopt(pycurl.FOLLOWLOCATION, 0)
+ self.c.setopt(pycurl.NOBODY, 1)
+ if post:
+ self.c.setopt(pycurl.POST, 1)
+ else:
+ self.c.setopt(pycurl.HTTPGET, 1)
+ self.c.perform()
+ rep = self.header
+
+ self.c.setopt(pycurl.FOLLOWLOCATION, 1)
+ self.c.setopt(pycurl.NOBODY, 0)
+
+ else:
+ self.c.perform()
+ rep = self.getResponse()
+
+ self.c.setopt(pycurl.POSTFIELDS, "")
+ self.lastEffectiveURL = self.c.getinfo(pycurl.EFFECTIVE_URL)
+ self.code = self.verifyHeader()
+
+ self.addCookies()
+
+ if decode:
+ rep = self.decodeResponse(rep)
+
+ return rep
+
+ def verifyHeader(self):
+ """ raise an exceptions on bad headers """
+ code = int(self.c.getinfo(pycurl.RESPONSE_CODE))
+ if code in bad_headers:
+ #404 will NOT raise an exception
+ raise BadHeader(code, self.getResponse())
+ return code
+
+ def checkHeader(self):
+ """ check if header indicates failure"""
+ return int(self.c.getinfo(pycurl.RESPONSE_CODE)) not in bad_headers
+
+ def getResponse(self):
+ """ retrieve response from string io """
+ if self.rep is None: return ""
+ value = self.rep.getvalue()
+ self.rep.close()
+ self.rep = StringIO()
+ return value
+
+ def decodeResponse(self, rep):
+ """ decode with correct encoding, relies on header """
+ header = self.header.splitlines()
+ encoding = "utf8" # default encoding
+
+ for line in header:
+ line = line.lower().replace(" ", "")
+ if not line.startswith("content-type:") or\
+ ("text" not in line and "application" not in line):
+ continue
+
+ none, delemiter, charset = line.rpartition("charset=")
+ if delemiter:
+ charset = charset.split(";")
+ if charset:
+ encoding = charset[0]
+
+ try:
+ #self.log.debug("Decoded %s" % encoding )
+ if lookup(encoding).name == 'utf-8' and rep.startswith(BOM_UTF8):
+ encoding = 'utf-8-sig'
+
+ decoder = getincrementaldecoder(encoding)("replace")
+ rep = decoder.decode(rep, True)
+
+ #TODO: html_unescape as default
+
+ except LookupError:
+ self.log.debug("No Decoder foung for %s" % encoding)
+ except Exception:
+ self.log.debug("Error when decoding string from %s." % encoding)
+
+ return rep
+
+ def write(self, buf):
+ """ writes response """
+ if self.rep.tell() > 1000000 or self.abort:
+ rep = self.getResponse()
+ if self.abort: raise Abort()
+ f = open("response.dump", "wb")
+ f.write(rep)
+ f.close()
+ raise Exception("Loaded Url exceeded limit")
+
+ self.rep.write(buf)
+
+ def writeHeader(self, buf):
+ """ writes header """
+ self.header += buf
+
+ def putHeader(self, name, value):
+ self.headers.append("%s: %s" % (name, value))
+
+ def clearHeaders(self):
+ self.headers = []
+
+ def close(self):
+ """ cleanup, unusable after this """
+ self.rep.close()
+ if hasattr(self, "cj"):
+ del self.cj
+ if hasattr(self, "c"):
+ self.c.close()
+ del self.c
diff --git a/module/network/RequestFactory.py b/pyload/network/RequestFactory.py
index 6811b11d8..6811b11d8 100644
--- a/module/network/RequestFactory.py
+++ b/pyload/network/RequestFactory.py
diff --git a/pyload/network/XDCCRequest.py b/pyload/network/XDCCRequest.py
new file mode 100644
index 000000000..9ae52f72b
--- /dev/null
+++ b/pyload/network/XDCCRequest.py
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: jeix
+"""
+
+import socket
+import re
+
+from os import remove
+from os.path import exists
+
+from time import time
+
+import struct
+from select import select
+
+from pyload.plugins.Plugin import Abort
+
+
+class XDCCRequest:
+ def __init__(self, timeout=30, proxies={}):
+
+ self.proxies = proxies
+ self.timeout = timeout
+
+ self.filesize = 0
+ self.recv = 0
+ self.speed = 0
+
+ self.abort = False
+
+ def createSocket(self):
+ # proxytype = None
+ # proxy = None
+ # if self.proxies.has_key("socks5"):
+ # proxytype = socks.PROXY_TYPE_SOCKS5
+ # proxy = self.proxies["socks5"]
+ # elif self.proxies.has_key("socks4"):
+ # proxytype = socks.PROXY_TYPE_SOCKS4
+ # proxy = self.proxies["socks4"]
+ # if proxytype:
+ # sock = socks.socksocket()
+ # t = _parse_proxy(proxy)
+ # sock.setproxy(proxytype, addr=t[3].split(":")[0], port=int(t[3].split(":")[1]), username=t[1], password=t[2])
+ # else:
+ # sock = socket.socket()
+ # return sock
+
+ return socket.socket()
+
+ def download(self, ip, port, filename, irc, progressNotify=None):
+
+ ircbuffer = ""
+ lastUpdate = time()
+ cumRecvLen = 0
+
+ dccsock = self.createSocket()
+
+ dccsock.settimeout(self.timeout)
+ dccsock.connect((ip, port))
+
+ if exists(filename):
+ i = 0
+ nameParts = filename.rpartition(".")
+ while True:
+ newfilename = "%s-%d%s%s" % (nameParts[0], i, nameParts[1], nameParts[2])
+ i += 1
+
+ if not exists(newfilename):
+ filename = newfilename
+ break
+
+ fh = open(filename, "wb")
+
+ # recv loop for dcc socket
+ while True:
+ if self.abort:
+ dccsock.close()
+ fh.close()
+ remove(filename)
+ raise Abort()
+
+ self._keepAlive(irc, ircbuffer)
+
+ data = dccsock.recv(4096)
+ dataLen = len(data)
+ self.recv += dataLen
+
+ cumRecvLen += dataLen
+
+ now = time()
+ timespan = now - lastUpdate
+ if timespan > 1:
+ self.speed = cumRecvLen / timespan
+ cumRecvLen = 0
+ lastUpdate = now
+
+ if progressNotify:
+ progressNotify(self.percent)
+
+ if not data:
+ break
+
+ fh.write(data)
+
+ # acknowledge data by sending number of recceived bytes
+ dccsock.send(struct.pack('!I', self.recv))
+
+ dccsock.close()
+ fh.close()
+
+ return filename
+
+ def _keepAlive(self, sock, readbuffer):
+ fdset = select([sock], [], [], 0)
+ if sock not in fdset[0]:
+ return
+
+ readbuffer += sock.recv(1024)
+ temp = readbuffer.split("\n")
+ readbuffer = temp.pop()
+
+ for line in temp:
+ line = line.rstrip()
+ first = line.split()
+ if first[0] == "PING":
+ sock.send("PONG %s\r\n" % first[1])
+
+ def abortDownloads(self):
+ self.abort = True
+
+ @property
+ def size(self):
+ return self.filesize
+
+ @property
+ def arrived(self):
+ return self.recv
+
+ @property
+ def percent(self):
+ if not self.filesize: return 0
+ return (self.recv * 100) / self.filesize
+
+ def close(self):
+ pass
diff --git a/module/network/__init__.py b/pyload/network/__init__.py
index 8b1378917..8b1378917 100644
--- a/module/network/__init__.py
+++ b/pyload/network/__init__.py
diff --git a/pyload/plugins/Account.py b/pyload/plugins/Account.py
new file mode 100644
index 000000000..12ea494a0
--- /dev/null
+++ b/pyload/plugins/Account.py
@@ -0,0 +1,281 @@
+# -*- coding: utf-8 -*-
+
+from random import choice
+from time import time
+from traceback import print_exc
+from threading import RLock
+
+from pyload.plugins.Plugin import Base
+from pyload.utils import compare_time, parseFileSize, lock
+
+
+class WrongPassword(Exception):
+ pass
+
+
+class Account(Base):
+ """
+ Base class for every Account plugin.
+ Just overwrite `login` and cookies will be stored and account becomes accessible in\
+ associated hoster plugin. Plugin should also provide `loadAccountInfo`
+ """
+ __name__ = "Account"
+ __type__ = "account"
+ __version__ = "0.3"
+
+ __description__ = """Base account plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+ #: after that time (in minutes) pyload will relogin the account
+ login_timeout = 10 * 60
+ #: after that time (in minutes) account data will be reloaded
+ info_threshold = 10 * 60
+
+
+ def __init__(self, manager, accounts):
+ Base.__init__(self, manager.core)
+
+ self.manager = manager
+ self.accounts = {}
+ self.infos = {} # cache for account information
+ self.lock = RLock()
+
+ self.timestamps = {}
+ self.setAccounts(accounts)
+ self.init()
+
+ def init(self):
+ pass
+
+ def login(self, user, data, req):
+ """login into account, the cookies will be saved so user can be recognized
+
+ :param user: loginname
+ :param data: data dictionary
+ :param req: `Request` instance
+ """
+ pass
+
+ @lock
+ def _login(self, user, data):
+ # set timestamp for login
+ self.timestamps[user] = time()
+
+ req = self.getAccountRequest(user)
+ try:
+ self.login(user, data, req)
+ except WrongPassword:
+ self.logWarning(
+ _("Could not login with account %(user)s | %(msg)s") % {"user": user
+ , "msg": _("Wrong Password")})
+ success = data['valid'] = False
+ except Exception, e:
+ self.logWarning(
+ _("Could not login with account %(user)s | %(msg)s") % {"user": user
+ , "msg": e})
+ success = data['valid'] = False
+ if self.core.debug:
+ print_exc()
+ else:
+ success = True
+ finally:
+ if req:
+ req.close()
+ return success
+
+ def relogin(self, user):
+ req = self.getAccountRequest(user)
+ if req:
+ req.cj.clear()
+ req.close()
+ if user in self.infos:
+ del self.infos[user] #delete old information
+
+ return self._login(user, self.accounts[user])
+
+ def setAccounts(self, accounts):
+ self.accounts = accounts
+ for user, data in self.accounts.iteritems():
+ self._login(user, data)
+ self.infos[user] = {}
+
+ def updateAccounts(self, user, password=None, options={}):
+ """ updates account and return true if anything changed """
+
+ if user in self.accounts:
+ self.accounts[user]['valid'] = True #do not remove or accounts will not login
+ if password:
+ self.accounts[user]['password'] = password
+ self.relogin(user)
+ return True
+ if options:
+ before = self.accounts[user]['options']
+ self.accounts[user]['options'].update(options)
+ return self.accounts[user]['options'] != before
+ else:
+ self.accounts[user] = {"password": password, "options": options, "valid": True}
+ self._login(user, self.accounts[user])
+ return True
+
+ def removeAccount(self, user):
+ if user in self.accounts:
+ del self.accounts[user]
+ if user in self.infos:
+ del self.infos[user]
+ if user in self.timestamps:
+ del self.timestamps[user]
+
+ @lock
+ def getAccountInfo(self, name, force=False):
+ """retrieve account infos for an user, do **not** overwrite this method!\\
+ just use it to retrieve infos in hoster plugins. see `loadAccountInfo`
+
+ :param name: username
+ :param force: reloads cached account information
+ :return: dictionary with information
+ """
+ data = Account.loadAccountInfo(self, name)
+
+ if force or name not in self.infos:
+ self.logDebug("Get Account Info for %s" % name)
+ req = self.getAccountRequest(name)
+
+ try:
+ infos = self.loadAccountInfo(name, req)
+ if not type(infos) == dict:
+ raise Exception("Wrong return format")
+ except Exception, e:
+ infos = {"error": str(e)}
+
+ if req: req.close()
+
+ self.logDebug("Account Info: %s" % str(infos))
+
+ infos['timestamp'] = time()
+ self.infos[name] = infos
+ elif "timestamp" in self.infos[name] and self.infos[name][
+ "timestamp"] + self.info_threshold * 60 < time():
+ self.logDebug("Reached timeout for account data")
+ self.scheduleRefresh(name)
+
+ data.update(self.infos[name])
+ return data
+
+ def isPremium(self, user):
+ info = self.getAccountInfo(user)
+ return info['premium']
+
+ def loadAccountInfo(self, name, req=None):
+ """this should be overwritten in account plugin,\
+ and retrieving account information for user
+
+ :param name:
+ :param req: `Request` instance
+ :return:
+ """
+ return {
+ "validuntil": None, # -1 for unlimited
+ "login": name,
+ #"password": self.accounts[name]['password'], #@XXX: security
+ "options": self.accounts[name]['options'],
+ "valid": self.accounts[name]['valid'],
+ "trafficleft": None, # in kb, -1 for unlimited
+ "maxtraffic": None,
+ "premium": True, #useful for free accounts
+ "timestamp": 0, #time this info was retrieved
+ "type": self.__name__,
+ }
+
+ def getAllAccounts(self, force=False):
+ return [self.getAccountInfo(user, force) for user, data in self.accounts.iteritems()]
+
+ def getAccountRequest(self, user=None):
+ if not user:
+ user, data = self.selectAccount()
+ if not user:
+ return None
+
+ req = self.core.requestFactory.getRequest(self.__name__, user)
+ return req
+
+ def getAccountCookies(self, user=None):
+ if not user:
+ user, data = self.selectAccount()
+ if not user:
+ return None
+
+ cj = self.core.requestFactory.getCookieJar(self.__name__, user)
+ return cj
+
+ def getAccountData(self, user):
+ return self.accounts[user]
+
+ def selectAccount(self):
+ """ returns an valid account name and data"""
+ usable = []
+ for user, data in self.accounts.iteritems():
+ if not data['valid']: continue
+
+ if "time" in data['options'] and data['options']['time']:
+ time_data = ""
+ try:
+ time_data = data['options']['time'][0]
+ start, end = time_data.split("-")
+ if not compare_time(start.split(":"), end.split(":")):
+ continue
+ except:
+ self.logWarning(_("Your Time %s has wrong format, use: 1:22-3:44") % time_data)
+
+ if user in self.infos:
+ if "validuntil" in self.infos[user]:
+ if self.infos[user]['validuntil'] > 0 and time() > self.infos[user]['validuntil']:
+ continue
+ if "trafficleft" in self.infos[user]:
+ if self.infos[user]['trafficleft'] == 0:
+ continue
+
+ usable.append((user, data))
+
+ if not usable: return None, None
+ return choice(usable)
+
+ def canUse(self):
+ return False if self.selectAccount() == (None, None) else True
+
+ def parseTraffic(self, string): #returns kbyte
+ return parseFileSize(string) / 1024
+
+ def wrongPassword(self):
+ raise WrongPassword
+
+ def empty(self, user):
+ if user in self.infos:
+ self.logWarning(_("Account %s has not enough traffic, checking again in 30min") % user)
+
+ self.infos[user].update({"trafficleft": 0})
+ self.scheduleRefresh(user, 30 * 60)
+
+ def expired(self, user):
+ if user in self.infos:
+ self.logWarning(_("Account %s is expired, checking again in 1h") % user)
+
+ self.infos[user].update({"validuntil": time() - 1})
+ self.scheduleRefresh(user, 60 * 60)
+
+ def scheduleRefresh(self, user, time=0, force=True):
+ """ add task to refresh account info to sheduler """
+ self.logDebug("Scheduled Account refresh for %s in %s seconds." % (user, time))
+ self.core.scheduler.addJob(time, self.getAccountInfo, [user, force])
+
+ @lock
+ def checkLogin(self, user):
+ """ checks if user is still logged in """
+ if user in self.timestamps:
+ if self.login_timeout > 0 and self.timestamps[user] + self.login_timeout * 60 < time():
+ self.logDebug("Reached login timeout for %s" % user)
+ return self.relogin(user)
+ else:
+ return True
+ else:
+ return False
diff --git a/pyload/plugins/AccountManager.py b/pyload/plugins/AccountManager.py
new file mode 100644
index 000000000..67909072f
--- /dev/null
+++ b/pyload/plugins/AccountManager.py
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+
+from os.path import exists
+from shutil import copy
+
+from threading import Lock
+
+from pyload.PullEvents import AccountUpdateEvent
+from pyload.utils import chmod, lock
+
+ACC_VERSION = 1
+
+
+class AccountManager:
+ """manages all accounts"""
+
+ #--------------------------------------------------------------------------
+ def __init__(self, core):
+ """Constructor"""
+
+ self.core = core
+ self.lock = Lock()
+
+ self.initPlugins()
+ self.saveAccounts() # save to add categories to conf
+
+ def initPlugins(self):
+ self.accounts = {} # key = ( plugin )
+ self.plugins = {}
+
+ self.initAccountPlugins()
+ self.loadAccounts()
+
+ def getAccountPlugin(self, plugin):
+ """get account instance for plugin or None if anonymous"""
+ if plugin in self.accounts:
+ if plugin not in self.plugins:
+ try:
+ self.plugins[plugin] = self.core.pluginManager.loadClass("accounts", plugin)(self, self.accounts[plugin])
+ except TypeError: # The account class no longer exists (blacklisted plugin). Skipping the account to avoid crash
+ return None
+
+ return self.plugins[plugin]
+ else:
+ return None
+
+ def getAccountPlugins(self):
+ """ get all account instances"""
+
+ plugins = []
+ for plugin in self.accounts.keys():
+ plugins.append(self.getAccountPlugin(plugin))
+
+ return plugins
+
+ #--------------------------------------------------------------------------
+ def loadAccounts(self):
+ """loads all accounts available"""
+
+ if not exists("accounts.conf"):
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION))
+ f.close()
+
+ f = open("accounts.conf", "rb")
+ content = f.readlines()
+ version = content[0].split(":")[1].strip() if content else ""
+ f.close()
+
+ if not version or int(version) < ACC_VERSION:
+ copy("accounts.conf", "accounts.backup")
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION))
+ f.close()
+ self.core.log.warning(_("Account settings deleted, due to new config format."))
+ return
+
+ plugin = ""
+ name = ""
+
+ for line in content[1:]:
+ line = line.strip()
+
+ if not line: continue
+ if line.startswith("#"): continue
+ if line.startswith("version"): continue
+
+ if line.endswith(":") and line.count(":") == 1:
+ plugin = line[:-1]
+ self.accounts[plugin] = {}
+
+ elif line.startswith("@"):
+ try:
+ option = line[1:].split()
+ self.accounts[plugin][name]['options'][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:])
+ except:
+ pass
+
+ elif ":" in line:
+ name, sep, pw = line.partition(":")
+ self.accounts[plugin][name] = {"password": pw, "options": {}, "valid": True}
+
+ #--------------------------------------------------------------------------
+ def saveAccounts(self):
+ """save all account information"""
+
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION) + "\n")
+
+ for plugin, accounts in self.accounts.iteritems():
+ f.write("\n")
+ f.write(plugin+":\n")
+
+ for name,data in accounts.iteritems():
+ f.write("\n\t%s:%s\n" % (name,data['password']) )
+ if data['options']:
+ for option, values in data['options'].iteritems():
+ f.write("\t@%s %s\n" % (option, " ".join(values)))
+
+ f.close()
+ chmod(f.name, 0600)
+
+ #--------------------------------------------------------------------------
+ def initAccountPlugins(self):
+ """init names"""
+ for name in self.core.pluginManager.getAccountPlugins():
+ self.accounts[name] = {}
+
+ @lock
+ def updateAccount(self, plugin , user, password=None, options={}):
+ """add or update account"""
+ if plugin in self.accounts:
+ p = self.getAccountPlugin(plugin)
+ updated = p.updateAccounts(user, password, options)
+ #since accounts is a ref in plugin self.accounts doesnt need to be updated here
+
+ self.saveAccounts()
+ if updated: p.scheduleRefresh(user, force=False)
+
+ @lock
+ def removeAccount(self, plugin, user):
+ """remove account"""
+
+ if plugin in self.accounts:
+ p = self.getAccountPlugin(plugin)
+ p.removeAccount(user)
+
+ self.saveAccounts()
+
+ @lock
+ def getAccountInfos(self, force=True, refresh=False):
+ data = {}
+
+ if refresh:
+ self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos)
+ force = False
+
+ for p in self.accounts.keys():
+ if self.accounts[p]:
+ p = self.getAccountPlugin(p)
+ if p:
+ data[p.__name__] = p.getAllAccounts(force)
+ else: # When an account has been skipped, p is None
+ data[p] = []
+ else:
+ data[p] = []
+ e = AccountUpdateEvent()
+ self.core.pullManager.addEvent(e)
+ return data
+
+ def sendChange(self):
+ e = AccountUpdateEvent()
+ self.core.pullManager.addEvent(e)
diff --git a/pyload/plugins/Container.py b/pyload/plugins/Container.py
new file mode 100644
index 000000000..747232c18
--- /dev/null
+++ b/pyload/plugins/Container.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from os import remove
+from os.path import basename, exists
+
+from pyload.plugins.Crypter import Crypter
+from pyload.utils import safe_join
+
+
+class Container(Crypter):
+ __name__ = "Container"
+ __type__ = "container"
+ __version__ = "0.1"
+
+ __pattern__ = None
+
+ __description__ = """Base container decrypter plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def preprocessing(self, thread):
+ """prepare"""
+
+ self.setup()
+ self.thread = thread
+
+ self.loadToDisk()
+
+ self.decrypt(self.pyfile)
+ self.deleteTmp()
+
+ self.createPackages()
+
+
+ def loadToDisk(self):
+ """loads container to disk if its stored remotely and overwrite url,
+ or check existent on several places at disk"""
+
+ if self.pyfile.url.startswith("http"):
+ self.pyfile.name = re.findall("([^\/=]+)", self.pyfile.url)[-1]
+ content = self.load(self.pyfile.url)
+ self.pyfile.url = safe_join(self.config['general']['download_folder'], self.pyfile.name)
+ f = open(self.pyfile.url, "wb" )
+ f.write(content)
+ f.close()
+
+ else:
+ self.pyfile.name = basename(self.pyfile.url)
+ if not exists(self.pyfile.url):
+ if exists(safe_join(pypath, self.pyfile.url)):
+ self.pyfile.url = safe_join(pypath, self.pyfile.url)
+ else:
+ self.fail(_("File not exists."))
+
+
+ def deleteTmp(self):
+ if self.pyfile.name.startswith("tmp_"):
+ remove(self.pyfile.url)
diff --git a/pyload/plugins/Crypter.py b/pyload/plugins/Crypter.py
new file mode 100644
index 000000000..ed72c57c1
--- /dev/null
+++ b/pyload/plugins/Crypter.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Plugin import Plugin
+
+
+class Crypter(Plugin):
+ __name__ = "Crypter"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = None
+
+ __description__ = """Base decrypter plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def __init__(self, pyfile):
+ Plugin.__init__(self, pyfile)
+
+ #: Put all packages here. It's a list of tuples like: ( name, [list of links], folder )
+ self.packages = []
+
+ #: List of urls, pyLoad will generate packagenames
+ self.urls = []
+
+ self.multiDL = True
+ self.limitDL = 0
+
+
+ def preprocessing(self, thread):
+ """prepare"""
+ self.setup()
+ self.thread = thread
+
+ self.decrypt(self.pyfile)
+
+ self.createPackages()
+
+
+ def decrypt(self, pyfile):
+ raise NotImplementedError
+
+ def createPackages(self):
+ """ create new packages from self.packages """
+ for pack in self.packages:
+
+ name, links, folder = pack
+
+ self.logDebug("Parsed package %(name)s with %(len)d links" % {"name": name, "len": len(links)})
+
+ links = [x.decode("utf-8") for x in links]
+
+ pid = self.api.addPackage(name, links, self.pyfile.package().queue)
+
+ if name != folder is not None:
+ self.api.setPackageData(pid, {"folder": folder}) #: Due to not break API addPackage method right now
+ self.logDebug("Set package %(name)s folder to %(folder)s" % {"name": name, "folder": folder})
+
+ if self.pyfile.package().password:
+ self.api.setPackageData(pid, {"password": self.pyfile.package().password})
+
+ if self.urls:
+ self.api.generateAndAddPackages(self.urls)
diff --git a/pyload/plugins/Hook.py b/pyload/plugins/Hook.py
new file mode 100644
index 000000000..b9ffbc647
--- /dev/null
+++ b/pyload/plugins/Hook.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+
+from traceback import print_exc
+
+from pyload.plugins.Plugin import Base
+
+
+class Expose(object):
+ """ used for decoration to declare rpc services """
+
+ def __new__(cls, f, *args, **kwargs):
+ hookManager.addRPC(f.__module__, f.func_name, f.func_doc)
+ return f
+
+
+def threaded(f):
+
+ def run(*args,**kwargs):
+ hookManager.startThread(f, *args, **kwargs)
+ return run
+
+
+class Hook(Base):
+ """
+ Base class for hook plugins.
+ """
+ __name__ = "Hook"
+ __type__ = "hook"
+ __version__ = "0.2"
+
+ __config__ = [("name", "type", "desc", "default")]
+
+ __description__ = """Interface for hook"""
+ __author_name__ = ("mkaay", "RaNaN")
+ __author_mail__ = ("mkaay@mkaay.de", "RaNaN@pyload.org")
+
+ #: automatically register event listeners for functions, attribute will be deleted dont use it yourself
+ event_map = None
+
+ # Alternative to event_map
+ #: List of events the plugin can handle, name the functions exactly like eventname.
+ event_list = None # dont make duplicate entries in event_map
+
+ #: periodic call interval in secondc
+ interval = 60
+
+
+ def __init__(self, core, manager):
+ Base.__init__(self, core)
+
+ #: Provide information in dict here, usable by API `getInfo`
+ self.info = None
+
+ #: Callback of periodical job task, used by hookmanager
+ self.cb = None
+
+ #: `HookManager`
+ self.manager = manager
+
+ #register events
+ if self.event_map:
+ for event, funcs in self.event_map.iteritems():
+ if type(funcs) in (list, tuple):
+ for f in funcs:
+ self.manager.addEvent(event, getattr(self,f))
+ else:
+ self.manager.addEvent(event, getattr(self,funcs))
+
+ #delete for various reasons
+ self.event_map = None
+
+ if self.event_list:
+ for f in self.event_list:
+ self.manager.addEvent(f, getattr(self,f))
+
+ self.event_list = None
+
+ self.setup()
+ self.initPeriodical()
+
+
+ def initPeriodical(self):
+ if self.interval >=1:
+ self.cb = self.core.scheduler.addJob(0, self._periodical, threaded=False)
+
+ def _periodical(self):
+ try:
+ if self.isActivated(): self.periodical()
+ except Exception, e:
+ self.logError(_("Error executing hooks: %s") % str(e))
+ if self.core.debug:
+ print_exc()
+
+ self.cb = self.core.scheduler.addJob(self.interval, self._periodical, threaded=False)
+
+
+ def __repr__(self):
+ return "<Hook %s>" % self.__name__
+
+ def setup(self):
+ """ more init stuff if needed """
+ pass
+
+ def unload(self):
+ """ called when hook was deactivated """
+ pass
+
+ def isActivated(self):
+ """ checks if hook is activated"""
+ return self.config.getPlugin(self.__name__, "activated")
+
+
+ #event methods - overwrite these if needed
+ def coreReady(self):
+ pass
+
+ def coreExiting(self):
+ pass
+
+ def downloadPreparing(self, pyfile):
+ pass
+
+ def downloadFinished(self, pyfile):
+ pass
+
+ def downloadFailed(self, pyfile):
+ pass
+
+ def packageFinished(self, pypack):
+ pass
+
+ def beforeReconnecting(self, ip):
+ pass
+
+ def afterReconnecting(self, ip):
+ pass
+
+ def periodical(self):
+ pass
+
+ def newCaptchaTask(self, task):
+ """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """
+ pass
+
+ def captchaCorrect(self, task):
+ pass
+
+ def captchaInvalid(self, task):
+ pass
diff --git a/pyload/plugins/Hoster.py b/pyload/plugins/Hoster.py
new file mode 100644
index 000000000..23369deec
--- /dev/null
+++ b/pyload/plugins/Hoster.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Plugin import Plugin
+
+
+def getInfo(self):
+ #result = [ .. (name, size, status, url) .. ]
+ return
+
+
+class Hoster(Plugin):
+ __name__ = "Hoster"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = None
+
+ __description__ = """Base hoster plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/OCR.py b/pyload/plugins/OCR.py
index 0991184f3..0991184f3 100644
--- a/module/plugins/OCR.py
+++ b/pyload/plugins/OCR.py
diff --git a/pyload/plugins/Plugin.py b/pyload/plugins/Plugin.py
new file mode 100644
index 000000000..31cbfca57
--- /dev/null
+++ b/pyload/plugins/Plugin.py
@@ -0,0 +1,629 @@
+# -*- coding: utf-8 -*-
+
+from time import time, sleep
+from random import randint
+
+import os
+from os import remove, makedirs, chmod, stat
+from os.path import exists, join
+
+if os.name != "nt":
+ from os import chown
+ from pwd import getpwnam
+ from grp import getgrnam
+
+from itertools import islice
+
+from pyload.utils import safe_join, safe_filename, fs_encode, fs_decode
+
+def chunks(iterable, size):
+ it = iter(iterable)
+ item = list(islice(it, size))
+ while item:
+ yield item
+ item = list(islice(it, size))
+
+
+class Abort(Exception):
+ """ raised when aborted """
+
+
+class Fail(Exception):
+ """ raised when failed """
+
+
+class Reconnect(Exception):
+ """ raised when reconnected """
+
+
+class Retry(Exception):
+ """ raised when start again from beginning """
+
+
+class SkipDownload(Exception):
+ """ raised when download should be skipped """
+
+
+class Base(object):
+ """
+ A Base class with log/config/db methods *all* plugin types can use
+ """
+
+ def __init__(self, core):
+ #: Core instance
+ self.core = core
+ #: logging instance
+ self.log = core.log
+ #: core config
+ self.config = core.config
+
+ #log functions
+ def logInfo(self, *args):
+ self.log.info("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
+
+ def logWarning(self, *args):
+ self.log.warning("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
+
+ def logError(self, *args):
+ self.log.error("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
+
+ def logDebug(self, *args):
+ self.log.debug("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args])))
+
+
+ def setConf(self, option, value):
+ """ see `setConfig` """
+ self.config.setPlugin(self.__name__, option, value)
+
+ def setConfig(self, option, value):
+ """ Set config value for current plugin
+
+ :param option:
+ :param value:
+ :return:
+ """
+ self.setConf(option, value)
+
+ #: Deprecated method
+ def getConf(self, option):
+ """ see `getConfig` """
+ return self.getConfig(option)
+
+ def getConfig(self, option):
+ """ Returns config value for current plugin
+
+ :param option:
+ :return:
+ """
+ return self.config.getPlugin(self.__name__, option)
+
+ def setStorage(self, key, value):
+ """ Saves a value persistently to the database """
+ self.core.db.setStorage(self.__name__, key, value)
+
+ def store(self, key, value):
+ """ same as `setStorage` """
+ self.core.db.setStorage(self.__name__, key, value)
+
+ def getStorage(self, key=None, default=None):
+ """ Retrieves saved value or dict of all saved entries if key is None """
+ if key is not None:
+ return self.core.db.getStorage(self.__name__, key) or default
+ return self.core.db.getStorage(self.__name__, key)
+
+ def retrieve(self, *args, **kwargs):
+ """ same as `getStorage` """
+ return self.getStorage(*args, **kwargs)
+
+ def delStorage(self, key):
+ """ Delete entry in db """
+ self.core.db.delStorage(self.__name__, key)
+
+
+class Plugin(Base):
+ """
+ Base plugin for hoster/crypter.
+ Overwrite `process` / `decrypt` in your subclassed plugin.
+ """
+ __name__ = "Plugin"
+ __type__ = "hoster"
+ __version__ = "0.5"
+
+ __pattern__ = None
+ __config__ = [("name", "type", "desc", "default")]
+
+ __description__ = """Base plugin"""
+ __author_name__ = ("RaNaN", "spoob", "mkaay")
+ __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org", "mkaay@mkaay.de")
+
+
+ def __init__(self, pyfile):
+ Base.__init__(self, pyfile.m.core)
+
+ #: engage wan reconnection
+ self.wantReconnect = False
+
+ #: enable simultaneous processing of multiple downloads
+ self.multiDL = True
+ self.limitDL = 0
+
+ #: chunk limit
+ self.chunkLimit = 1
+ self.resumeDownload = False
+
+ #: time() + wait in seconds
+ self.waitUntil = 0
+ self.waiting = False
+
+ #: captcha reader instance
+ self.ocr = None
+
+ #: account handler instance, see :py:class:`Account`
+ self.account = pyfile.m.core.accountManager.getAccountPlugin(self.__name__)
+
+ #: premium status
+ self.premium = False
+ #: username/login
+ self.user = None
+
+ if self.account and not self.account.canUse():
+ self.account = None
+
+ if self.account:
+ self.user, data = self.account.selectAccount()
+ #: Browser instance, see `network.Browser`
+ self.req = self.account.getAccountRequest(self.user)
+ self.chunkLimit = -1 # chunk limit, -1 for unlimited
+ #: enables resume (will be ignored if server dont accept chunks)
+ self.resumeDownload = True
+ self.multiDL = True #every hoster with account should provide multiple downloads
+ #: premium status
+ self.premium = self.account.isPremium(self.user)
+ else:
+ self.req = pyfile.m.core.requestFactory.getRequest(self.__name__)
+
+ #: associated pyfile instance, see `PyFile`
+ self.pyfile = pyfile
+
+ self.thread = None # holds thread in future
+
+ #: location where the last call to download was saved
+ self.lastDownload = ""
+ #: re match of the last call to `checkDownload`
+ self.lastCheck = None
+
+ #: js engine, see `JsEngine`
+ self.js = self.core.js
+
+ #: captcha task
+ self.cTask = None
+
+ #: amount of retries already made
+ self.retries = 0
+
+ #: some plugins store html code here
+ self.html = None
+
+ #: quick caller for API
+ self.api = self.core.api
+
+ self.init()
+
+ def getChunkCount(self):
+ if self.chunkLimit <= 0:
+ return self.config['download']['chunks']
+ return min(self.config['download']['chunks'], self.chunkLimit)
+
+ def __call__(self):
+ return self.__name__
+
+ def init(self):
+ """initialize the plugin (in addition to `__init__`)"""
+ pass
+
+ def setup(self):
+ """ setup for enviroment and other things, called before downloading (possibly more than one time)"""
+ pass
+
+ def preprocessing(self, thread):
+ """ handles important things to do before starting """
+ self.thread = thread
+
+ if self.account:
+ self.account.checkLogin(self.user)
+ else:
+ self.req.clearCookies()
+
+ self.setup()
+
+ self.pyfile.setStatus("starting")
+
+ return self.process(self.pyfile)
+
+
+ def process(self, pyfile):
+ """the 'main' method of every plugin, you **have to** overwrite it"""
+ raise NotImplementedError
+
+ def resetAccount(self):
+ """ dont use account and retry download """
+ self.account = None
+ self.req = self.core.requestFactory.getRequest(self.__name__)
+ self.retry()
+
+ def checksum(self, local_file=None):
+ """
+ return codes:
+ 0 - checksum ok
+ 1 - checksum wrong
+ 5 - can't get checksum
+ 10 - not implemented
+ 20 - unknown error
+ """
+ #@TODO checksum check hook
+
+ return True, 10
+
+
+ def setWait(self, seconds, reconnect=None):
+ """Set a specific wait time later used with `wait`
+
+ :param seconds: wait time in seconds
+ :param reconnect: True if a reconnect would avoid wait time
+ """
+ if reconnect:
+ self.wantReconnect = True
+ self.pyfile.waitUntil = time() + int(seconds)
+
+ def wait(self, seconds=None, reconnect=None):
+ """ Waits the time previously set or use these from arguments. See `setWait`
+ """
+ if seconds:
+ self.setWait(seconds, reconnect)
+
+ self._wait()
+
+ def _wait(self):
+ self.waiting = True
+ self.pyfile.setStatus("waiting")
+
+ while self.pyfile.waitUntil > time():
+ self.thread.m.reconnecting.wait(2)
+
+ if self.pyfile.abort:
+ raise Abort
+ if self.thread.m.reconnecting.isSet():
+ self.waiting = False
+ self.wantReconnect = False
+ raise Reconnect
+
+ self.waiting = False
+ self.pyfile.setStatus("starting")
+
+ def fail(self, reason):
+ """ fail and give reason """
+ raise Fail(reason)
+
+ def offline(self):
+ """ fail and indicate file is offline """
+ raise Fail("offline")
+
+ def tempOffline(self):
+ """ fail and indicates file ist temporary offline, the core may take consequences """
+ raise Fail("temp. offline")
+
+ def retry(self, max_tries=3, wait_time=1, reason=""):
+ """Retries and begin again from the beginning
+
+ :param max_tries: number of maximum retries
+ :param wait_time: time to wait in seconds
+ :param reason: reason for retrying, will be passed to fail if max_tries reached
+ """
+ if 0 < max_tries <= self.retries:
+ if not reason: reason = "Max retries reached"
+ raise Fail(reason)
+
+ self.wantReconnect = False
+ self.setWait(wait_time)
+ self.wait()
+
+ self.retries += 1
+ raise Retry(reason)
+
+ def invalidCaptcha(self):
+ if self.cTask:
+ self.cTask.invalid()
+
+ def correctCaptcha(self):
+ if self.cTask:
+ self.cTask.correct()
+
+ def decryptCaptcha(self, url, get={}, post={}, cookies=False, forceUser=False, imgtype='jpg',
+ result_type='textual'):
+ """ Loads a captcha and decrypts it with ocr, plugin, user input
+
+ :param url: url of captcha image
+ :param get: get part for request
+ :param post: post part for request
+ :param cookies: True if cookies should be enabled
+ :param forceUser: if True, ocr is not used
+ :param imgtype: Type of the Image
+ :param result_type: 'textual' if text is written on the captcha\
+ or 'positional' for captcha where the user have to click\
+ on a specific region on the captcha
+
+ :return: result of decrypting
+ """
+
+ img = self.load(url, get=get, post=post, cookies=cookies)
+
+ id = ("%.2f" % time())[-6:].replace(".", "")
+ temp_file = open(join("tmp", "tmpCaptcha_%s_%s.%s" % (self.__name__, id, imgtype)), "wb")
+ temp_file.write(img)
+ temp_file.close()
+
+ has_plugin = self.__name__ in self.core.pluginManager.captchaPlugins
+
+ if self.core.captcha:
+ Ocr = self.core.pluginManager.loadClass("captcha", self.__name__)
+ else:
+ Ocr = None
+
+ if Ocr and not forceUser:
+ sleep(randint(3000, 5000) / 1000.0)
+ if self.pyfile.abort: raise Abort
+
+ ocr = Ocr()
+ result = ocr.get_captcha(temp_file.name)
+ else:
+ captchaManager = self.core.captchaManager
+ task = captchaManager.newTask(img, imgtype, temp_file.name, result_type)
+ self.cTask = task
+ captchaManager.handleCaptcha(task)
+
+ while task.isWaiting():
+ if self.pyfile.abort:
+ captchaManager.removeTask(task)
+ raise Abort
+ sleep(1)
+
+ captchaManager.removeTask(task)
+
+ if task.error and has_plugin: #ignore default error message since the user could use OCR
+ self.fail(_("Pil and tesseract not installed and no Client connected for captcha decrypting"))
+ elif task.error:
+ self.fail(task.error)
+ elif not task.result:
+ self.fail(_("No captcha result obtained in appropiate time by any of the plugins."))
+
+ result = task.result
+ self.logDebug("Received captcha result: %s" % str(result))
+
+ if not self.core.debug:
+ try:
+ remove(temp_file.name)
+ except:
+ pass
+
+ return result
+
+
+ def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False):
+ """Load content at url and returns it
+
+ :param url:
+ :param get:
+ :param post:
+ :param ref:
+ :param cookies:
+ :param just_header: if True only the header will be retrieved and returned as dict
+ :param decode: Wether to decode the output according to http header, should be True in most cases
+ :return: Loaded content
+ """
+ if self.pyfile.abort: raise Abort
+ #utf8 vs decode -> please use decode attribute in all future plugins
+ if type(url) == unicode: url = str(url)
+
+ res = self.req.load(url, get, post, ref, cookies, just_header, decode=decode)
+
+ if self.core.debug:
+ from inspect import currentframe
+
+ frame = currentframe()
+ if not exists(join("tmp", self.__name__)):
+ makedirs(join("tmp", self.__name__))
+
+ f = open(
+ join("tmp", self.__name__, "%s_line%s.dump.html" % (frame.f_back.f_code.co_name, frame.f_back.f_lineno))
+ , "wb")
+ del frame # delete the frame or it wont be cleaned
+
+ try:
+ tmp = res.encode("utf8")
+ except:
+ tmp = res
+
+ f.write(tmp)
+ f.close()
+
+ if just_header:
+ #parse header
+ header = {"code": self.req.code}
+ for line in res.splitlines():
+ line = line.strip()
+ if not line or ":" not in line: continue
+
+ key, none, value = line.partition(":")
+ key = key.lower().strip()
+ value = value.strip()
+
+ if key in header:
+ if type(header[key]) == list:
+ header[key].append(value)
+ else:
+ header[key] = [header[key], value]
+ else:
+ header[key] = value
+ res = header
+
+ return res
+
+ def download(self, url, get={}, post={}, ref=True, cookies=True, disposition=False):
+ """Downloads the content at url to download folder
+
+ :param url:
+ :param get:
+ :param post:
+ :param ref:
+ :param cookies:
+ :param disposition: if True and server provides content-disposition header\
+ the filename will be changed if needed
+ :return: The location where the file was saved
+ """
+
+ self.checkForSameFiles()
+
+ self.pyfile.setStatus("downloading")
+
+ download_folder = self.config['general']['download_folder']
+
+ location = safe_join(download_folder, self.pyfile.package().folder)
+
+ if not exists(location):
+ makedirs(location, int(self.config['permission']['folder'], 8))
+
+ if self.config['permission']['change_dl'] and os.name != "nt":
+ try:
+ uid = getpwnam(self.config['permission']['user'])[2]
+ gid = getgrnam(self.config['permission']['group'])[2]
+
+ chown(location, uid, gid)
+ except Exception, e:
+ self.logWarning(_("Setting User and Group failed: %s") % str(e))
+
+ # convert back to unicode
+ location = fs_decode(location)
+ name = safe_filename(self.pyfile.name)
+
+ filename = join(location, name)
+
+ self.core.hookManager.dispatchEvent("downloadStarts", self.pyfile, url, filename)
+
+ try:
+ newname = self.req.httpDownload(url, filename, get=get, post=post, ref=ref, cookies=cookies,
+ chunks=self.getChunkCount(), resume=self.resumeDownload,
+ progressNotify=self.pyfile.setProgress, disposition=disposition)
+ finally:
+ self.pyfile.size = self.req.size
+
+ if disposition and newname and newname != name: #triple check, just to be sure
+ self.logInfo("%(name)s saved as %(newname)s" % {"name": name, "newname": newname})
+ self.pyfile.name = newname
+ filename = join(location, newname)
+
+ fs_filename = fs_encode(filename)
+
+ if self.config['permission']['change_file']:
+ chmod(fs_filename, int(self.config['permission']['file'], 8))
+
+ if self.config['permission']['change_dl'] and os.name != "nt":
+ try:
+ uid = getpwnam(self.config['permission']['user'])[2]
+ gid = getgrnam(self.config['permission']['group'])[2]
+
+ chown(fs_filename, uid, gid)
+ except Exception, e:
+ self.logWarning(_("Setting User and Group failed: %s") % str(e))
+
+ self.lastDownload = filename
+ return self.lastDownload
+
+ def checkDownload(self, rules, api_size=0, max_size=50000, delete=True, read_size=0):
+ """ checks the content of the last downloaded file, re match is saved to `lastCheck`
+
+ :param rules: dict with names and rules to match (compiled regexp or strings)
+ :param api_size: expected file size
+ :param max_size: if the file is larger then it wont be checked
+ :param delete: delete if matched
+ :param read_size: amount of bytes to read from files larger then max_size
+ :return: dictionary key of the first rule that matched
+ """
+ lastDownload = fs_encode(self.lastDownload)
+ if not exists(lastDownload): return None
+
+ size = stat(lastDownload)
+ size = size.st_size
+
+ if api_size and api_size <= size: return None
+ elif size > max_size and not read_size: return None
+ self.logDebug("Download Check triggered")
+ f = open(lastDownload, "rb")
+ content = f.read(read_size if read_size else -1)
+ f.close()
+ #produces encoding errors, better log to other file in the future?
+ #self.logDebug("Content: %s" % content)
+ for name, rule in rules.iteritems():
+ if type(rule) in (str, unicode):
+ if rule in content:
+ if delete:
+ remove(lastDownload)
+ return name
+ elif hasattr(rule, "search"):
+ m = rule.search(content)
+ if m:
+ if delete:
+ remove(lastDownload)
+ self.lastCheck = m
+ return name
+
+
+ def getPassword(self):
+ """ get the password the user provided in the package"""
+ password = self.pyfile.package().password
+ if not password: return ""
+ return password
+
+
+ def checkForSameFiles(self, starting=False):
+ """ checks if same file was/is downloaded within same package
+
+ :param starting: indicates that the current download is going to start
+ :raises SkipDownload:
+ """
+
+ pack = self.pyfile.package()
+
+ for pyfile in self.core.files.cache.values():
+ if pyfile != self.pyfile and pyfile.name == self.pyfile.name and pyfile.package().folder == pack.folder:
+ if pyfile.status in (0, 12): #finished or downloading
+ raise SkipDownload(pyfile.pluginname)
+ elif pyfile.status in (
+ 5, 7) and starting: #a download is waiting/starting and was appenrently started before
+ raise SkipDownload(pyfile.pluginname)
+
+ download_folder = self.config['general']['download_folder']
+ location = safe_join(download_folder, pack.folder, self.pyfile.name)
+
+ if starting and self.config['download']['skip_existing'] and exists(location):
+ size = os.stat(location).st_size
+ if size >= self.pyfile.size:
+ raise SkipDownload("File exists.")
+
+ pyfile = self.core.db.findDuplicates(self.pyfile.id, self.pyfile.package().folder, self.pyfile.name)
+ if pyfile:
+ if exists(location):
+ raise SkipDownload(pyfile[0])
+
+ self.logDebug("File %s not skipped, because it does not exists." % self.pyfile.name)
+
+ def clean(self):
+ """ clean everything and remove references """
+ if hasattr(self, "pyfile"):
+ del self.pyfile
+ if hasattr(self, "req"):
+ self.req.close()
+ del self.req
+ if hasattr(self, "thread"):
+ del self.thread
+ if hasattr(self, "html"):
+ del self.html
diff --git a/pyload/plugins/PluginManager.py b/pyload/plugins/PluginManager.py
new file mode 100644
index 000000000..1edc0f819
--- /dev/null
+++ b/pyload/plugins/PluginManager.py
@@ -0,0 +1,356 @@
+# -*- coding: utf-8 -*-
+
+import re
+import sys
+
+from itertools import chain
+from os import listdir, makedirs
+from os.path import isfile, join, exists, abspath
+from sys import version_info
+from traceback import print_exc
+
+from pyload.lib.SafeEval import const_eval as literal_eval
+
+from pyload.ConfigParser import IGNORE
+
+
+class PluginManager:
+ ROOT = "pyload.plugins."
+ USERROOT = "userplugins."
+ TYPES = ("accounts", "container", "crypter", "hooks", "hoster", "internal", "ocr")
+
+ PATTERN = re.compile(r'__pattern__.*=.*r("|\')([^"\']+)')
+ VERSION = re.compile(r'__version__.*=.*("|\')([0-9.]+)')
+ CONFIG = re.compile(r'__config__.*=.*\[([^\]]+)', re.MULTILINE)
+ DESC = re.compile(r'__description__.?=.?("|"""|\')([^"\']+)')
+
+
+ def __init__(self, core):
+ self.core = core
+
+ self.config = core.config
+ self.log = core.log
+
+ self.plugins = {}
+ self.createIndex()
+
+ #register for import hook
+ sys.meta_path.append(self)
+
+
+ def createIndex(self):
+ """create information for all plugins available"""
+
+ sys.path.append(abspath(""))
+
+ if not exists("userplugins"):
+ makedirs("userplugins")
+ if not exists(join("userplugins", "__init__.py")):
+ f = open(join("userplugins", "__init__.py"), "wb")
+ f.close()
+
+ self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True)
+ self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True)
+ self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True)
+
+ self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr")
+ self.plugins['accounts'] = self.accountPlugins = self.parse("accounts")
+ self.plugins['hooks'] = self.hookPlugins = self.parse("hooks")
+ self.plugins['internal'] = self.internalPlugins = self.parse("internal")
+
+ self.log.debug("created index of plugins")
+
+ def parse(self, folder, pattern=False, home={}):
+ """
+ returns dict with information
+ home contains parsed plugins from pyload.
+
+ {
+ name : {path, version, config, (pattern, re), (plugin, class)}
+ }
+
+ """
+ plugins = {}
+ if home:
+ pfolder = join("userplugins", folder)
+ if not exists(pfolder):
+ makedirs(pfolder)
+ if not exists(join(pfolder, "__init__.py")):
+ f = open(join(pfolder, "__init__.py"), "wb")
+ f.close()
+
+ else:
+ pfolder = join(pypath, "pyload", "plugins", folder)
+
+ for f in listdir(pfolder):
+ if (isfile(join(pfolder, f)) and f.endswith(".py") or f.endswith("_25.pyc") or f.endswith(
+ "_26.pyc") or f.endswith("_27.pyc")) and not f.startswith("_"):
+ data = open(join(pfolder, f))
+ content = data.read()
+ data.close()
+
+ if f.endswith("_25.pyc") and version_info[0:2] != (2, 5):
+ continue
+ elif f.endswith("_26.pyc") and version_info[0:2] != (2, 6):
+ continue
+ elif f.endswith("_27.pyc") and version_info[0:2] != (2, 7):
+ continue
+
+ name = f[:-3]
+ if name[-1] == ".": name = name[:-4]
+
+ version = self.VERSION.findall(content)
+ if version:
+ version = float(version[0][1])
+ else:
+ version = 0
+
+ # home contains plugins from pyload root
+ if home and name in home:
+ if home[name]['v'] >= version:
+ continue
+
+ if name in IGNORE or (folder, name) in IGNORE:
+ continue
+
+ plugins[name] = {}
+ plugins[name]['v'] = version
+
+ module = f.replace(".pyc", "").replace(".py", "")
+
+ # the plugin is loaded from user directory
+ plugins[name]['user'] = True if home else False
+ plugins[name]['name'] = module
+
+ if pattern:
+ pattern = self.PATTERN.findall(content)
+
+ if pattern:
+ pattern = pattern[0][1]
+ else:
+ pattern = "^unmachtable$"
+
+ plugins[name]['pattern'] = pattern
+
+ try:
+ plugins[name]['re'] = re.compile(pattern)
+ except:
+ self.log.error(_("%s has a invalid pattern.") % name)
+
+
+ # internals have no config
+ if folder == "internal":
+ self.config.deleteConfig(name)
+ continue
+
+ config = self.CONFIG.findall(content)
+ if config:
+ config = literal_eval(config[0].strip().replace("\n", "").replace("\r", ""))
+ desc = self.DESC.findall(content)
+ desc = desc[0][1] if desc else ""
+
+ if type(config[0]) == tuple:
+ config = [list(x) for x in config]
+ else:
+ config = [list(config)]
+
+ if folder == "hooks":
+ append = True
+ for item in config:
+ if item[0] == "activated": append = False
+
+ # activated flag missing
+ if append: config.append(["activated", "bool", "Activated", False])
+
+ try:
+ self.config.addPluginConfig(name, config, desc)
+ except:
+ self.log.error("Invalid config in %s: %s" % (name, config))
+
+ elif folder == "hooks": #force config creation
+ desc = self.DESC.findall(content)
+ desc = desc[0][1] if desc else ""
+ config = (["activated", "bool", "Activated", False],)
+
+ try:
+ self.config.addPluginConfig(name, config, desc)
+ except:
+ self.log.error("Invalid config in %s: %s" % (name, config))
+
+ if not home:
+ temp = self.parse(folder, pattern, plugins)
+ plugins.update(temp)
+
+ return plugins
+
+
+ def parseUrls(self, urls):
+ """parse plugins for given list of urls"""
+
+ last = None
+ res = [] # tupels of (url, plugin)
+
+ for url in urls:
+ if type(url) not in (str, unicode, buffer): continue
+ found = False
+
+ if last and last[1]['re'].match(url):
+ res.append((url, last[0]))
+ continue
+
+ for name, value in chain(self.crypterPlugins.iteritems(), self.hosterPlugins.iteritems(),
+ self.containerPlugins.iteritems()):
+ if value['re'].match(url):
+ res.append((url, name))
+ last = (name, value)
+ found = True
+ break
+
+ if not found:
+ res.append((url, "BasePlugin"))
+
+ return res
+
+ def findPlugin(self, name, pluginlist=("hoster", "crypter", "container")):
+ for ptype in pluginlist:
+ if name in self.plugins[ptype]:
+ return self.plugins[ptype][name], ptype
+ return None, None
+
+ def getPlugin(self, name, original=False):
+ """return plugin module from hoster|decrypter|container"""
+ plugin, type = self.findPlugin(name)
+
+ if not plugin:
+ self.log.warning("Plugin %s not found." % name)
+ plugin = self.hosterPlugins['BasePlugin']
+
+ if "new_module" in plugin and not original:
+ return plugin['new_module']
+
+ return self.loadModule(type, name)
+
+ def getPluginName(self, name):
+ """ used to obtain new name if other plugin was injected"""
+ plugin, type = self.findPlugin(name)
+
+ if "new_name" in plugin:
+ return plugin['new_name']
+
+ return name
+
+ def loadModule(self, type, name):
+ """ Returns loaded module for plugin
+
+ :param type: plugin type, subfolder of pyload.plugins
+ :param name:
+ """
+ plugins = self.plugins[type]
+ if name in plugins:
+ if "module" in plugins[name]: return plugins[name]['module']
+ try:
+ module = __import__(self.ROOT + "%s.%s" % (type, plugins[name]['name']), globals(), locals(),
+ plugins[name]['name'])
+ plugins[name]['module'] = module #cache import, maybe unneeded
+ return module
+ except Exception, e:
+ self.log.error(_("Error importing %(name)s: %(msg)s") % {"name": name, "msg": str(e)})
+ if self.core.debug:
+ print_exc()
+
+ def loadClass(self, type, name):
+ """Returns the class of a plugin with the same name"""
+ module = self.loadModule(type, name)
+ if module: return getattr(module, name)
+
+ def getAccountPlugins(self):
+ """return list of account plugin names"""
+ return self.accountPlugins.keys()
+
+ def find_module(self, fullname, path=None):
+ #redirecting imports if necesarry
+ if fullname.startswith(self.ROOT) or fullname.startswith(self.USERROOT): #seperate pyload plugins
+ if fullname.startswith(self.USERROOT): user = 1
+ else: user = 0 #used as bool and int
+
+ split = fullname.split(".")
+ if len(split) != 4 - user: return
+ type, name = split[2 - user:4 - user]
+
+ if type in self.plugins and name in self.plugins[type]:
+ #userplugin is a newer version
+ if not user and self.plugins[type][name]['user']:
+ return self
+ #imported from userdir, but pyloads is newer
+ if user and not self.plugins[type][name]['user']:
+ return self
+
+
+ def load_module(self, name, replace=True):
+ if name not in sys.modules: #could be already in modules
+ if replace:
+ if self.ROOT in name:
+ newname = name.replace(self.ROOT, self.USERROOT)
+ else:
+ newname = name.replace(self.USERROOT, self.ROOT)
+ else: newname = name
+
+ base, plugin = newname.rsplit(".", 1)
+
+ self.log.debug("Redirected import %s -> %s" % (name, newname))
+
+ module = __import__(newname, globals(), locals(), [plugin])
+ #inject under new an old name
+ sys.modules[name] = module
+ sys.modules[newname] = module
+
+ return sys.modules[name]
+
+
+ def reloadPlugins(self, type_plugins):
+ """ reload and reindex plugins """
+ if not type_plugins:
+ return None
+
+ self.log.debug("Request reload of plugins: %s" % type_plugins)
+
+ reloaded = []
+
+ as_dict = {}
+ for t,n in type_plugins:
+ if t in ("hooks", "internal"): #: do not reload hooks or internals, because would cause to much side effects
+ continue
+ elif t in as_dict:
+ as_dict[t].append(n)
+ else:
+ as_dict[t] = [n]
+
+ for type in as_dict.iterkeys():
+ for plugin in as_dict[type]:
+ if plugin in self.plugins[type] and "module" in self.plugins[type][plugin]:
+ self.log.debug("Reloading %s" % plugin)
+ id = (type, plugin)
+ try:
+ reload(self.plugins[type][plugin]['module'])
+ except Exception, e:
+ self.log.error("Error when reloading %s" % id, str(e))
+ continue
+ else:
+ reloaded.append(id)
+
+ #index creation
+ self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True)
+ self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True)
+ self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True)
+ self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr")
+ self.plugins['accounts'] = self.accountPlugins = self.parse("accounts")
+
+ if "accounts" in as_dict: #: accounts needs to be reloaded
+ self.core.accountManager.initPlugins()
+ self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos)
+
+ return reloaded #: return a list of the plugins successfully reloaded
+
+ def reloadPlugin(self, type_plugin):
+ """ reload and reindex ONE plugin """
+ return True if self.reloadPlugins(type_plugin) else False
diff --git a/module/plugins/README.md b/pyload/plugins/README.md
index fa2a4c5b2..fa2a4c5b2 100644
--- a/module/plugins/README.md
+++ b/pyload/plugins/README.md
diff --git a/module/plugins/__init__.py b/pyload/plugins/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/__init__.py
+++ b/pyload/plugins/__init__.py
diff --git a/pyload/plugins/accounts/AlldebridCom.py b/pyload/plugins/accounts/AlldebridCom.py
new file mode 100644
index 000000000..928e81fe5
--- /dev/null
+++ b/pyload/plugins/accounts/AlldebridCom.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+
+import re
+import xml.dom.minidom as dom
+
+from time import time
+from urllib import urlencode
+
+from BeautifulSoup import BeautifulSoup
+
+from pyload.plugins.Account import Account
+
+
+class AlldebridCom(Account):
+ __name__ = "AlldebridCom"
+ __type__ = "account"
+ __version__ = "0.22"
+
+ __description__ = """AllDebrid.com account plugin"""
+ __author_name__ = "Andy Voigt"
+ __author_mail__ = "spamsales@online.de"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ page = req.load("http://www.alldebrid.com/account/")
+ soup = BeautifulSoup(page)
+ #Try to parse expiration date directly from the control panel page (better accuracy)
+ try:
+ time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string
+ self.logDebug("Account expires in: %s" % time_text)
+ p = re.compile('\d+')
+ exp_data = p.findall(time_text)
+ exp_time = time() + int(exp_data[0]) * 24 * 60 * 60 + int(
+ exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60
+ #Get expiration date from API
+ except:
+ data = self.getAccountData(user)
+ page = req.load("http://www.alldebrid.com/api.php?action=info_user&login=%s&pw=%s" % (user,
+ data['password']))
+ self.logDebug(page)
+ xml = dom.parseString(page)
+ exp_time = time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60
+ account_info = {"validuntil": exp_time, "trafficleft": -1}
+ return account_info
+
+ def login(self, user, data, req):
+ urlparams = urlencode({'action': 'login', 'login_login': user, 'login_password': data['password']})
+ page = req.load("http://www.alldebrid.com/register/?%s" % urlparams)
+
+ if "This login doesn't exist" in page:
+ self.wrongPassword()
+
+ if "The password is not valid" in page:
+ self.wrongPassword()
+
+ if "Invalid captcha" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/BayfilesCom.py b/pyload/plugins/accounts/BayfilesCom.py
new file mode 100644
index 000000000..a42ac6457
--- /dev/null
+++ b/pyload/plugins/accounts/BayfilesCom.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+from time import time
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class BayfilesCom(Account):
+ __name__ = "BayfilesCom"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Bayfiles.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ for _ in xrange(2):
+ response = json_loads(req.load("http://api.bayfiles.com/v1/account/info"))
+ self.logDebug(response)
+ if not response['error']:
+ break
+ self.logWarning(response['error'])
+ self.relogin(user)
+
+ return {"premium": bool(response['premium']), "trafficleft": -1,
+ "validuntil": response['expires'] if response['expires'] >= int(time()) else -1}
+
+ def login(self, user, data, req):
+ response = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data['password'])))
+ self.logDebug(response)
+ if response['error']:
+ self.logError(response['error'])
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/BitshareCom.py b/pyload/plugins/accounts/BitshareCom.py
new file mode 100644
index 000000000..7a982aea5
--- /dev/null
+++ b/pyload/plugins/accounts/BitshareCom.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class BitshareCom(Account):
+ __name__ = "BitshareCom"
+ __type__ = "account"
+ __version__ = "0.12"
+
+ __description__ = """Bitshare account plugin"""
+ __author_name__ = "Paul King"
+ __author_mail__ = None
+
+
+ def loadAccountInfo(self, user, req):
+ page = req.load("http://bitshare.com/mysettings.html")
+
+ if "\"http://bitshare.com/myupgrade.html\">Free" in page:
+ return {"validuntil": -1, "trafficleft": -1, "premium": False}
+
+ if not '<input type="checkbox" name="directdownload" checked="checked" />' in page:
+ self.logWarning(_("Activate direct Download in your Bitshare Account"))
+
+ return {"validuntil": -1, "trafficleft": -1, "premium": True}
+
+ def login(self, user, data, req):
+ page = req.load("http://bitshare.com/login.html",
+ post={"user": user, "password": data['password'], "submit": "Login"}, cookies=True)
+ if "login" in req.lastEffectiveURL:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/CramitIn.py b/pyload/plugins/accounts/CramitIn.py
new file mode 100644
index 000000000..5bf7a3141
--- /dev/null
+++ b/pyload/plugins/accounts/CramitIn.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class CramitIn(XFSPAccount):
+ __name__ = "CramitIn"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Cramit.in account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ MAIN_PAGE = "http://cramit.in/"
diff --git a/pyload/plugins/accounts/CyberlockerCh.py b/pyload/plugins/accounts/CyberlockerCh.py
new file mode 100644
index 000000000..94cc0d8c4
--- /dev/null
+++ b/pyload/plugins/accounts/CyberlockerCh.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+from pyload.plugins.internal.SimpleHoster import parseHtmlForm
+
+
+class CyberlockerCh(XFSPAccount):
+ __name__ = "CyberlockerCh"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Cyberlocker.ch account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ MAIN_PAGE = "http://cyberlocker.ch/"
+
+
+ def login(self, user, data, req):
+ html = req.load(self.MAIN_PAGE + 'login.html', decode=True)
+
+ action, inputs = parseHtmlForm('name="FL"', html)
+ if not inputs:
+ inputs = {"op": "login",
+ "redirect": self.MAIN_PAGE}
+
+ inputs.update({"login": user,
+ "password": data['password']})
+
+ # Without this a 403 Forbidden is returned
+ req.http.lastURL = self.MAIN_PAGE + 'login.html'
+ html = req.load(self.MAIN_PAGE, post=inputs, decode=True)
+
+ if 'Incorrect Login or Password' in html or '>Error<' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/CzshareCom.py b/pyload/plugins/accounts/CzshareCom.py
new file mode 100644
index 000000000..584b9a3a2
--- /dev/null
+++ b/pyload/plugins/accounts/CzshareCom.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+import re
+
+from pyload.plugins.Account import Account
+
+
+class CzshareCom(Account):
+ __name__ = "CzshareCom"
+ __type__ = "account"
+ __version__ = "0.14"
+
+ __description__ = """Czshare.com account plugin, now Sdilej.cz"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ CREDIT_LEFT_PATTERN = r'<tr class="active">\s*<td>([0-9 ,]+) (KiB|MiB|GiB)</td>\s*<td>([^<]*)</td>\s*</tr>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://sdilej.cz/prehled_kreditu/")
+
+ m = re.search(self.CREDIT_LEFT_PATTERN, html)
+ if m is None:
+ return {"validuntil": 0, "trafficleft": 0}
+ else:
+ credits = float(m.group(1).replace(' ', '').replace(',', '.'))
+ credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[m.group(2)]
+ validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M'))
+ return {"validuntil": validuntil, "trafficleft": credits}
+
+ def login(self, user, data, req):
+ html = req.load('https://sdilej.cz/index.php', post={
+ "Prihlasit": "Prihlasit",
+ "login-password": data['password'],
+ "login-name": user
+ })
+
+ if '<div class="login' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/DebridItaliaCom.py b/pyload/plugins/accounts/DebridItaliaCom.py
new file mode 100644
index 000000000..cff0be018
--- /dev/null
+++ b/pyload/plugins/accounts/DebridItaliaCom.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+import re
+import time
+
+from pyload.plugins.Account import Account
+
+
+class DebridItaliaCom(Account):
+ __name__ = "DebridItaliaCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Debriditalia.com account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ WALID_UNTIL_PATTERN = r"Premium valid till: (?P<D>[^|]+) \|"
+
+
+ def loadAccountInfo(self, user, req):
+ if 'Account premium not activated' in self.html:
+ return {"premium": False, "validuntil": None, "trafficleft": None}
+
+ m = re.search(self.WALID_UNTIL_PATTERN, self.html)
+ if m:
+ validuntil = int(time.mktime(time.strptime(m.group('D'), "%d/%m/%Y %H:%M")))
+ return {"premium": True, "validuntil": validuntil, "trafficleft": -1}
+ else:
+ self.logError('Unable to retrieve account information - Plugin may be out of date')
+
+ def login(self, user, data, req):
+ self.html = req.load("http://debriditalia.com/login.php",
+ get={"u": user, "p": data['password']})
+ if 'NO' in self.html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/DepositfilesCom.py b/pyload/plugins/accounts/DepositfilesCom.py
new file mode 100644
index 000000000..a17493cc1
--- /dev/null
+++ b/pyload/plugins/accounts/DepositfilesCom.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import strptime, mktime
+
+from pyload.plugins.Account import Account
+
+
+class DepositfilesCom(Account):
+ __name__ = "DepositfilesCom"
+ __type__ = "account"
+ __version__ = "0.3"
+
+ __description__ = """Depositfiles.com account plugin"""
+ __author_name__ = ("mkaay", "stickell", "Walter Purcaro")
+ __author_mail__ = ("mkaay@mkaay.de", "l.stickell@yahoo.it", "vuolter@gmail.com")
+
+
+ def loadAccountInfo(self, user, req):
+ src = req.load("https://dfiles.eu/de/gold/")
+ validuntil = re.search(r"Sie haben Gold Zugang bis: <b>(.*?)</b></div>", src).group(1)
+
+ validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S")))
+
+ return {"validuntil": validuntil, "trafficleft": -1}
+
+ def login(self, user, data, req):
+ src = req.load("https://dfiles.eu/de/login.php", get={"return": "/de/gold/payment.php"},
+ post={"login": user, "password": data['password']})
+ if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in src:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/EasybytezCom.py b/pyload/plugins/accounts/EasybytezCom.py
new file mode 100644
index 000000000..595e95ec4
--- /dev/null
+++ b/pyload/plugins/accounts/EasybytezCom.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import mktime, strptime, gmtime
+
+from pyload.plugins.Account import Account
+from pyload.plugins.internal.SimpleHoster import parseHtmlForm
+from pyload.utils import parseFileSize
+
+
+class EasybytezCom(Account):
+ __name__ = "EasybytezCom"
+ __type__ = "account"
+ __version__ = "0.04"
+
+ __description__ = """EasyBytez.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ VALID_UNTIL_PATTERN = r'Premium account expire:</TD><TD><b>([^<]+)</b>'
+ TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.easybytez.com/?op=my_account", decode=True)
+
+ validuntil = trafficleft = None
+ premium = False
+
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+ if m:
+ try:
+ self.logDebug("Expire date: " + m.group(1))
+ validuntil = mktime(strptime(m.group(1), "%d %B %Y"))
+ except Exception, e:
+ self.logError(e)
+ if validuntil > mktime(gmtime()):
+ premium = True
+ trafficleft = -1
+ else:
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ if m:
+ trafficleft = m.group(1)
+ if "Unlimited" in trafficleft:
+ trafficleft = -1
+ else:
+ trafficleft = parseFileSize(trafficleft) / 1024
+
+ return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ html = req.load('http://www.easybytez.com/login.html', decode=True)
+ action, inputs = parseHtmlForm('name="FL"', html)
+ inputs.update({"login": user,
+ "password": data['password'],
+ "redirect": "http://www.easybytez.com/"})
+
+ html = req.load(action, post=inputs, decode=True)
+
+ if 'Incorrect Login or Password' in html or '>Error<' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/EgoFilesCom.py b/pyload/plugins/accounts/EgoFilesCom.py
new file mode 100644
index 000000000..3886d053a
--- /dev/null
+++ b/pyload/plugins/accounts/EgoFilesCom.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+import re
+import time
+
+from pyload.plugins.Account import Account
+from pyload.utils import parseFileSize
+
+
+class EgoFilesCom(Account):
+ __name__ = "EgoFilesCom"
+ __type__ = "account"
+ __version__ = "0.2"
+
+ __description__ = """Egofiles.com account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ PREMIUM_ACCOUNT_PATTERN = '<br/>\s*Premium: (?P<P>[^/]*) / Traffic left: (?P<T>[\d.]*) (?P<U>\w*)\s*\\n\s*<br/>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://egofiles.com")
+ if 'You are logged as a Free User' in html:
+ return {"premium": False, "validuntil": None, "trafficleft": None}
+
+ m = re.search(self.PREMIUM_ACCOUNT_PATTERN, html)
+ if m:
+ validuntil = int(time.mktime(time.strptime(m.group('P'), "%Y-%m-%d %H:%M:%S")))
+ trafficleft = parseFileSize(m.group('T'), m.group('U')) / 1024
+ return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+ else:
+ self.logError('Unable to retrieve account information - Plugin may be out of date')
+
+ def login(self, user, data, req):
+ # Set English language
+ req.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True)
+
+ html = req.load("http://egofiles.com/ajax/register.php",
+ post={"log": 1,
+ "loginV": user,
+ "passV": data['password']})
+ if 'Login successful' not in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/EuroshareEu.py b/pyload/plugins/accounts/EuroshareEu.py
new file mode 100644
index 000000000..d74d4526b
--- /dev/null
+++ b/pyload/plugins/accounts/EuroshareEu.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+import re
+
+from pyload.plugins.Account import Account
+
+
+class EuroshareEu(Account):
+ __name__ = "EuroshareEu"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Euroshare.eu account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ self.relogin(user)
+ html = req.load("http://euroshare.eu/customer-zone/settings/")
+
+ m = re.search('id="input_expire_date" value="(\d+\.\d+\.\d+ \d+:\d+)"', html)
+ if m is None:
+ premium, validuntil = False, -1
+ else:
+ premium = True
+ validuntil = mktime(strptime(m.group(1), "%d.%m.%Y %H:%M"))
+
+ return {"validuntil": validuntil, "trafficleft": -1, "premium": premium}
+
+ def login(self, user, data, req):
+
+ html = req.load('http://euroshare.eu/customer-zone/login/', post={
+ "trvale": "1",
+ "login": user,
+ "password": data['password']
+ }, decode=True)
+
+ if u">Nesprávne prihlasovacie meno alebo heslo" in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FastixRu.py b/pyload/plugins/accounts/FastixRu.py
new file mode 100644
index 000000000..a7b939a2c
--- /dev/null
+++ b/pyload/plugins/accounts/FastixRu.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class FastixRu(Account):
+ __name__ = "FastixRu"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Fastix account plugin"""
+ __author_name__ = "Massimo Rosamilia"
+ __author_mail__ = "max@spiritix.eu"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ page = req.load("http://fastix.ru/api_v2/?apikey=%s&sub=getaccountdetails" % (data['api']))
+ page = json_loads(page)
+ points = page['points']
+ kb = float(points)
+ kb = kb * 1024 ** 2 / 1000
+ if points > 0:
+ account_info = {"validuntil": -1, "trafficleft": kb}
+ else:
+ account_info = {"validuntil": None, "trafficleft": None, "premium": False}
+ return account_info
+
+ def login(self, user, data, req):
+ page = req.load("http://fastix.ru/api_v2/?sub=get_apikey&email=%s&password=%s" % (user, data['password']))
+ api = json_loads(page)
+ api = api['apikey']
+ data['api'] = api
+ if "error_code" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FastshareCz.py b/pyload/plugins/accounts/FastshareCz.py
new file mode 100644
index 000000000..6e86f60fa
--- /dev/null
+++ b/pyload/plugins/accounts/FastshareCz.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Account import Account
+from pyload.utils import parseFileSize
+
+
+class FastshareCz(Account):
+ __name__ = "FastshareCz"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Fastshare.cz account plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ CREDIT_PATTERN = r'(?:Kredit|Credit)\s*</td>\s*<td[^>]*>([\d. \w]+)&nbsp;'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.fastshare.cz/user", decode=True)
+
+ m = re.search(self.CREDIT_PATTERN, html)
+ if m:
+ trafficleft = parseFileSize(m.group(1)) / 1024
+ premium = True if trafficleft else False
+ else:
+ trafficleft = None
+ premium = False
+
+ return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ req.load('http://www.fastshare.cz/login') # Do not remove or it will not login
+ html = req.load('http://www.fastshare.cz/sql.php', post={
+ "heslo": data['password'],
+ "login": user
+ }, decode=True)
+
+ if u'>Špatné uşivatelské jméno nebo heslo.<' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/File4safeCom.py b/pyload/plugins/accounts/File4safeCom.py
new file mode 100644
index 000000000..4da721193
--- /dev/null
+++ b/pyload/plugins/accounts/File4safeCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class File4safeCom(XFSPAccount):
+ __name__ = "File4safeCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """File4safe.com account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ MAIN_PAGE = "http://file4safe.com/"
+
+ LOGIN_FAIL_PATTERN = r'input_login'
+ PREMIUM_PATTERN = r'Extend Premium'
diff --git a/pyload/plugins/accounts/FilecloudIo.py b/pyload/plugins/accounts/FilecloudIo.py
new file mode 100644
index 000000000..5e6b001e8
--- /dev/null
+++ b/pyload/plugins/accounts/FilecloudIo.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class FilecloudIo(Account):
+ __name__ = "FilecloudIo"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """FilecloudIo account plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+ def loadAccountInfo(self, user, req):
+ # It looks like the first API request always fails, so we retry 5 times, it should work on the second try
+ for _ in xrange(5):
+ rep = req.load("https://secure.filecloud.io/api-fetch_apikey.api",
+ post={"username": user, "password": self.accounts[user]['password']})
+ rep = json_loads(rep)
+ if rep['status'] == 'ok':
+ break
+ elif rep['status'] == 'error' and rep['message'] == 'no such user or wrong password':
+ self.logError("Wrong username or password")
+ return {"valid": False, "premium": False}
+ else:
+ return {"premium": False}
+
+ akey = rep['akey']
+ self.accounts[user]['akey'] = akey # Saved for hoster plugin
+ rep = req.load("http://api.filecloud.io/api-fetch_account_details.api",
+ post={"akey": akey})
+ rep = json_loads(rep)
+
+ if rep['is_premium'] == 1:
+ return {"validuntil": int(rep['premium_until']), "trafficleft": -1}
+ else:
+ return {"premium": False}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("secure.filecloud.io", "lang", "en")
+ html = req.load('https://secure.filecloud.io/user-login.html')
+
+ if not hasattr(self, "form_data"):
+ self.form_data = {}
+
+ self.form_data['username'] = user
+ self.form_data['password'] = data['password']
+
+ html = req.load('https://secure.filecloud.io/user-login_p.html',
+ post=self.form_data,
+ multipart=True)
+
+ self.logged_in = True if "you have successfully logged in - filecloud.io" in html else False
+ self.form_data = {}
diff --git a/pyload/plugins/accounts/FilefactoryCom.py b/pyload/plugins/accounts/FilefactoryCom.py
new file mode 100644
index 000000000..1e2115ac3
--- /dev/null
+++ b/pyload/plugins/accounts/FilefactoryCom.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import mktime, strptime
+
+from pycurl import REFERER
+
+from pyload.plugins.Account import Account
+
+
+class FilefactoryCom(Account):
+ __name__ = "FilefactoryCom"
+ __type__ = "account"
+ __version__ = "0.14"
+
+ __description__ = """Filefactory.com account plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<d>\d{1,2})\w{1,2} (?P<m>\w{3}), (?P<y>\d{4})</strong>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.filefactory.com/account/")
+
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+ if m:
+ premium = True
+ validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d> \g<m> \g<y>', m.group(0))
+ validuntil = mktime(strptime(validuntil, "%d %b %Y"))
+ else:
+ premium = False
+ validuntil = -1
+
+ return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
+
+ def login(self, user, data, req):
+ req.http.c.setopt(REFERER, "http://www.filefactory.com/member/login.php")
+
+ html = req.load("http://www.filefactory.com/member/signin.php", post={
+ "loginEmail": user,
+ "loginPassword": data['password'],
+ "Submit": "Sign In"})
+
+ if req.lastEffectiveURL != "http://www.filefactory.com/account/":
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FilejungleCom.py b/pyload/plugins/accounts/FilejungleCom.py
new file mode 100644
index 000000000..ab52ffc04
--- /dev/null
+++ b/pyload/plugins/accounts/FilejungleCom.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+
+
+class FilejungleCom(Account):
+ __name__ = "FilejungleCom"
+ __type__ = "account"
+ __version__ = "0.11"
+
+ __description__ = """Filejungle.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ login_timeout = 60
+
+ URL = "http://filejungle.com/"
+ TRAFFIC_LEFT_PATTERN = r'"/extend_premium\.php">Until (\d+ [A-Za-z]+ \d+)<br'
+ LOGIN_FAILED_PATTERN = r'<span htmlfor="loginUser(Name|Password)" generated="true" class="fail_info">'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load(self.URL + "dashboard.php")
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ if m:
+ premium = True
+ validuntil = mktime(strptime(m.group(1), "%d %b %Y"))
+ else:
+ premium = False
+ validuntil = -1
+
+ return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
+
+ def login(self, user, data, req):
+ html = req.load(self.URL + "login.php", post={
+ "loginUserName": user,
+ "loginUserPassword": data['password'],
+ "loginFormSubmit": "Login",
+ "recaptcha_challenge_field": "",
+ "recaptcha_response_field": "",
+ "recaptcha_shortencode_field": ""})
+
+ if re.search(self.LOGIN_FAILED_PATTERN, html):
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FilerNet.py b/pyload/plugins/accounts/FilerNet.py
new file mode 100644
index 000000000..51c2e5d75
--- /dev/null
+++ b/pyload/plugins/accounts/FilerNet.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+
+import re
+import time
+
+from pyload.plugins.Account import Account
+from pyload.utils import parseFileSize
+
+
+class FilerNet(Account):
+ __name__ = "FilerNet"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Filer.net account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ TOKEN_PATTERN = r'_csrf_token" value="([^"]+)" />'
+ WALID_UNTIL_PATTERN = r"Der Premium-Zugang ist gÃŒltig bis (.+)\.\s*</td>"
+ TRAFFIC_PATTERN = r'Traffic</th>\s*<td>([^<]+)</td>'
+ FREE_PATTERN = r'Account Status</th>\s*<td>\s*Free'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("https://filer.net/profile")
+
+ # Free user
+ if re.search(self.FREE_PATTERN, html):
+ return {"premium": False, "validuntil": None, "trafficleft": None}
+
+ until = re.search(self.WALID_UNTIL_PATTERN, html)
+ traffic = re.search(self.TRAFFIC_PATTERN, html)
+ if until and traffic:
+ validuntil = int(time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S")))
+ trafficleft = parseFileSize(traffic.group(1)) / 1024
+ return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+ else:
+ self.logError('Unable to retrieve account information - Plugin may be out of date')
+ return {"premium": False, "validuntil": None, "trafficleft": None}
+
+ def login(self, user, data, req):
+ html = req.load("https://filer.net/login")
+ token = re.search(self.TOKEN_PATTERN, html).group(1)
+ html = req.load("https://filer.net/login_check",
+ post={"_username": user, "_password": data['password'],
+ "_remember_me": "on", "_csrf_token": token, "_target_path": "https://filer.net/"})
+ if 'Logout' not in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FilerioCom.py b/pyload/plugins/accounts/FilerioCom.py
new file mode 100644
index 000000000..0a8bc10cd
--- /dev/null
+++ b/pyload/plugins/accounts/FilerioCom.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class FilerioCom(XFSPAccount):
+ __name__ = "FilerioCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """FileRio.in account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ MAIN_PAGE = "http://filerio.in/"
diff --git a/pyload/plugins/accounts/FilesMailRu.py b/pyload/plugins/accounts/FilesMailRu.py
new file mode 100644
index 000000000..a3ef4b348
--- /dev/null
+++ b/pyload/plugins/accounts/FilesMailRu.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class FilesMailRu(Account):
+ __name__ = "FilesMailRu"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Filesmail.ru account plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def loadAccountInfo(self, user, req):
+ return {"validuntil": None, "trafficleft": None}
+
+ def login(self, user, data, req):
+ user, domain = user.split("@")
+
+ page = req.load("http://swa.mail.ru/cgi-bin/auth", None,
+ {"Domain": domain, "Login": user, "Password": data['password'],
+ "Page": "http://files.mail.ru/"}, cookies=True)
+
+ if "НеверМПе ОЌя пПльзПвателя ОлО парПль" in page: # @TODO seems not to work
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FileserveCom.py b/pyload/plugins/accounts/FileserveCom.py
new file mode 100644
index 000000000..211023991
--- /dev/null
+++ b/pyload/plugins/accounts/FileserveCom.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class FileserveCom(Account):
+ __name__ = "FileserveCom"
+ __type__ = "account"
+ __version__ = "0.2"
+
+ __description__ = """Fileserve.com account plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+
+ page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
+ "submit": "Submit+Query"})
+ res = json_loads(page)
+
+ if res['type'] == "premium":
+ validuntil = mktime(strptime(res['expireTime'], "%Y-%m-%d %H:%M:%S"))
+ return {"trafficleft": res['traffic'], "validuntil": validuntil}
+ else:
+ return {"premium": False, "trafficleft": None, "validuntil": None}
+
+ def login(self, user, data, req):
+ page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
+ "submit": "Submit+Query"})
+ res = json_loads(page)
+
+ if not res['type']:
+ self.wrongPassword()
+
+ #login at fileserv page
+ req.load("http://www.fileserve.com/login.php",
+ post={"loginUserName": user, "loginUserPassword": data['password'], "autoLogin": "checked",
+ "loginFormSubmit": "Login"})
diff --git a/pyload/plugins/accounts/FourSharedCom.py b/pyload/plugins/accounts/FourSharedCom.py
new file mode 100644
index 000000000..a62749c43
--- /dev/null
+++ b/pyload/plugins/accounts/FourSharedCom.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class FourSharedCom(Account):
+ __name__ = "FourSharedCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """FourShared.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ #fixme
+ return {"validuntil": -1, "trafficleft": -1, "premium": False}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("www.4shared.com", "4langcookie", "en")
+ response = req.load('http://www.4shared.com/login',
+ post={"login": user,
+ "password": data['password'],
+ "remember": "false",
+ "doNotRedirect": "true"})
+ self.logDebug(response)
+ response = json_loads(response)
+
+ if not "ok" in response or response['ok'] != True:
+ if "rejectReason" in response and response['rejectReason'] != True:
+ self.logError(response['rejectReason'])
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FreakshareCom.py b/pyload/plugins/accounts/FreakshareCom.py
new file mode 100644
index 000000000..2484a2da1
--- /dev/null
+++ b/pyload/plugins/accounts/FreakshareCom.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import strptime, mktime
+
+from pyload.plugins.Account import Account
+
+
+class FreakshareCom(Account):
+ __name__ = "FreakshareCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Freakshare.com account plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def loadAccountInfo(self, user, req):
+ page = req.load("http://freakshare.com/")
+
+ validuntil = r"ltig bis:</td>\s*<td><b>([0-9 \-:.]+)</b></td>"
+ validuntil = re.search(validuntil, page, re.MULTILINE)
+ validuntil = validuntil.group(1).strip()
+ validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M"))
+
+ traffic = r"Traffic verbleibend:</td>\s*<td>([^<]+)"
+ traffic = re.search(traffic, page, re.MULTILINE)
+ traffic = traffic.group(1).strip()
+ traffic = self.parseTraffic(traffic)
+
+ return {"validuntil": validuntil, "trafficleft": traffic}
+
+ def login(self, user, data, req):
+ page = req.load("http://freakshare.com/login.html", None,
+ {"submit": "Login", "user": user, "pass": data['password']}, cookies=True)
+
+ if "Falsche Logindaten!" in page or "Wrong Username or Password!" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/FreeWayMe.py b/pyload/plugins/accounts/FreeWayMe.py
new file mode 100644
index 000000000..baca53cd4
--- /dev/null
+++ b/pyload/plugins/accounts/FreeWayMe.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class FreeWayMe(Account):
+ __name__ = "FreeWayMe"
+ __type__ = "account"
+ __version__ = "0.11"
+
+ __description__ = """FreeWayMe account plugin"""
+ __author_name__ = "Nicolas Giese"
+ __author_mail__ = "james@free-way.me"
+
+
+ def loadAccountInfo(self, user, req):
+ status = self.getAccountStatus(user, req)
+ if not status:
+ return False
+ self.logDebug(status)
+
+ account_info = {"validuntil": -1, "premium": False}
+ if status['premium'] == "Free":
+ account_info['trafficleft'] = int(status['guthaben']) * 1024
+ elif status['premium'] == "Spender":
+ account_info['trafficleft'] = -1
+ elif status['premium'] == "Flatrate":
+ account_info = {"validuntil": int(status['Flatrate']),
+ "trafficleft": -1,
+ "premium": True}
+
+ return account_info
+
+ def getpw(self, user):
+ return self.accounts[user]['password']
+
+ def login(self, user, data, req):
+ status = self.getAccountStatus(user, req)
+
+ # Check if user and password are valid
+ if not status:
+ self.wrongPassword()
+
+ def getAccountStatus(self, user, req):
+ answer = req.load("https://www.free-way.me/ajax/jd.php",
+ get={"id": 4, "user": user, "pass": self.accounts[user]['password']})
+ self.logDebug("login: %s" % answer)
+ if answer == "Invalid login":
+ self.wrongPassword()
+ return False
+ return json_loads(answer)
diff --git a/pyload/plugins/accounts/FshareVn.py b/pyload/plugins/accounts/FshareVn.py
new file mode 100644
index 000000000..3d664629b
--- /dev/null
+++ b/pyload/plugins/accounts/FshareVn.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+from pycurl import REFERER
+import re
+
+from pyload.plugins.Account import Account
+
+
+class FshareVn(Account):
+ __name__ = "FshareVn"
+ __type__ = "account"
+ __version__ = "0.07"
+
+ __description__ = """Fshare.vn account plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ VALID_UNTIL_PATTERN = ur'<dt>Thời hạn dùng:</dt>\s*<dd>([^<]+)</dd>'
+ LIFETIME_PATTERN = ur'<dt>Lần đăng nhập trước:</dt>\s*<dd>[^<]+</dd>'
+ TRAFFIC_LEFT_PATTERN = ur'<dt>Tổng Dung Lượng Tài Khoản</dt>\s*<dd[^>]*>([0-9.]+) ([kKMG])B</dd>'
+ DIRECT_DOWNLOAD_PATTERN = ur'<input type="checkbox"\s*([^=>]*)[^>]*/>Kích hoạt download trực tiếp</dt>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.fshare.vn/account_info.php", decode=True)
+
+ if re.search(self.LIFETIME_PATTERN, html):
+ self.logDebug("Lifetime membership detected")
+ trafficleft = self.getTrafficLeft()
+ return {"validuntil": -1, "trafficleft": trafficleft, "premium": True}
+
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+ if m:
+ premium = True
+ validuntil = mktime(strptime(m.group(1), '%I:%M:%S %p %d-%m-%Y'))
+ trafficleft = self.getTrafficLeft()
+ else:
+ premium = False
+ validuntil = None
+ trafficleft = None
+
+ return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ req.http.c.setopt(REFERER, "https://www.fshare.vn/login.php")
+
+ html = req.load('https://www.fshare.vn/login.php', post={
+ "login_password": data['password'],
+ "login_useremail": user,
+ "url_refe": "http://www.fshare.vn/index.php"
+ }, referer=True, decode=True)
+
+ if not re.search(r'<img\s+alt="VIP"', html):
+ self.wrongPassword()
+
+ def getTrafficLeft(self):
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ return float(m.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[m.group(2)] if m else 0
diff --git a/pyload/plugins/accounts/Ftp.py b/pyload/plugins/accounts/Ftp.py
new file mode 100644
index 000000000..23b637050
--- /dev/null
+++ b/pyload/plugins/accounts/Ftp.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class Ftp(Account):
+ __name__ = "Ftp"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Ftp dummy account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ login_timeout = info_threshold = -1 #: Unlimited
diff --git a/pyload/plugins/accounts/HellshareCz.py b/pyload/plugins/accounts/HellshareCz.py
new file mode 100644
index 000000000..ae3f974a1
--- /dev/null
+++ b/pyload/plugins/accounts/HellshareCz.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+import re
+import time
+
+from pyload.plugins.Account import Account
+
+
+class HellshareCz(Account):
+ __name__ = "HellshareCz"
+ __type__ = "account"
+ __version__ = "0.14"
+
+ __description__ = """Hellshare.cz account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ CREDIT_LEFT_PATTERN = r'<div class="credit-link">\s*<table>\s*<tr>\s*<th>(\d+|\d\d\.\d\d\.)</th>'
+
+
+ def loadAccountInfo(self, user, req):
+ self.relogin(user)
+ html = req.load("http://www.hellshare.com/")
+
+ m = re.search(self.CREDIT_LEFT_PATTERN, html)
+ if m is None:
+ trafficleft = None
+ validuntil = None
+ premium = False
+ else:
+ credit = m.group(1)
+ premium = True
+ try:
+ if "." in credit:
+ #Time-based account
+ vt = [int(x) for x in credit.split('.')[:2]]
+ lt = time.localtime()
+ year = lt.tm_year + int(vt[1] < lt.tm_mon or (vt[1] == lt.tm_mon and vt[0] < lt.tm_mday))
+ validuntil = time.mktime(time.strptime("%s%d 23:59:59" % (credit, year), "%d.%m.%Y %H:%M:%S"))
+ trafficleft = -1
+ else:
+ #Traffic-based account
+ trafficleft = int(credit) * 1024
+ validuntil = -1
+ except Exception, e:
+ self.logError('Unable to parse credit info', e)
+ validuntil = -1
+ trafficleft = -1
+
+ return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ html = req.load('http://www.hellshare.com/')
+ if req.lastEffectiveURL != 'http://www.hellshare.com/':
+ #Switch to English
+ self.logDebug('Switch lang - URL: %s' % req.lastEffectiveURL)
+ json = req.load("%s?do=locRouter-show" % req.lastEffectiveURL)
+ hash = re.search(r"(--[0-9a-f]+-)", json).group(1)
+ self.logDebug('Switch lang - HASH: %s' % hash)
+ html = req.load('http://www.hellshare.com/%s/' % hash)
+
+ if re.search(self.CREDIT_LEFT_PATTERN, html):
+ self.logDebug('Already logged in')
+ return
+
+ html = req.load('http://www.hellshare.com/login?do=loginForm-submit', post={
+ "login": "Log in",
+ "password": data['password'],
+ "username": user,
+ "perm_login": "on"
+ })
+
+ if "<p>You input a wrong user name or wrong password</p>" in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/HotfileCom.py b/pyload/plugins/accounts/HotfileCom.py
new file mode 100644
index 000000000..ec164d14f
--- /dev/null
+++ b/pyload/plugins/accounts/HotfileCom.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+from time import strptime, mktime
+import hashlib
+
+from pyload.plugins.Account import Account
+
+
+class HotfileCom(Account):
+ __name__ = "HotfileCom"
+ __type__ = "account"
+ __version__ = "0.2"
+
+ __description__ = """Hotfile.com account plugin"""
+ __author_name__ = ("mkaay", "JoKoT3")
+ __author_mail__ = ("mkaay@mkaay.de", "jokot3@gmail.com")
+
+
+ def loadAccountInfo(self, user, req):
+ resp = self.apiCall("getuserinfo", user=user)
+ if resp.startswith("."):
+ self.core.debug("HotfileCom API Error: %s" % resp)
+ raise Exception
+ info = {}
+ for p in resp.split("&"):
+ key, value = p.split("=")
+ info[key] = value
+
+ if info['is_premium'] == '1':
+ info['premium_until'] = info['premium_until'].replace("T", " ")
+ zone = info['premium_until'][19:]
+ info['premium_until'] = info['premium_until'][:19]
+ zone = int(zone[:3])
+
+ validuntil = int(mktime(strptime(info['premium_until'], "%Y-%m-%d %H:%M:%S"))) + (zone * 60 * 60)
+ tmp = {"validuntil": validuntil, "trafficleft": -1, "premium": True}
+
+ elif info['is_premium'] == '0':
+ tmp = {"premium": False}
+
+ return tmp
+
+ def apiCall(self, method, post={}, user=None):
+ if user:
+ data = self.getAccountData(user)
+ else:
+ user, data = self.selectAccount()
+
+ req = self.getAccountRequest(user)
+
+ digest = req.load("http://api.hotfile.com/", post={"action": "getdigest"})
+ h = hashlib.md5()
+ h.update(data['password'])
+ hp = h.hexdigest()
+ h = hashlib.md5()
+ h.update(hp)
+ h.update(digest)
+ pwhash = h.hexdigest()
+
+ post.update({"action": method})
+ post.update({"username": user, "passwordmd5dig": pwhash, "digest": digest})
+ resp = req.load("http://api.hotfile.com/", post=post)
+ req.close()
+ return resp
+
+ def login(self, user, data, req):
+ cj = self.getAccountCookies(user)
+ cj.setCookie("hotfile.com", "lang", "en")
+ req.load("http://hotfile.com/", cookies=True)
+ page = req.load("http://hotfile.com/login.php", post={"returnto": "/", "user": user, "pass": data['password']},
+ cookies=True)
+
+ if "Bad username/password" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/Http.py b/pyload/plugins/accounts/Http.py
new file mode 100644
index 000000000..eda087c91
--- /dev/null
+++ b/pyload/plugins/accounts/Http.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class Http(Account):
+ __name__ = "Http"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Http dummy account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ login_timeout = info_threshold = -1 #: Unlimited
diff --git a/pyload/plugins/accounts/LetitbitNet.py b/pyload/plugins/accounts/LetitbitNet.py
new file mode 100644
index 000000000..88e679f8e
--- /dev/null
+++ b/pyload/plugins/accounts/LetitbitNet.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+# from pyload.common.json_layer import json_loads, json_dumps
+
+
+class LetitbitNet(Account):
+ __name__ = "LetitbitNet"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Letitbit.net account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def loadAccountInfo(self, user, req):
+ ## DISABLED BECAUSE IT GET 'key exausted' EVEN IF VALID ##
+ # api_key = self.accounts[user]['password']
+ # json_data = [api_key, ['key/info']]
+ # api_rep = req.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
+ # self.logDebug('API Key Info: ' + api_rep)
+ # api_rep = json_loads(api_rep)
+ #
+ # if api_rep['status'] == 'FAIL':
+ # self.logWarning(api_rep['data'])
+ # return {'valid': False, 'premium': False}
+
+ return {"premium": True}
+
+ def login(self, user, data, req):
+ # API_KEY is the username and the PREMIUM_KEY is the password
+ self.logInfo('You must use your API KEY as username and the PREMIUM KEY as password.')
diff --git a/pyload/plugins/accounts/LinksnappyCom.py b/pyload/plugins/accounts/LinksnappyCom.py
new file mode 100644
index 000000000..4ac046988
--- /dev/null
+++ b/pyload/plugins/accounts/LinksnappyCom.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+
+from hashlib import md5
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class LinksnappyCom(Account):
+ __name__ = "LinksnappyCom"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Linksnappy.com account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ r = req.load('http://gen.linksnappy.com/lseAPI.php',
+ get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
+ self.logDebug("JSON data: " + r)
+ j = json_loads(r)
+
+ if j['error']:
+ return {"premium": False}
+
+ validuntil = j['return']['expire']
+ if validuntil == 'lifetime':
+ validuntil = -1
+ elif validuntil == 'expired':
+ return {"premium": False}
+ else:
+ validuntil = float(validuntil)
+
+ if 'trafficleft' not in j['return'] or isinstance(j['return']['trafficleft'], str):
+ trafficleft = -1
+ else:
+ trafficleft = int(j['return']['trafficleft']) * 1024
+
+ return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+
+ def login(self, user, data, req):
+ r = req.load('http://gen.linksnappy.com/lseAPI.php',
+ get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
+
+ if 'Invalid Account Details' in r:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/MegaDebridEu.py b/pyload/plugins/accounts/MegaDebridEu.py
new file mode 100644
index 000000000..b449d7246
--- /dev/null
+++ b/pyload/plugins/accounts/MegaDebridEu.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class MegaDebridEu(Account):
+ __name__ = "MegaDebridEu"
+ __type__ = "account"
+ __version__ = "0.2"
+
+ __description__ = """mega-debrid.eu account plugin"""
+ __author_name__ = "D.Ducatel"
+ __author_mail__ = "dducatel@je-geek.fr"
+
+ # Define the base URL of MegaDebrid api
+ API_URL = "https://www.mega-debrid.eu/api.php"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ jsonResponse = req.load(self.API_URL,
+ get={'action': 'connectUser', 'login': user, 'password': data['password']})
+ response = json_loads(jsonResponse)
+
+ if response['response_code'] == "ok":
+ return {"premium": True, "validuntil": float(response['vip_end']), "status": True}
+ else:
+ self.logError(response)
+ return {"status": False, "premium": False}
+
+ def login(self, user, data, req):
+ jsonResponse = req.load(self.API_URL,
+ get={'action': 'connectUser', 'login': user, 'password': data['password']})
+ response = json_loads(jsonResponse)
+ if response['response_code'] != "ok":
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/MegasharesCom.py b/pyload/plugins/accounts/MegasharesCom.py
new file mode 100644
index 000000000..2032d0578
--- /dev/null
+++ b/pyload/plugins/accounts/MegasharesCom.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+
+
+class MegasharesCom(Account):
+ __name__ = "MegasharesCom"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Megashares.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ VALID_UNTIL_PATTERN = r'<p class="premium_info_box">Period Ends: (\w{3} \d{1,2}, \d{4})</p>'
+
+
+ def loadAccountInfo(self, user, req):
+ #self.relogin(user)
+ html = req.load("http://d01.megashares.com/myms.php", decode=True)
+
+ premium = False if '>Premium Upgrade<' in html else True
+
+ validuntil = trafficleft = -1
+ try:
+ timestr = re.search(self.VALID_UNTIL_PATTERN, html).group(1)
+ self.logDebug(timestr)
+ validuntil = mktime(strptime(timestr, "%b %d, %Y"))
+ except Exception, e:
+ self.logError(e)
+
+ return {"validuntil": validuntil, "trafficleft": -1, "premium": premium}
+
+ def login(self, user, data, req):
+ html = req.load('http://d01.megashares.com/myms_login.php', post={
+ "httpref": "",
+ "myms_login": "Login",
+ "mymslogin_name": user,
+ "mymspassword": data['password']
+ }, decode=True)
+
+ if not '<span class="b ml">%s</span>' % user in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/MovReelCom.py b/pyload/plugins/accounts/MovReelCom.py
new file mode 100644
index 000000000..0f80b1aa8
--- /dev/null
+++ b/pyload/plugins/accounts/MovReelCom.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class MovReelCom(XFSPAccount):
+ __name__ = "MovReelCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Movreel.com account plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ login_timeout = 60
+ info_threshold = 30
+
+ MAIN_PAGE = "http://movreel.com/"
+
+ TRAFFIC_LEFT_PATTERN = r'Traffic.*?<b>([^<]+)</b>'
+ LOGIN_FAIL_PATTERN = r'<b[^>]*>Incorrect Login or Password</b><br>'
diff --git a/pyload/plugins/accounts/MultiDebridCom.py b/pyload/plugins/accounts/MultiDebridCom.py
new file mode 100644
index 000000000..fa10c92cc
--- /dev/null
+++ b/pyload/plugins/accounts/MultiDebridCom.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+from time import time
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class MultiDebridCom(Account):
+ __name__ = "MultiDebridCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Multi-debrid.com account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def loadAccountInfo(self, user, req):
+ if 'days_left' in self.json_data:
+ validuntil = int(time() + self.json_data['days_left'] * 24 * 60 * 60)
+ return {"premium": True, "validuntil": validuntil, "trafficleft": -1}
+ else:
+ self.logError('Unable to get account information')
+
+ def login(self, user, data, req):
+ # Password to use is the API-Password written in http://multi-debrid.com/myaccount
+ html = req.load("http://multi-debrid.com/api.php",
+ get={"user": user, "pass": data['password']})
+ self.logDebug('JSON data: ' + html)
+ self.json_data = json_loads(html)
+ if self.json_data['status'] != 'ok':
+ self.logError('Invalid login. The password to use is the API-Password you find in your "My Account" page')
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/MultishareCz.py b/pyload/plugins/accounts/MultishareCz.py
new file mode 100644
index 000000000..7e72ff513
--- /dev/null
+++ b/pyload/plugins/accounts/MultishareCz.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+#from time import mktime, strptime
+#from pycurl import REFERER
+import re
+from pyload.utils import parseFileSize
+
+
+class MultishareCz(Account):
+ __name__ = "MultishareCz"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Multishare.cz account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ TRAFFIC_LEFT_PATTERN = r'<span class="profil-zvyrazneni">Kredit:</span>\s*<strong>(?P<S>[0-9,]+)&nbsp;(?P<U>\w+)</strong>'
+ ACCOUNT_INFO_PATTERN = r'<input type="hidden" id="(u_ID|u_hash)" name="[^"]*" value="([^"]+)">'
+
+
+ def loadAccountInfo(self, user, req):
+ #self.relogin(user)
+ html = req.load("http://www.multishare.cz/profil/", decode=True)
+
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ trafficleft = parseFileSize(m.group('S'), m.group('U')) / 1024 if m else 0
+ self.premium = True if trafficleft else False
+
+ html = req.load("http://www.multishare.cz/", decode=True)
+ mms_info = dict(re.findall(self.ACCOUNT_INFO_PATTERN, html))
+
+ return dict(mms_info, **{"validuntil": -1, "trafficleft": trafficleft})
+
+ def login(self, user, data, req):
+ html = req.load('http://www.multishare.cz/html/prihlaseni_process.php', post={
+ "akce": "Přihlásit",
+ "heslo": data['password'],
+ "jmeno": user
+ }, decode=True)
+
+ if '<div class="akce-chyba akce">' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/NetloadIn.py b/pyload/plugins/accounts/NetloadIn.py
new file mode 100644
index 000000000..988affb51
--- /dev/null
+++ b/pyload/plugins/accounts/NetloadIn.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import time
+
+from pyload.plugins.Account import Account
+
+
+class NetloadIn(Account):
+ __name__ = "NetloadIn"
+ __type__ = "account"
+ __version__ = "0.22"
+
+ __description__ = """Netload.in account plugin"""
+ __author_name__ = ("RaNaN", "CryNickSystems")
+ __author_mail__ = ("RaNaN@pyload.org", "webmaster@pcProfil.de")
+
+
+ def loadAccountInfo(self, user, req):
+ page = req.load("http://netload.in/index.php?id=2&lang=de")
+ left = r">(\d+) (Tag|Tage), (\d+) Stunden<"
+ left = re.search(left, page)
+ if left:
+ validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60
+ trafficleft = -1
+ premium = True
+ else:
+ validuntil = None
+ premium = False
+ trafficleft = None
+ return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ page = req.load("http://netload.in/index.php", None,
+ {"txtuser": user, "txtpass": data['password'], "txtcheck": "login", "txtlogin": "Login"},
+ cookies=True)
+ if "password or it might be invalid!" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/OboomCom.py b/pyload/plugins/accounts/OboomCom.py
new file mode 100644
index 000000000..5d30c5955
--- /dev/null
+++ b/pyload/plugins/accounts/OboomCom.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+import time
+
+from pyload.lib.beaker.crypto.pbkdf2 import PBKDF2
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Account import Account
+
+
+class OboomCom(Account):
+ __name__ = "OboomCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Oboom.com account plugin"""
+ __author_name__ = "stanley"
+ __author_mail__ = "stanley.foerster@gmail.com"
+
+
+ def loadAccountData(self, user, req):
+ passwd = self.getAccountData(user)['password']
+ salt = passwd[::-1]
+ pbkdf2 = PBKDF2(passwd, salt, 1000).hexread(16)
+ result = json_loads(req.load("https://www.oboom.com/1.0/login", get={"auth": user, "pass": pbkdf2}))
+ if not result[0] == 200:
+ self.logWarning("Failed to log in: %s" % result[1])
+ self.wrongPassword()
+ return result[1]
+
+ def loadAccountInfo(self, name, req):
+ accountData = self.loadAccountData(name, req)
+ userData = accountData['user']
+
+ if "premium_unix" in userData:
+ validUntilUtc = int(userData['premium_unix'])
+ if validUntilUtc > int(time.time()):
+ premium = True
+ validUntil = validUntilUtc
+ traffic = userData['traffic']
+ trafficLeft = traffic['current']
+ maxTraffic = traffic['max']
+ session = accountData['session']
+ return {"premium": premium,
+ "validuntil": validUntil,
+ "trafficleft": trafficLeft / 1024,
+ "maxtraffic": maxTraffic / 1024,
+ "session": session
+ }
+ return {"premium": False, "validuntil": -1}
+
+ def login(self, user, data, req):
+ self.loadAccountData(user, req)
diff --git a/pyload/plugins/accounts/OneFichierCom.py b/pyload/plugins/accounts/OneFichierCom.py
new file mode 100644
index 000000000..36899e2a5
--- /dev/null
+++ b/pyload/plugins/accounts/OneFichierCom.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import strptime, mktime
+from pycurl import REFERER
+
+from pyload.plugins.Account import Account
+
+
+class OneFichierCom(Account):
+ __name__ = "OneFichierCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """1fichier.com account plugin"""
+ __author_name__ = "Elrick69"
+ __author_mail__ = "elrick69[AT]rocketmail[DOT]com"
+
+ VALID_UNTIL_PATTERN = r'You are a premium user until (?P<d>\d{2})/(?P<m>\d{2})/(?P<y>\d{4})'
+
+
+ def loadAccountInfo(self, user, req):
+
+ html = req.load("http://1fichier.com/console/abo.pl")
+
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+
+ if m:
+ premium = True
+ validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d>/\g<m>/\g<y>', m.group(0))
+ validuntil = int(mktime(strptime(validuntil, "%d/%m/%Y")))
+ else:
+ premium = False
+ validuntil = -1
+
+ return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
+
+ def login(self, user, data, req):
+
+ req.http.c.setopt(REFERER, "http://1fichier.com/login.pl?lg=en")
+
+ html = req.load("http://1fichier.com/login.pl?lg=en", post={
+ "mail": user,
+ "pass": data['password'],
+ "Login": "Login"})
+
+ if r'<div class="error_message">Invalid username or password.</div>' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/OverLoadMe.py b/pyload/plugins/accounts/OverLoadMe.py
new file mode 100644
index 000000000..ba5a58158
--- /dev/null
+++ b/pyload/plugins/accounts/OverLoadMe.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class OverLoadMe(Account):
+ __name__ = "OverLoadMe"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Over-Load.me account plugin"""
+ __author_name__ = "marley"
+ __author_mail__ = "marley@over-load.me"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ page = req.load("https://api.over-load.me/account.php", get={"user": user, "auth": data['password']}).strip()
+ data = json_loads(page)
+
+ # Check for premium
+ if data['membership'] == "Free":
+ return {"premium": False}
+
+ account_info = {"validuntil": data['expirationunix'], "trafficleft": -1}
+ return account_info
+
+ def login(self, user, data, req):
+ jsondata = req.load("https://api.over-load.me/account.php",
+ get={"user": user, "auth": data['password']}).strip()
+ data = json_loads(jsondata)
+
+ if data['err'] == 1:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/Premium4Me.py b/pyload/plugins/accounts/Premium4Me.py
new file mode 100644
index 000000000..01b4b834e
--- /dev/null
+++ b/pyload/plugins/accounts/Premium4Me.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class Premium4Me(Account):
+ __name__ = "Premium4Me"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Premium.to account plugin"""
+ __author_name__ = ("RaNaN", "zoidberg", "stickell")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+ def loadAccountInfo(self, user, req):
+ traffic = req.load("http://premium.to/api/traffic.php?authcode=%s" % self.authcode)
+
+ account_info = {"trafficleft": int(traffic) / 1024,
+ "validuntil": -1}
+
+ return account_info
+
+ def login(self, user, data, req):
+ self.authcode = req.load("http://premium.to/api/getauthcode.php?username=%s&password=%s" % (
+ user, data['password'])).strip()
+
+ if "wrong username" in self.authcode:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/PremiumizeMe.py b/pyload/plugins/accounts/PremiumizeMe.py
new file mode 100644
index 000000000..822ca8db9
--- /dev/null
+++ b/pyload/plugins/accounts/PremiumizeMe.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+from pyload.common.json_layer import json_loads
+
+
+class PremiumizeMe(Account):
+ __name__ = "PremiumizeMe"
+ __type__ = "account"
+ __version__ = "0.11"
+
+ __description__ = """Premiumize.me account plugin"""
+ __author_name__ = "Florian Franzen"
+ __author_mail__ = "FlorianFranzen@gmail.com"
+
+
+ def loadAccountInfo(self, user, req):
+ # Get user data from premiumize.me
+ status = self.getAccountStatus(user, req)
+ self.logDebug(status)
+
+ # Parse account info
+ account_info = {"validuntil": float(status['result']['expires']),
+ "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)}
+
+ if status['result']['type'] == 'free':
+ account_info['premium'] = False
+
+ return account_info
+
+ def login(self, user, data, req):
+ # Get user data from premiumize.me
+ status = self.getAccountStatus(user, req)
+
+ # Check if user and password are valid
+ if status['status'] != 200:
+ self.wrongPassword()
+
+ def getAccountStatus(self, user, req):
+ # Use premiumize.me API v1 (see https://secure.premiumize.me/?show=api)
+ # to retrieve account info and return the parsed json answer
+ answer = req.load(
+ "https://api.premiumize.me/pm-api/v1.php?method=accountstatus&params[login]=%s&params[pass]=%s" % (
+ user, self.accounts[user]['password']))
+ return json_loads(answer)
diff --git a/pyload/plugins/accounts/QuickshareCz.py b/pyload/plugins/accounts/QuickshareCz.py
new file mode 100644
index 000000000..6abc02b1c
--- /dev/null
+++ b/pyload/plugins/accounts/QuickshareCz.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Account import Account
+from pyload.utils import parseFileSize
+
+
+class QuickshareCz(Account):
+ __name__ = "QuickshareCz"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Quickshare.cz account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.quickshare.cz/premium", decode=True)
+
+ m = re.search(r'Stav kreditu: <strong>(.+?)</strong>', html)
+ if m:
+ trafficleft = parseFileSize(m.group(1)) / 1024
+ premium = True if trafficleft else False
+ else:
+ trafficleft = None
+ premium = False
+
+ return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php', post={
+ "akce": u'Přihlásit',
+ "heslo": data['password'],
+ "jmeno": user
+ }, decode=True)
+
+ if u'>TakovÜ uşivatel neexistuje.<' in html or u'>Špatné heslo.<' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/RPNetBiz.py b/pyload/plugins/accounts/RPNetBiz.py
new file mode 100644
index 000000000..0e600b4e3
--- /dev/null
+++ b/pyload/plugins/accounts/RPNetBiz.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class RPNetBiz(Account):
+ __name__ = "RPNetBiz"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """RPNet.biz account plugin"""
+ __author_name__ = "Dman"
+ __author_mail__ = "dmanugm@gmail.com"
+
+
+ def loadAccountInfo(self, user, req):
+ # Get account information from rpnet.biz
+ response = self.getAccountStatus(user, req)
+ try:
+ if response['accountInfo']['isPremium']:
+ # Parse account info. Change the trafficleft later to support per host info.
+ account_info = {"validuntil": int(response['accountInfo']['premiumExpiry']),
+ "trafficleft": -1, "premium": True}
+ else:
+ account_info = {"validuntil": None, "trafficleft": None, "premium": False}
+
+ except KeyError:
+ #handle wrong password exception
+ account_info = {"validuntil": None, "trafficleft": None, "premium": False}
+
+ return account_info
+
+ def login(self, user, data, req):
+ # Get account information from rpnet.biz
+ response = self.getAccountStatus(user, req)
+
+ # If we have an error in the response, we have wrong login information
+ if 'error' in response:
+ self.wrongPassword()
+
+ def getAccountStatus(self, user, req):
+ # Using the rpnet API, check if valid premium account
+ response = req.load("https://premium.rpnet.biz/client_api.php",
+ get={"username": user, "password": self.accounts[user]['password'],
+ "action": "showAccountInformation"})
+ self.logDebug("JSON data: %s" % response)
+
+ return json_loads(response)
diff --git a/pyload/plugins/accounts/RapidgatorNet.py b/pyload/plugins/accounts/RapidgatorNet.py
new file mode 100644
index 000000000..391d7ffcb
--- /dev/null
+++ b/pyload/plugins/accounts/RapidgatorNet.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class RapidgatorNet(Account):
+ __name__ = "RapidgatorNet"
+ __type__ = "account"
+ __version__ = "0.04"
+
+ __description__ = """Rapidgator.net account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ API_URL = 'http://rapidgator.net/api/user'
+
+
+ def loadAccountInfo(self, user, req):
+ try:
+ sid = self.getAccountData(user).get('SID')
+ assert sid
+
+ json = req.load("%s/info?sid=%s" % (self.API_URL, sid))
+ self.logDebug("API:USERINFO", json)
+ json = json_loads(json)
+
+ if json['response_status'] == 200:
+ if "reset_in" in json['response']:
+ self.scheduleRefresh(user, json['response']['reset_in'])
+
+ return {"validuntil": json['response']['expire_date'],
+ "trafficleft": int(json['response']['traffic_left']) / 1024,
+ "premium": True}
+ else:
+ self.logError(json['response_details'])
+ except Exception, e:
+ self.logError(e)
+
+ return {"validuntil": None, "trafficleft": None, "premium": False}
+
+ def login(self, user, data, req):
+ try:
+ json = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']})
+ self.logDebug("API:LOGIN", json)
+ json = json_loads(json)
+
+ if json['response_status'] == 200:
+ data['SID'] = str(json['response']['session_id'])
+ return
+ else:
+ self.logError(json['response_details'])
+ except Exception, e:
+ self.logError(e)
+
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/RapidshareCom.py b/pyload/plugins/accounts/RapidshareCom.py
new file mode 100644
index 000000000..38db62200
--- /dev/null
+++ b/pyload/plugins/accounts/RapidshareCom.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class RapidshareCom(Account):
+ __name__ = "RapidshareCom"
+ __type__ = "account"
+ __version__ = "0.22"
+
+ __description__ = """Rapidshare.com account plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
+ api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user,
+ "password": data['password'], "withcookie": 1}
+ src = req.load(api_url_base, cookies=False, get=api_param_prem)
+ if src.startswith("ERROR"):
+ raise Exception(src)
+ fields = src.split("\n")
+ info = {}
+ for t in fields:
+ if not t.strip():
+ continue
+ k, v = t.split("=")
+ info[k] = v
+
+ validuntil = int(info['billeduntil'])
+ premium = True if validuntil else False
+
+ tmp = {"premium": premium, "validuntil": validuntil, "trafficleft": -1, "maxtraffic": -1}
+
+ return tmp
+
+ def login(self, user, data, req):
+ api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
+ api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user,
+ "password": data['password'], "withcookie": 1}
+ src = req.load(api_url_base, cookies=False, get=api_param_prem)
+ if src.startswith("ERROR"):
+ raise Exception(src + "### Note you have to use your account number for login, instead of name.")
+ fields = src.split("\n")
+ info = {}
+ for t in fields:
+ if not t.strip():
+ continue
+ k, v = t.split("=")
+ info[k] = v
+ cj = self.getAccountCookies(user)
+ cj.setCookie("rapidshare.com", "enc", info['cookie'])
diff --git a/pyload/plugins/accounts/RarefileNet.py b/pyload/plugins/accounts/RarefileNet.py
new file mode 100644
index 000000000..68e2595e2
--- /dev/null
+++ b/pyload/plugins/accounts/RarefileNet.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class RarefileNet(XFSPAccount):
+ __name__ = "RarefileNet"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """RareFile.net account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ MAIN_PAGE = "http://rarefile.net/"
diff --git a/pyload/plugins/accounts/RealdebridCom.py b/pyload/plugins/accounts/RealdebridCom.py
new file mode 100644
index 000000000..8ab0234a9
--- /dev/null
+++ b/pyload/plugins/accounts/RealdebridCom.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+import xml.dom.minidom as dom
+
+from pyload.plugins.Account import Account
+
+
+class RealdebridCom(Account):
+ __name__ = "RealdebridCom"
+ __type__ = "account"
+ __version__ = "0.43"
+
+ __description__ = """Real-Debrid.com account plugin"""
+ __author_name__ = "Devirex Hazzard"
+ __author_mail__ = "naibaf_11@yahoo.de"
+
+
+ def loadAccountInfo(self, user, req):
+ if self.pin_code:
+ return {"premium": False}
+ page = req.load("https://real-debrid.com/api/account.php")
+ xml = dom.parseString(page)
+ account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue),
+ "trafficleft": -1}
+
+ return account_info
+
+ def login(self, user, data, req):
+ self.pin_code = False
+ page = req.load("https://real-debrid.com/ajax/login.php", get={"user": user, "pass": data['password']})
+ if "Your login informations are incorrect" in page:
+ self.wrongPassword()
+ elif "PIN Code required" in page:
+ self.logWarning('PIN code required. Please login to https://real-debrid.com using the PIN or disable the double authentication in your control panel on https://real-debrid.com.')
+ self.pin_code = True
diff --git a/pyload/plugins/accounts/RehostTo.py b/pyload/plugins/accounts/RehostTo.py
new file mode 100644
index 000000000..3bda118f4
--- /dev/null
+++ b/pyload/plugins/accounts/RehostTo.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class RehostTo(Account):
+ __name__ = "RehostTo"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Rehost.to account plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAccountData(user)
+ page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password']))
+ data = [x.split("=") for x in page.split(",")]
+ ses = data[0][1]
+ long_ses = data[1][1]
+
+ page = req.load("http://rehost.to/api.php?cmd=get_premium_credits&long_ses=%s" % long_ses)
+ traffic, valid = page.split(",")
+
+ account_info = {"trafficleft": int(traffic) * 1024,
+ "validuntil": int(valid),
+ "long_ses": long_ses,
+ "ses": ses}
+
+ return account_info
+
+ def login(self, user, data, req):
+ page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password']))
+
+ if "Login failed." in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/RyushareCom.py b/pyload/plugins/accounts/RyushareCom.py
new file mode 100644
index 000000000..74258e984
--- /dev/null
+++ b/pyload/plugins/accounts/RyushareCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class RyushareCom(XFSPAccount):
+ __name__ = "RyushareCom"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Ryushare.com account plugin"""
+ __author_name__ = ("zoidberg", "trance4us")
+ __author_mail__ = ("zoidberg@mujmail.cz", "")
+
+ MAIN_PAGE = "http://ryushare.com/"
+
+
+ def login(self, user, data, req):
+ req.lastURL = "http://ryushare.com/login.python"
+ html = req.load("http://ryushare.com/login.python",
+ post={"login": user, "password": data['password'], "op": "login"})
+ if 'Incorrect Login or Password' in html or '>Error<' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/ShareRapidCom.py b/pyload/plugins/accounts/ShareRapidCom.py
new file mode 100644
index 000000000..92e6c7988
--- /dev/null
+++ b/pyload/plugins/accounts/ShareRapidCom.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import mktime, strptime
+from pyload.plugins.Account import Account
+
+
+class ShareRapidCom(Account):
+ __name__ = "ShareRapidCom"
+ __type__ = "account"
+ __version__ = "0.34"
+
+ __description__ = """MegaRapid.cz account plugin"""
+ __author_name__ = ("MikyWoW", "zoidberg")
+ __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz")
+
+ login_timeout = 60
+
+
+ def loadAccountInfo(self, user, req):
+ src = req.load("http://megarapid.cz/mujucet/", decode=True)
+
+ m = re.search(ur'<td>Max. počet paralelních stahování: </td><td>(\d+)', src)
+ if m:
+ data = self.getAccountData(user)
+ data['options']['limitDL'] = [int(m.group(1))]
+
+ m = re.search(ur'<td>Paušální stahování aktivní. Vyprší </td><td><strong>(.*?)</strong>', src)
+ if m:
+ validuntil = mktime(strptime(m.group(1), "%d.%m.%Y - %H:%M"))
+ return {"premium": True, "trafficleft": -1, "validuntil": validuntil}
+
+ m = re.search(r'<tr><td>Kredit</td><td>(.*?) GiB', src)
+ if m:
+ trafficleft = float(m.group(1)) * (1 << 20)
+ return {"premium": True, "trafficleft": trafficleft, "validuntil": -1}
+
+ return {"premium": False, "trafficleft": None, "validuntil": None}
+
+ def login(self, user, data, req):
+ htm = req.load("http://megarapid.cz/prihlaseni/", cookies=True)
+ if "Heslo:" in htm:
+ start = htm.index('id="inp_hash" name="hash" value="')
+ htm = htm[start + 33:]
+ hashes = htm[0:32]
+ htm = req.load("http://megarapid.cz/prihlaseni/",
+ post={"hash": hashes,
+ "login": user,
+ "pass1": data['password'],
+ "remember": 0,
+ "sbmt": u"Přihlásit"}, cookies=True)
diff --git a/pyload/plugins/accounts/ShareonlineBiz.py b/pyload/plugins/accounts/ShareonlineBiz.py
new file mode 100644
index 000000000..0f6e61fab
--- /dev/null
+++ b/pyload/plugins/accounts/ShareonlineBiz.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+
+
+class ShareonlineBiz(Account):
+ __name__ = "ShareonlineBiz"
+ __type__ = "account"
+ __version__ = "0.24"
+
+ __description__ = """Share-online.biz account plugin"""
+ __author_name__ = ("mkaay", "zoidberg")
+ __author_mail__ = ("mkaay@mkaay.de", "zoidberg@mujmail.cz")
+
+
+ def getUserAPI(self, user, req):
+ return req.load("http://api.share-online.biz/account.php",
+ {"username": user, "password": self.accounts[user]['password'], "act": "userDetails"})
+
+ def loadAccountInfo(self, user, req):
+ src = self.getUserAPI(user, req)
+
+ info = {}
+ for line in src.splitlines():
+ if "=" in line:
+ key, value = line.split("=")
+ info[key] = value
+ self.logDebug(info)
+
+ if "dl" in info and info['dl'].lower() != "not_available":
+ req.cj.setCookie("share-online.biz", "dl", info['dl'])
+ if "a" in info and info['a'].lower() != "not_available":
+ req.cj.setCookie("share-online.biz", "a", info['a'])
+
+ return {"validuntil": int(info['expire_date']) if "expire_date" in info else -1,
+ "trafficleft": -1,
+ "premium": True if ("dl" in info or "a" in info) and (info['group'] != "Sammler") else False}
+
+ def login(self, user, data, req):
+ src = self.getUserAPI(user, req)
+ if "EXCEPTION" in src:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/SimplyPremiumCom.py b/pyload/plugins/accounts/SimplyPremiumCom.py
new file mode 100644
index 000000000..5958c1f34
--- /dev/null
+++ b/pyload/plugins/accounts/SimplyPremiumCom.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Account import Account
+
+
+class SimplyPremiumCom(Account):
+ __name__ = "SimplyPremiumCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Simply-Premium.com account plugin"""
+ __author_name__ = "EvolutionClip"
+ __author_mail__ = "evolutionclip@live.de"
+
+
+ def loadAccountInfo(self, user, req):
+ json_data = req.load('http://www.simply-premium.com/api/user.php?format=json')
+ self.logDebug("JSON data: " + json_data)
+ json_data = json_loads(json_data)
+
+ if 'vip' in json_data['result'] and json_data['result']['vip'] == 0:
+ return {"premium": False}
+
+ #Time package
+ validuntil = float(json_data['result']['timeend'])
+ #Traffic package
+ # {"trafficleft": int(traffic) / 1024, "validuntil": -1}
+ #trafficleft = int(json_data['result']['traffic'] / 1024)
+
+ #return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+ return {"premium": True, "validuntil": validuntil}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("simply-premium.com", "lang", "EN")
+
+ if data['password'] == '' or data['password'] == '0':
+ post_data = {"key": user}
+ else:
+ post_data = {"login_name": user, "login_pass": data['password']}
+
+ html = req.load("http://www.simply-premium.com/login.php", post=post_data)
+
+ if 'logout' not in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/SimplydebridCom.py b/pyload/plugins/accounts/SimplydebridCom.py
new file mode 100644
index 000000000..169b27e0b
--- /dev/null
+++ b/pyload/plugins/accounts/SimplydebridCom.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+
+
+class SimplydebridCom(Account):
+ __name__ = "SimplydebridCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Simply-Debrid.com account plugin"""
+ __author_name__ = "Kagenoshin"
+ __author_mail__ = "kagenoshin@gmx.ch"
+
+
+ def loadAccountInfo(self, user, req):
+ get_data = {'login': 2, 'u': self.loginname, 'p': self.password}
+ response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True)
+ data = [x.strip() for x in response.split(";")]
+ if str(data[0]) != "1":
+ return {"premium": False}
+ else:
+ return {"trafficleft": -1, "validuntil": mktime(strptime(str(data[2]), "%d/%m/%Y"))}
+
+ def login(self, user, data, req):
+ self.loginname = user
+ self.password = data['password']
+ get_data = {'login': 1, 'u': self.loginname, 'p': self.password}
+ response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True)
+ if response != "02: loggin success":
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/StahnuTo.py b/pyload/plugins/accounts/StahnuTo.py
new file mode 100644
index 000000000..9d4cc6994
--- /dev/null
+++ b/pyload/plugins/accounts/StahnuTo.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Account import Account
+from pyload.utils import parseFileSize
+
+
+class StahnuTo(Account):
+ __name__ = "StahnuTo"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """StahnuTo account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.stahnu.to/")
+
+ m = re.search(r'>VIP: (\d+.*)<', html)
+ trafficleft = parseFileSize(m.group(1)) * 1024 if m else 0
+
+ return {"premium": trafficleft > (512 * 1024), "trafficleft": trafficleft, "validuntil": -1}
+
+ def login(self, user, data, req):
+ html = req.load("http://www.stahnu.to/login.php", post={
+ "username": user,
+ "password": data['password'],
+ "submit": "Login"})
+
+ if not '<a href="logout.php">' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/TurbobitNet.py b/pyload/plugins/accounts/TurbobitNet.py
new file mode 100644
index 000000000..d4221a97a
--- /dev/null
+++ b/pyload/plugins/accounts/TurbobitNet.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+
+
+class TurbobitNet(Account):
+ __name__ = "TurbobitNet"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """TurbobitNet account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://turbobit.net")
+
+ m = re.search(r'<u>Turbo Access</u> to ([0-9.]+)', html)
+ if m:
+ premium = True
+ validuntil = mktime(strptime(m.group(1), "%d.%m.%Y"))
+ else:
+ premium = False
+ validuntil = -1
+
+ return {"premium": premium, "trafficleft": -1, "validuntil": validuntil}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("turbobit.net", "user_lang", "en")
+
+ html = req.load("http://turbobit.net/user/login", post={
+ "user[login]": user,
+ "user[pass]": data['password'],
+ "user[submit]": "Login"})
+
+ if not '<div class="menu-item user-name">' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/UlozTo.py b/pyload/plugins/accounts/UlozTo.py
new file mode 100644
index 000000000..01fb134e8
--- /dev/null
+++ b/pyload/plugins/accounts/UlozTo.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Account import Account
+
+
+class UlozTo(Account):
+ __name__ = "UlozTo"
+ __type__ = "account"
+ __version__ = "0.06"
+
+ __description__ = """Uloz.to account plugin"""
+ __author_name__ = ("zoidberg", "pulpe")
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="/kredit" title="[^"]*?GB = ([0-9.]+) MB"'
+
+
+ def loadAccountInfo(self, user, req):
+ #this cookie gets lost somehow after each request
+ self.phpsessid = req.cj.getCookie("ULOSESSID")
+ html = req.load("http://www.ulozto.net/", decode=True)
+ req.cj.setCookie("www.ulozto.net", "ULOSESSID", self.phpsessid)
+
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ trafficleft = int(float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048) if m else 0
+ self.premium = True if trafficleft else False
+
+ return {"validuntil": -1, "trafficleft": trafficleft}
+
+ def login(self, user, data, req):
+ login_page = req.load('http://www.ulozto.net/?do=web-login', decode=True)
+ action = re.findall('<form action="(.+?)"', login_page)[1].replace('&amp;', '&')
+ token = re.search('_token_" value="(.+?)"', login_page).group(1)
+
+ html = req.load('http://www.ulozto.net'+action, post={
+ "_token_": token,
+ "login": "Submit",
+ "password": data['password'],
+ "username": user
+ }, decode=True)
+
+ if '<div class="flash error">' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/UnrestrictLi.py b/pyload/plugins/accounts/UnrestrictLi.py
new file mode 100644
index 000000000..39a75f959
--- /dev/null
+++ b/pyload/plugins/accounts/UnrestrictLi.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Account import Account
+from pyload.common.json_layer import json_loads
+
+
+class UnrestrictLi(Account):
+ __name__ = "UnrestrictLi"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Unrestrict.li account plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def loadAccountInfo(self, user, req):
+ json_data = req.load('http://unrestrict.li/api/jdownloader/user.php?format=json')
+ self.logDebug("JSON data: " + json_data)
+ json_data = json_loads(json_data)
+
+ if 'vip' in json_data['result'] and json_data['result']['vip'] == 0:
+ return {"premium": False}
+
+ validuntil = json_data['result']['expires']
+ trafficleft = int(json_data['result']['traffic'] / 1024)
+
+ return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("unrestrict.li", "lang", "EN")
+ html = req.load("https://unrestrict.li/sign_in")
+
+ if 'solvemedia' in html:
+ self.logError("A Captcha is required. Go to http://unrestrict.li/sign_in and login, then retry")
+ return
+
+ post_data = {"username": user, "password": data['password'],
+ "remember_me": "remember", "signin": "Sign in"}
+ html = req.load("https://unrestrict.li/sign_in", post=post_data)
+
+ if 'sign_out' not in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/UploadedTo.py b/pyload/plugins/accounts/UploadedTo.py
new file mode 100644
index 000000000..64bbeac6e
--- /dev/null
+++ b/pyload/plugins/accounts/UploadedTo.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import time
+
+from pyload.plugins.Account import Account
+
+
+class UploadedTo(Account):
+ __name__ = "UploadedTo"
+ __type__ = "account"
+ __version__ = "0.26"
+
+ __description__ = """Uploaded.to account plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def loadAccountInfo(self, user, req):
+
+ req.load("http://uploaded.net/language/en")
+ html = req.load("http://uploaded.net/me")
+
+ premium = '<a href="register"><em>Premium</em>' in html or '<em>Premium</em></th>' in html
+
+ if premium:
+ raw_traffic = re.search(r'<th colspan="2"><b class="cB">([^<]+)', html).group(1).replace('.', '')
+ raw_valid = re.search(r"<td>Duration:</td>\s*<th>([^<]+)", html, re.MULTILINE).group(1).strip()
+
+ traffic = int(self.parseTraffic(raw_traffic))
+
+ if raw_valid == "unlimited":
+ validuntil = -1
+ else:
+ raw_valid = re.findall(r"(\d+) (Week|weeks|days|day|hours|hour)", raw_valid)
+ validuntil = time()
+ for n, u in raw_valid:
+ validuntil += int(n) * 60 * 60 * {"Week": 168, "weeks": 168, "days": 24,
+ "day": 24, "hours": 1, "hour": 1}[u]
+
+ return {"validuntil": validuntil, "trafficleft": traffic, "maxtraffic": 50 * 1024 * 1024}
+ else:
+ return {"premium": False, "validuntil": -1}
+
+ def login(self, user, data, req):
+
+ req.load("http://uploaded.net/language/en")
+ req.cj.setCookie("uploaded.net", "lang", "en")
+
+ page = req.load("http://uploaded.net/io/login", post={"id": user, "pw": data['password'], "_": ""})
+
+ if "User and password do not match!" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/UploadheroCom.py b/pyload/plugins/accounts/UploadheroCom.py
new file mode 100644
index 000000000..1cb0ab698
--- /dev/null
+++ b/pyload/plugins/accounts/UploadheroCom.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+import re
+import datetime
+import time
+
+from pyload.plugins.Account import Account
+
+
+class UploadheroCom(Account):
+ __name__ = "UploadheroCom"
+ __type__ = "account"
+ __version__ = "0.2"
+
+ __description__ = """Uploadhero.co account plugin"""
+ __author_name__ = "mcmyst"
+ __author_mail__ = "mcmyst@hotmail.fr"
+
+
+ def loadAccountInfo(self, user, req):
+ premium_pattern = re.compile('Il vous reste <span class="bleu">([0-9]+)</span> jours premium.')
+
+ data = self.getAccountData(user)
+ page = req.load("http://uploadhero.co/my-account")
+
+ if premium_pattern.search(page):
+ end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1)))
+ end_date = time.mktime(future.timetuple())
+ account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True}
+ else:
+ account_info = {"validuntil": -1, "trafficleft": -1, "premium": False}
+
+ return account_info
+
+ def login(self, user, data, req):
+ page = req.load("http://uploadhero.co/lib/connexion.php",
+ post={"pseudo_login": user, "password_login": data['password']})
+
+ if "mot de passe invalide" in page:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/UploadingCom.py b/pyload/plugins/accounts/UploadingCom.py
new file mode 100644
index 000000000..9ac674b71
--- /dev/null
+++ b/pyload/plugins/accounts/UploadingCom.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+from time import time, strptime, mktime
+import re
+
+from pyload.plugins.Account import Account
+
+
+class UploadingCom(Account):
+ __name__ = "UploadingCom"
+ __type__ = "account"
+ __version__ = "0.1"
+
+ __description__ = """Uploading.com account plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def loadAccountInfo(self, user, req):
+ src = req.load("http://uploading.com/")
+ premium = True
+ if "UPGRADE TO PREMIUM" in src:
+ return {"validuntil": -1, "trafficleft": -1, "premium": False}
+
+ m = re.search("Valid Until:(.*?)<", src)
+ if m:
+ validuntil = int(mktime(strptime(m.group(1).strip(), "%b %d, %Y")))
+ else:
+ validuntil = -1
+
+ return {"validuntil": validuntil, "trafficleft": -1, "premium": True}
+
+ def login(self, user, data, req):
+ req.cj.setCookie("uploading.com", "lang", "1")
+ req.cj.setCookie("uploading.com", "language", "1")
+ req.cj.setCookie("uploading.com", "setlang", "en")
+ req.cj.setCookie("uploading.com", "_lang", "en")
+ req.load("http://uploading.com/")
+ req.load("http://uploading.com/general/login_form/?JsHttpRequest=%s-xml" % long(time() * 1000),
+ post={"email": user, "password": data['password'], "remember": "on"})
diff --git a/pyload/plugins/accounts/UptoboxCom.py b/pyload/plugins/accounts/UptoboxCom.py
new file mode 100644
index 000000000..7f9618da8
--- /dev/null
+++ b/pyload/plugins/accounts/UptoboxCom.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.XFSPAccount import XFSPAccount
+
+
+class UptoboxCom(XFSPAccount):
+ __name__ = "UptoboxCom"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """DDLStorage.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ MAIN_PAGE = "http://uptobox.com/"
+
+ VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire: ([^<]+)</strong>'
diff --git a/pyload/plugins/accounts/YibaishiwuCom.py b/pyload/plugins/accounts/YibaishiwuCom.py
new file mode 100644
index 000000000..3898c3cef
--- /dev/null
+++ b/pyload/plugins/accounts/YibaishiwuCom.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Account import Account
+
+
+class YibaishiwuCom(Account):
+ __name__ = "YibaishiwuCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """115.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ ACCOUNT_INFO_PATTERN = r'var USER_PERMISSION = {(.*?)}'
+
+
+ def loadAccountInfo(self, user, req):
+ #self.relogin(user)
+ html = req.load("http://115.com/", decode=True)
+
+ m = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S)
+ premium = True if (m and 'is_vip: 1' in m.group(1)) else False
+ validuntil = trafficleft = (-1 if m else 0)
+ return dict({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium})
+
+ def login(self, user, data, req):
+ html = req.load('http://passport.115.com/?ac=login', post={
+ "back": "http://www.115.com/",
+ "goto": "http://115.com/",
+ "login[account]": user,
+ "login[passwd]": data['password']
+ }, decode=True)
+
+ if not 'var USER_PERMISSION = {' in html:
+ self.wrongPassword()
diff --git a/pyload/plugins/accounts/ZeveraCom.py b/pyload/plugins/accounts/ZeveraCom.py
new file mode 100644
index 000000000..d84000359
--- /dev/null
+++ b/pyload/plugins/accounts/ZeveraCom.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+
+
+class ZeveraCom(Account):
+ __name__ = "ZeveraCom"
+ __type__ = "account"
+ __version__ = "0.21"
+
+ __description__ = """Zevera.com account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def loadAccountInfo(self, user, req):
+ data = self.getAPIData(req)
+ if data == "No traffic":
+ account_info = {"trafficleft": 0, "validuntil": 0, "premium": False}
+ else:
+ account_info = {
+ "trafficleft": int(data['availabletodaytraffic']) * 1024,
+ "validuntil": mktime(strptime(data['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S")),
+ "premium": True
+ }
+ return account_info
+
+ def login(self, user, data, req):
+ self.loginname = user
+ self.password = data['password']
+ if self.getAPIData(req) == "No traffic":
+ self.wrongPassword()
+
+ def getAPIData(self, req, just_header=False, **kwargs):
+ get_data = {
+ 'cmd': 'accountinfo',
+ 'login': self.loginname,
+ 'pass': self.password
+ }
+ get_data.update(kwargs)
+
+ response = req.load("http://www.zevera.com/jDownloader.ashx", get=get_data,
+ decode=True, just_header=just_header)
+ self.logDebug(response)
+
+ if ':' in response:
+ if not just_header:
+ response = response.replace(',', '\n')
+ return dict((y.strip().lower(), z.strip()) for (y, z) in
+ [x.split(':', 1) for x in response.splitlines() if ':' in x])
+ else:
+ return response
diff --git a/module/plugins/accounts/__init__.py b/pyload/plugins/accounts/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/accounts/__init__.py
+++ b/pyload/plugins/accounts/__init__.py
diff --git a/pyload/plugins/container/CCF.py b/pyload/plugins/container/CCF.py
new file mode 100644
index 000000000..89ac90097
--- /dev/null
+++ b/pyload/plugins/container/CCF.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from os import makedirs
+from os.path import exists
+from urllib2 import build_opener
+
+from pyload.lib.MultipartPostHandler import MultipartPostHandler
+
+from pyload.plugins.Container import Container
+from pyload.utils import safe_join
+
+
+class CCF(Container):
+ __name__ = "CCF"
+ __version__ = "0.2"
+
+ __pattern__ = r'.+\.ccf'
+
+ __description__ = """CCF container decrypter plugin"""
+ __author_name__ = "Willnix"
+ __author_mail__ = "Willnix@pyload.org"
+
+
+ def decrypt(self, pyfile):
+
+ infile = pyfile.url.replace("\n", "")
+
+ opener = build_opener(MultipartPostHandler)
+ params = {"src": "ccf",
+ "filename": "test.ccf",
+ "upload": open(infile, "rb")}
+ tempdlc_content = opener.open('http://service.jdownloader.net/dlcrypt/getDLC.php', params).read()
+
+ download_folder = self.config['general']['download_folder']
+
+ tempdlc_name = safe_join(download_folder, "tmp_%s.dlc" % pyfile.name)
+ tempdlc = open(tempdlc_name, "w")
+ tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.DOTALL).group(1))
+ tempdlc.close()
+
+ self.urls = [tempdlc_name]
diff --git a/module/plugins/container/DLC_25.pyc b/pyload/plugins/container/DLC_25.pyc
index b8fde0051..b8fde0051 100644
--- a/module/plugins/container/DLC_25.pyc
+++ b/pyload/plugins/container/DLC_25.pyc
Binary files differ
diff --git a/module/plugins/container/DLC_26.pyc b/pyload/plugins/container/DLC_26.pyc
index 41a4e0cb8..41a4e0cb8 100644
--- a/module/plugins/container/DLC_26.pyc
+++ b/pyload/plugins/container/DLC_26.pyc
Binary files differ
diff --git a/module/plugins/container/DLC_27.pyc b/pyload/plugins/container/DLC_27.pyc
index a6bffaf74..a6bffaf74 100644
--- a/module/plugins/container/DLC_27.pyc
+++ b/pyload/plugins/container/DLC_27.pyc
Binary files differ
diff --git a/pyload/plugins/container/LinkList.py b/pyload/plugins/container/LinkList.py
new file mode 100644
index 000000000..b8941ee29
--- /dev/null
+++ b/pyload/plugins/container/LinkList.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+
+import codecs
+
+from pyload.plugins.Container import Container
+from pyload.utils import fs_encode
+
+
+class LinkList(Container):
+ __name__ = "LinkList"
+ __version__ = "0.12"
+
+ __pattern__ = r'.+\.txt'
+ __config__ = [("clear", "bool", "Clear Linklist after adding", False),
+ ("encoding", "string", "File encoding (default utf-8)", "")]
+
+ __description__ = """Read link lists in txt format"""
+ __author_name__ = ("spoob", "jeix")
+ __author_mail__ = ("spoob@pyload.org", "jeix@hasnomail.com")
+
+
+ def decrypt(self, pyfile):
+ try:
+ file_enc = codecs.lookup(self.getConfig("encoding")).name
+ except:
+ file_enc = "utf-8"
+
+ print repr(pyfile.url)
+ print pyfile.url
+
+ file_name = fs_encode(pyfile.url)
+
+ txt = codecs.open(file_name, 'r', file_enc)
+ links = txt.readlines()
+ curPack = "Parsed links from %s" % pyfile.name
+
+ packages = {curPack:[],}
+
+ for link in links:
+ link = link.strip()
+ if not link:
+ continue
+
+ if link.startswith(";"):
+ continue
+ if link.startswith("[") and link.endswith("]"):
+ # new package
+ curPack = link[1:-1]
+ packages[curPack] = []
+ continue
+ packages[curPack].append(link)
+ txt.close()
+
+ # empty packages fix
+
+ delete = []
+
+ for key,value in packages.iteritems():
+ if not value:
+ delete.append(key)
+
+ for key in delete:
+ del packages[key]
+
+ if self.getConfig("clear"):
+ try:
+ txt = open(file_name, 'wb')
+ txt.close()
+ except:
+ self.logWarning(_("LinkList could not be cleared."))
+
+ for name, links in packages.iteritems():
+ self.packages.append((name, links, name))
diff --git a/pyload/plugins/container/RSDF.py b/pyload/plugins/container/RSDF.py
new file mode 100644
index 000000000..2b4d4c686
--- /dev/null
+++ b/pyload/plugins/container/RSDF.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+import base64
+import binascii
+import re
+
+from pyload.plugins.Container import Container
+
+
+class RSDF(Container):
+ __name__ = "RSDF"
+ __version__ = "0.22"
+
+ __pattern__ = r'.+\.rsdf'
+
+ __description__ = """RSDF container decrypter plugin"""
+ __author_name__ = ("RaNaN", "spoob")
+ __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org")
+
+
+ def decrypt(self, pyfile):
+
+ from Crypto.Cipher import AES
+
+ infile = pyfile.url.replace("\n", "")
+ Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')
+
+ IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
+ IV_Cipher = AES.new(Key, AES.MODE_ECB)
+ IV = IV_Cipher.encrypt(IV)
+
+ obj = AES.new(Key, AES.MODE_CFB, IV)
+
+ rsdf = open(infile, 'r')
+
+ data = rsdf.read()
+ rsdf.close()
+
+ if re.search(r"<title>404 - Not Found</title>", data) is None:
+ data = binascii.unhexlify(''.join(data.split()))
+ data = data.splitlines()
+
+ for link in data:
+ if not link:
+ continue
+ link = base64.b64decode(link)
+ link = obj.decrypt(link)
+ decryptedUrl = link.replace('CCF: ', '')
+ self.urls.append(decryptedUrl)
+
+ self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links)))
diff --git a/module/plugins/container/__init__.py b/pyload/plugins/container/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/container/__init__.py
+++ b/pyload/plugins/container/__init__.py
diff --git a/pyload/plugins/crypter/BitshareComFolder.py b/pyload/plugins/crypter/BitshareComFolder.py
new file mode 100644
index 000000000..cfb6fc1a0
--- /dev/null
+++ b/pyload/plugins/crypter/BitshareComFolder.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class BitshareComFolder(SimpleCrypter):
+ __name__ = "BitshareComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
+
+ __description__ = """Bitshare.com folder decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<a href="(http://bitshare.com/files/.+)">.+</a></td>'
+ TITLE_PATTERN = r'View public folder "(?P<title>.+)"</h1>'
diff --git a/pyload/plugins/crypter/C1neonCom.py b/pyload/plugins/crypter/C1neonCom.py
new file mode 100644
index 000000000..2d1e91ef6
--- /dev/null
+++ b/pyload/plugins/crypter/C1neonCom.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class C1neonCom(DeadCrypter):
+ __name__ = "C1neonCom"
+ __type__ = "crypter"
+ __version__ = "0.05"
+
+ __pattern__ = r'http://(?:www\.)?c1neon.com/.*?'
+
+ __description__ = """C1neon.com decrypter plugin"""
+ __author_name__ = "godofdream"
+ __author_mail__ = "soilfiction@gmail.com"
diff --git a/pyload/plugins/crypter/ChipDe.py b/pyload/plugins/crypter/ChipDe.py
new file mode 100644
index 000000000..29a248693
--- /dev/null
+++ b/pyload/plugins/crypter/ChipDe.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class ChipDe(Crypter):
+ __name__ = "ChipDe"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html'
+
+ __description__ = """Chip.de decrypter plugin"""
+ __author_name__ = "4Christopher"
+ __author_mail__ = "4Christopher@gmx.de"
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url)
+ try:
+ f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html)
+ except:
+ self.fail('Failed to find the URL')
+ else:
+ self.urls = [f.group(1)]
+ self.logDebug('The file URL is %s' % self.urls[0])
diff --git a/pyload/plugins/crypter/CrockoComFolder.py b/pyload/plugins/crypter/CrockoComFolder.py
new file mode 100644
index 000000000..200b3333e
--- /dev/null
+++ b/pyload/plugins/crypter/CrockoComFolder.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class CrockoComFolder(SimpleCrypter):
+ __name__ = "CrockoComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?crocko.com/f/.*'
+
+ __description__ = """Crocko.com folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>'
diff --git a/pyload/plugins/crypter/CryptItCom.py b/pyload/plugins/crypter/CryptItCom.py
new file mode 100644
index 000000000..3de00847e
--- /dev/null
+++ b/pyload/plugins/crypter/CryptItCom.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class CryptItCom(DeadCrypter):
+ __name__ = "CryptItCom"
+ __type__ = "crypter"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+'
+
+ __description__ = """Crypt-it.com decrypter plugin"""
+ __author_name__ = "jeix"
+ __author_mail__ = "jeix@hasnomail.de"
diff --git a/pyload/plugins/crypter/CzshareComFolder.py b/pyload/plugins/crypter/CzshareComFolder.py
new file mode 100644
index 000000000..94e4f07b3
--- /dev/null
+++ b/pyload/plugins/crypter/CzshareComFolder.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class CzshareComFolder(Crypter):
+ __name__ = "CzshareComFolder"
+ __type__ = "crypter"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*'
+
+ __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>'
+ LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>'
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
+ self.fail("Parse error (FOLDER)")
+
+ self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
+ if not self.urls:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/DDLMusicOrg.py b/pyload/plugins/crypter/DDLMusicOrg.py
new file mode 100644
index 000000000..be4a92617
--- /dev/null
+++ b/pyload/plugins/crypter/DDLMusicOrg.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import sleep
+
+from pyload.plugins.Crypter import Crypter
+
+
+class DDLMusicOrg(Crypter):
+ __name__ = "DDLMusicOrg"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
+
+ __description__ = """Ddl-music.org decrypter plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def setup(self):
+ self.multiDL = False
+
+ def decrypt(self, pyfile):
+ html = self.req.load(pyfile.url, cookies=True)
+
+ if re.search(r"Wer dies nicht rechnen kann", html) is not None:
+ self.offline()
+
+ math = re.search(r"(\d+) ([\+-]) (\d+) =\s+<inp", self.html)
+ id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1)
+ linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1)
+
+ solve = ""
+ if math.group(2) == "+":
+ solve = int(math.group(1)) + int(math.group(3))
+ else:
+ solve = int(math.group(1)) - int(math.group(3))
+ sleep(3)
+ htmlwithlink = self.req.load(pyfile.url, cookies=True,
+ post={"calc%s" % linknr: solve, "send%s" % linknr: "Send", "id": id,
+ "linknr": linknr})
+ m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink)
+ if m:
+ self.urls = [m.group(1)]
+ else:
+ self.retry()
diff --git a/pyload/plugins/crypter/DailymotionBatch.py b/pyload/plugins/crypter/DailymotionBatch.py
new file mode 100644
index 000000000..d44350c6b
--- /dev/null
+++ b/pyload/plugins/crypter/DailymotionBatch.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urlparse import urljoin
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Crypter import Crypter
+from pyload.utils import safe_join
+
+
+class DailymotionBatch(Crypter):
+ __name__ = "DailymotionBatch"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
+
+ __description__ = """Dailymotion.com channel & playlist decrypter"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+ def api_response(self, ref, req=None):
+ url = urljoin("https://api.dailymotion.com/", ref)
+ page = self.load(url, get=req)
+ return json_loads(page)
+
+ def getPlaylistInfo(self, id):
+ ref = "playlist/" + id
+ req = {"fields": "name,owner.screenname"}
+ playlist = self.api_response(ref, req)
+
+ if "error" in playlist:
+ return
+
+ name = playlist['name']
+ owner = playlist['owner.screenname']
+ return name, owner
+
+ def _getPlaylists(self, user_id, page=1):
+ ref = "user/%s/playlists" % user_id
+ req = {"fields": "id", "page": page, "limit": 100}
+ user = self.api_response(ref, req)
+
+ if "error" in user:
+ return
+
+ for playlist in user['list']:
+ yield playlist['id']
+
+ if user['has_more']:
+ for item in self._getPlaylists(user_id, page + 1):
+ yield item
+
+ def getPlaylists(self, user_id):
+ return [(id,) + self.getPlaylistInfo(id) for id in self._getPlaylists(user_id)]
+
+ def _getVideos(self, id, page=1):
+ ref = "playlist/%s/videos" % id
+ req = {"fields": "url", "page": page, "limit": 100}
+ playlist = self.api_response(ref, req)
+
+ if "error" in playlist:
+ return
+
+ for video in playlist['list']:
+ yield video['url']
+
+ if playlist['has_more']:
+ for item in self._getVideos(id, page + 1):
+ yield item
+
+ def getVideos(self, playlist_id):
+ return list(self._getVideos(playlist_id))[::-1]
+
+ def decrypt(self, pyfile):
+ m = re.match(self.__pattern__, pyfile.url)
+ m_id = m.group("ID")
+ m_type = m.group("TYPE")
+
+ if m_type == "playlist":
+ self.logDebug("Url recognized as Playlist")
+ p_info = self.getPlaylistInfo(m_id)
+ playlists = [(m_id,) + p_info] if p_info else None
+ else:
+ self.logDebug("Url recognized as Channel")
+ playlists = self.getPlaylists(m_id)
+ self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), m_id))
+
+ if not playlists:
+ self.fail("No playlist available")
+
+ for p_id, p_name, p_owner in playlists:
+ p_videos = self.getVideos(p_id)
+ p_folder = safe_join(self.config['general']['download_folder'], p_owner, p_name)
+ self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name))
+ self.packages.append((p_name, p_videos, p_folder)) #: folder is NOT recognized by pyload 0.4.9!
diff --git a/pyload/plugins/crypter/DataHuFolder.py b/pyload/plugins/crypter/DataHuFolder.py
new file mode 100644
index 000000000..49dab9159
--- /dev/null
+++ b/pyload/plugins/crypter/DataHuFolder.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class DataHuFolder(SimpleCrypter):
+ __name__ = "DataHuFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+'
+
+ __description__ = """Data.hu folder decrypter plugin"""
+ __author_name__ = ("crash", "stickell")
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>"
+ TITLE_PATTERN = ur'<title>(?P<title>.+) Let\xf6lt\xe9se</title>'
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+
+ if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected
+ password = self.getPassword()
+ if password is '':
+ self.fail("No password specified, please set right password on Add package form and retry")
+ self.logDebug('The folder is password protected', 'Using password: ' + password)
+ self.html = self.load(pyfile.url, post={'mappa_pass': password}, decode=True)
+ if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password
+ self.fail("Incorrect password, please set right password on Add package form and retry")
+
+ package_name, folder_name = self.getPackageNameAndFolder()
+
+ package_links = re.findall(self.LINK_PATTERN, self.html)
+ self.logDebug('Package has %d links' % len(package_links))
+
+ if package_links:
+ self.packages = [(package_name, package_links, folder_name)]
+ else:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/DdlstorageComFolder.py b/pyload/plugins/crypter/DdlstorageComFolder.py
new file mode 100644
index 000000000..7469610f1
--- /dev/null
+++ b/pyload/plugins/crypter/DdlstorageComFolder.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo
+
+
+class DdlstorageComFolder(DeadCrypter):
+ __name__ = "DdlstorageComFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+'
+
+ __description__ = """DDLStorage.com folder decrypter plugin"""
+ __author_name__ = ("godofdream", "stickell")
+ __author_mail__ = ("soilfiction@gmail.com", "l.stickell@yahoo.it")
+
+
+getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/pyload/plugins/crypter/DepositfilesComFolder.py b/pyload/plugins/crypter/DepositfilesComFolder.py
new file mode 100644
index 000000000..e308305ae
--- /dev/null
+++ b/pyload/plugins/crypter/DepositfilesComFolder.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class DepositfilesComFolder(SimpleCrypter):
+ __name__ = "DepositfilesComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+'
+
+ __description__ = """Depositfiles.com folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">'
diff --git a/pyload/plugins/crypter/Dereferer.py b/pyload/plugins/crypter/Dereferer.py
new file mode 100644
index 000000000..6a7ac8c67
--- /dev/null
+++ b/pyload/plugins/crypter/Dereferer.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.Crypter import Crypter
+
+
+class Dereferer(Crypter):
+ __name__ = "Dereferer"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)'
+
+ __description__ = """Crypter for dereferers"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def decrypt(self, pyfile):
+ link = re.match(self.__pattern__, pyfile.url).group('url')
+ self.urls = [unquote(link).rstrip('+')]
diff --git a/pyload/plugins/crypter/DlProtectCom.py b/pyload/plugins/crypter/DlProtectCom.py
new file mode 100644
index 000000000..2c9e282be
--- /dev/null
+++ b/pyload/plugins/crypter/DlProtectCom.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from base64 import urlsafe_b64encode
+from time import time
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class DlProtectCom(SimpleCrypter):
+ __name__ = "DlProtectCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)'
+
+ __description__ = """Dl-protect.com decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found'
+
+
+ def getLinks(self):
+ # Direct link with redirect
+ if not re.match(r"http://(?:www\.)?dl-protect\.com", self.req.http.lastEffectiveURL):
+ return [self.req.http.lastEffectiveURL]
+
+ #id = re.match(self.__pattern__, self.pyfile.url).group("ID")
+ key = re.search(r'name="id_key" value="(.+?)"', self.html).group(1)
+
+ post_req = {"id_key": key, "submitform": ""}
+
+ if self.OFFLINE_PATTERN in self.html:
+ self.offline()
+ elif ">Please click on continue to see the content" in self.html:
+ post_req.update({"submitform": "Continue"})
+ else:
+ mstime = int(round(time() * 1000))
+ b64time = "_" + urlsafe_b64encode(str(mstime)).replace("=", "%3D")
+
+ post_req.update({"i": b64time, "submitform": "Decrypt+link"})
+
+ if ">Password :" in self.html:
+ post_req['pwd'] = self.getPassword()
+
+ if ">Security Code" in self.html:
+ captcha_id = re.search(r'/captcha\.php\?uid=(.+?)"', self.html).group(1)
+ captcha_url = "http://www.dl-protect.com/captcha.php?uid=" + captcha_id
+ captcha_code = self.decryptCaptcha(captcha_url, imgtype="gif")
+
+ post_req['secure'] = captcha_code
+
+ self.html = self.load(self.pyfile.url, post=post_req)
+
+ for errmsg in (">The password is incorrect", ">The security code is incorrect"):
+ if errmsg in self.html:
+ self.fail(errmsg[1:])
+
+ pattern = r'<a href="([^/].+?)" target="_blank">'
+ return re.findall(pattern, self.html)
diff --git a/pyload/plugins/crypter/DontKnowMe.py b/pyload/plugins/crypter/DontKnowMe.py
new file mode 100644
index 000000000..b16992b27
--- /dev/null
+++ b/pyload/plugins/crypter/DontKnowMe.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.Crypter import Crypter
+
+
+class DontKnowMe(Crypter):
+ __name__ = "DontKnowMe"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$'
+
+ __description__ = """DontKnow.me decrypter plugin"""
+ __author_name__ = "selaux"
+ __author_mail__ = None
+
+ LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$'
+
+
+ def decrypt(self, pyfile):
+ link = re.findall(self.LINK_PATTERN, pyfile.url)[0]
+ self.urls = [unquote(link)]
diff --git a/pyload/plugins/crypter/DuckCryptInfo.py b/pyload/plugins/crypter/DuckCryptInfo.py
new file mode 100644
index 000000000..a7afa2d22
--- /dev/null
+++ b/pyload/plugins/crypter/DuckCryptInfo.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.lib.BeautifulSoup import BeautifulSoup
+
+from pyload.plugins.Crypter import Crypter
+
+
+class DuckCryptInfo(Crypter):
+ __name__ = "DuckCryptInfo"
+ __type__ = "crypter"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)'
+
+ __description__ = """DuckCrypt.info decrypter plugin"""
+ __author_name__ = "godofdream"
+ __author_mail__ = "soilfiction@gmail.com"
+
+ TIMER_PATTERN = r'<span id="timer">(.*)</span>'
+
+
+ def decrypt(self, pyfile):
+ url = pyfile.url
+ # seems we don't need to wait
+ #src = self.req.load(str(url))
+ #m = re.search(self.TIMER_PATTERN, src)
+ #if m:
+ # self.logDebug("Sleeping for" % m.group(1))
+ # self.setWait(int(m.group(1)) ,False)
+ m = re.match(self.__pattern__, url)
+ if m is None:
+ self.fail('Weird error in link')
+ if str(m.group(1)) == "link":
+ self.handleLink(url)
+ else:
+ self.handleFolder(m)
+
+ def handleFolder(self, m):
+ src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2)))
+ m = re.match(self.__pattern__, src)
+ self.logDebug("Redirectet to " + str(m.group(0)))
+ src = self.load(str(m.group(0)))
+ soup = BeautifulSoup(src)
+ cryptlinks = soup.findAll("div", attrs={"class": "folderbox"})
+ self.logDebug("Redirectet to " + str(cryptlinks))
+ if not cryptlinks:
+ self.fail('no links m - (Plugin out of date?)')
+ for clink in cryptlinks:
+ if clink.find("a"):
+ self.handleLink(clink.find("a")['href'])
+
+ def handleLink(self, url):
+ src = self.load(url)
+ soup = BeautifulSoup(src)
+ self.urls = [soup.find("iframe")['src']]
+ if not self.urls:
+ self.logDebug('no links m - (Plugin out of date?)')
diff --git a/pyload/plugins/crypter/DuploadOrgFolder.py b/pyload/plugins/crypter/DuploadOrgFolder.py
new file mode 100644
index 000000000..ca76cff75
--- /dev/null
+++ b/pyload/plugins/crypter/DuploadOrgFolder.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class DuploadOrgFolder(SimpleCrypter):
+ __name__ = "DuploadOrgFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/'
+
+ __description__ = """Dupload.org folder decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<td style="[^"]+"><a href="(http://[^"]+)" target="_blank">[^<]+</a></td>'
diff --git a/pyload/plugins/crypter/EasybytezComFolder.py b/pyload/plugins/crypter/EasybytezComFolder.py
new file mode 100644
index 000000000..163f2bdf3
--- /dev/null
+++ b/pyload/plugins/crypter/EasybytezComFolder.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class EasybytezComFolder(SimpleCrypter):
+ __name__ = "EasybytezComFolder"
+ __type__ = "crypter"
+ __version__ = "0.06"
+
+ __pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)'
+
+ __description__ = """Easybytez.com decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")]
+
+ LINK_PATTERN = r'<td><a href="(http://www\.easybytez\.com/\w+)" target="_blank">.+(?:</a>)?</td>'
+ TITLE_PATTERN = r'<Title>Files of \d+: (?P<title>.+) folder</Title>'
diff --git a/pyload/plugins/crypter/EmbeduploadCom.py b/pyload/plugins/crypter/EmbeduploadCom.py
new file mode 100644
index 000000000..476767f94
--- /dev/null
+++ b/pyload/plugins/crypter/EmbeduploadCom.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+from pyload.network.HTTPRequest import BadHeader
+
+
+class EmbeduploadCom(Crypter):
+ __name__ = "EmbeduploadCom"
+ __type__ = "crypter"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*'
+ __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"),
+ ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """EmbedUpload.com decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+ tmp_links = []
+
+ m = re.findall(self.LINK_PATTERN, self.html)
+ if m:
+ prefered_set = set(self.getConfig("preferedHoster").split('|'))
+ prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set)
+ print "PF", prefered_set
+ tmp_links.extend([x[1] for x in m if x[0] in prefered_set])
+ self.urls = self.getLocation(tmp_links)
+
+ if not self.urls:
+ ignored_set = set(self.getConfig("ignoredHoster").split('|'))
+ ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set)
+ print "IG", ignored_set
+ tmp_links.extend([x[1] for x in m if x[0] not in ignored_set])
+ self.urls = self.getLocation(tmp_links)
+
+ if not self.urls:
+ self.fail('Could not extract any links')
+
+ def getLocation(self, tmp_links):
+ new_links = []
+ for link in tmp_links:
+ try:
+ header = self.load(link, just_header=True)
+ if "location" in header:
+ new_links.append(header['location'])
+ except BadHeader:
+ pass
+ return new_links
diff --git a/pyload/plugins/crypter/FilebeerInfoFolder.py b/pyload/plugins/crypter/FilebeerInfoFolder.py
new file mode 100644
index 000000000..ee577a865
--- /dev/null
+++ b/pyload/plugins/crypter/FilebeerInfoFolder.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class FilebeerInfoFolder(DeadCrypter):
+ __name__ = "FilebeerInfoFolder"
+ __type__ = "crypter"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*'
+
+ __description__ = """Filebeer.info folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
diff --git a/pyload/plugins/crypter/FilecloudIoFolder.py b/pyload/plugins/crypter/FilecloudIoFolder.py
new file mode 100644
index 000000000..577dd43a3
--- /dev/null
+++ b/pyload/plugins/crypter/FilecloudIoFolder.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilecloudIoFolder(SimpleCrypter):
+ __name__ = "FilecloudIoFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+'
+
+ __description__ = """Filecloud.io folder decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title'
+ TITLE_PATTERN = r'>(?P<title>.+?) - filecloud.io<'
diff --git a/pyload/plugins/crypter/FilefactoryComFolder.py b/pyload/plugins/crypter/FilefactoryComFolder.py
new file mode 100644
index 000000000..6886fa5b1
--- /dev/null
+++ b/pyload/plugins/crypter/FilefactoryComFolder.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilefactoryComFolder(SimpleCrypter):
+ __name__ = "FilefactoryComFolder"
+ __type__ = "crypter"
+ __version__ = "0.2"
+
+ __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+'
+
+ __description__ = """Filefactory.com folder decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<td><a href="([^"]+)">'
+ TITLE_PATTERN = r'<h1>Files in <span>(?P<title>.+)</span></h1>'
+ PAGES_PATTERN = r'data-paginator-totalPages="(?P<pages>\d+)"'
+
+ SH_COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')]
+
+
+ def loadPage(self, page_n):
+ return self.load(self.pyfile.url, get={'page': page_n})
diff --git a/pyload/plugins/crypter/FilerNetFolder.py b/pyload/plugins/crypter/FilerNetFolder.py
new file mode 100644
index 000000000..4acb7e165
--- /dev/null
+++ b/pyload/plugins/crypter/FilerNetFolder.py
@@ -0,0 +1,22 @@
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilerNetFolder(SimpleCrypter):
+ __name__ = "FilerNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'https?://filer\.net/folder/\w{16}'
+
+ __description__ = """Filer.net decrypter plugin"""
+ __author_name_ = ("nath_schwarz", "stickell")
+ __author_mail_ = ("nathan.notwhite@gmail.com", "l.stickell@yahoo.it")
+
+ LINK_PATTERN = r'href="(/get/\w{16})">(?!<)'
+ TITLE_PATTERN = r'<h3>(?P<title>.+) - <small'
+
+
+ def getLinks(self):
+ return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)]
diff --git a/pyload/plugins/crypter/FileserveComFolder.py b/pyload/plugins/crypter/FileserveComFolder.py
new file mode 100644
index 000000000..52e1df6b4
--- /dev/null
+++ b/pyload/plugins/crypter/FileserveComFolder.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Crypter import Crypter
+
+
+class FileserveComFolder(Crypter):
+ __name__ = "FileserveComFolder"
+ __type__ = "crypter"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+'
+
+ __description__ = """FileServe.com folder decrypter plugin"""
+ __author_name__ = "fionnc"
+ __author_mail__ = "fionnc@gmail.com"
+
+ FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>'
+ LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">'
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ new_links = []
+
+ folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if folder is None:
+ self.fail("Parse error (FOLDER)")
+
+ new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1)))
+
+ if new_links:
+ self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)]
+ else:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/FilestubeCom.py b/pyload/plugins/crypter/FilestubeCom.py
new file mode 100644
index 000000000..fc80762d1
--- /dev/null
+++ b/pyload/plugins/crypter/FilestubeCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilestubeCom(SimpleCrypter):
+ __name__ = "FilestubeCom"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
+
+ __description__ = """Filestube.com decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)'
+ TITLE_PATTERN = r'<h1\s*> (?P<title>.+) download\s*</h1>'
diff --git a/pyload/plugins/crypter/FiletramCom.py b/pyload/plugins/crypter/FiletramCom.py
new file mode 100644
index 000000000..6620adc12
--- /dev/null
+++ b/pyload/plugins/crypter/FiletramCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FiletramCom(SimpleCrypter):
+ __name__ = "FiletramCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+'
+
+ __description__ = """Filetram.com decrypter plugin"""
+ __author_name__ = ("igel", "stickell")
+ __author_mail__ = ("igelkun@myopera.com", "l.stickell@yahoo.it")
+
+ LINK_PATTERN = r'\s+(http://.+)'
+ TITLE_PATTERN = r'<title>(?P<title>[^<]+) - Free Download[^<]*</title>'
diff --git a/pyload/plugins/crypter/FiredriveComFolder.py b/pyload/plugins/crypter/FiredriveComFolder.py
new file mode 100644
index 000000000..072a548a2
--- /dev/null
+++ b/pyload/plugins/crypter/FiredriveComFolder.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FiredriveComFolder(SimpleCrypter):
+ __name__ = "FiredriveComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+'
+
+ __description__ = """Firedrive.com folder decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\''
+ TITLE_PATTERN = r'>Shared Folder "(?P<title>.+)" | Firedrive<'
+ OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<'
+ TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)'
+
+
+ def getLinks(self):
+ return map(lambda x: "http://www.firedrive.com/%s/%s" %
+ ("share" if x[0] == "folder" else "file", x[1]),
+ re.findall(self.LINK_PATTERN, self.html))
diff --git a/pyload/plugins/crypter/FourChanOrg.py b/pyload/plugins/crypter/FourChanOrg.py
new file mode 100644
index 000000000..2d3bfa07a
--- /dev/null
+++ b/pyload/plugins/crypter/FourChanOrg.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+#
+# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599)
+
+import re
+
+from pyload.plugins.Crypter import Crypter
+
+
+class FourChanOrg(Crypter):
+ __name__ = "FourChanOrg"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)'
+
+ __description__ = """4chan.org folder decrypter plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+
+ def decrypt(self, pyfile):
+ pagehtml = self.load(pyfile.url)
+ images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml))
+ self.urls = ["http://" + image for image in images]
diff --git a/pyload/plugins/crypter/FreakhareComFolder.py b/pyload/plugins/crypter/FreakhareComFolder.py
new file mode 100644
index 000000000..fca1b26a1
--- /dev/null
+++ b/pyload/plugins/crypter/FreakhareComFolder.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FreakhareComFolder(SimpleCrypter):
+ __name__ = "FreakhareComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
+
+ __description__ = """Freakhare.com folder decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<a href="(http://freakshare.com/files/[^"]+)" target="_blank">'
+ TITLE_PATTERN = r'Folder:</b> (?P<title>.+)'
+ PAGES_PATTERN = r'Pages: +(?P<pages>\d+)'
+
+
+ def loadPage(self, page_n):
+ if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'):
+ m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html)
+ if m:
+ self.f_id = m.group(1)
+ self.f_md5 = m.group(2)
+ return self.load('http://freakshare.com/', get={'x': 'folder',
+ 'f_id': self.f_id,
+ 'f_md5': self.f_md5,
+ 'entrys': '20',
+ 'page': page_n - 1,
+ 'order': ''}, decode=True)
diff --git a/pyload/plugins/crypter/FreetexthostCom.py b/pyload/plugins/crypter/FreetexthostCom.py
new file mode 100644
index 000000000..e56d638f0
--- /dev/null
+++ b/pyload/plugins/crypter/FreetexthostCom.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FreetexthostCom(SimpleCrypter):
+ __name__ = "FreetexthostCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
+
+ __description__ = """Freetexthost.com decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def getLinks(self):
+ m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL)
+ if m is None:
+ self.fail('Unable to extract links | Plugin may be out-of-date')
+ links = m.group(1)
+ return links.strip().split("<br />\r\n")
diff --git a/pyload/plugins/crypter/FshareVnFolder.py b/pyload/plugins/crypter/FshareVnFolder.py
new file mode 100644
index 000000000..1706d97e0
--- /dev/null
+++ b/pyload/plugins/crypter/FshareVnFolder.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FshareVnFolder(SimpleCrypter):
+ __name__ = "FshareVnFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*'
+
+ __description__ = """Fshare.vn folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">'
diff --git a/pyload/plugins/crypter/GooGl.py b/pyload/plugins/crypter/GooGl.py
new file mode 100644
index 000000000..ae48c61b5
--- /dev/null
+++ b/pyload/plugins/crypter/GooGl.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Crypter import Crypter
+from pyload.common.json_layer import json_loads
+
+
+class GooGl(Crypter):
+ __name__ = "GooGl"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
+
+ __description__ = """Goo.gl decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ API_URL = "https://www.googleapis.com/urlshortener/v1/url"
+
+
+ def decrypt(self, pyfile):
+ rep = self.load(self.API_URL, get={'shortUrl': pyfile.url})
+ self.logDebug('JSON data: ' + rep)
+ rep = json_loads(rep)
+
+ if 'longUrl' in rep:
+ self.urls = [rep['longUrl']]
+ else:
+ self.fail('Unable to expand shortened link')
diff --git a/pyload/plugins/crypter/HoerbuchIn.py b/pyload/plugins/crypter/HoerbuchIn.py
new file mode 100644
index 000000000..7c934a6f2
--- /dev/null
+++ b/pyload/plugins/crypter/HoerbuchIn.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.lib.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
+
+from pyload.plugins.Crypter import Crypter
+
+
+class HoerbuchIn(Crypter):
+ __name__ = "HoerbuchIn"
+ __type__ = "crypter"
+ __version__ = "0.6"
+
+ __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)'
+
+ __description__ = """Hoerbuch.in decrypter plugin"""
+ __author_name__ = ("spoob", "mkaay")
+ __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de")
+
+ article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/")
+ protection = re.compile("http://(?:www\.)?hoerbuch\.in/protection/folder_\d+.html")
+
+
+ def decrypt(self, pyfile):
+ self.pyfile = pyfile
+
+ if self.article.match(pyfile.url):
+ src = self.load(pyfile.url)
+ soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
+
+ abookname = soup.find("a", attrs={"rel": "bookmark"}).text
+ for a in soup.findAll("a", attrs={"href": self.protection}):
+ package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1])
+ links = self.decryptFolder(a['href'])
+
+ self.packages.append((package, links, package))
+ else:
+ self.urls = self.decryptFolder(pyfile.url)
+
+ def decryptFolder(self, url):
+ m = self.protection.search(url)
+ if m is None:
+ self.fail("Bad URL")
+ url = m.group(0)
+
+ self.pyfile.url = url
+ src = self.req.load(url, post={"viewed": "adpg"})
+
+ links = []
+ pattern = re.compile("http://www\.hoerbuch\.in/protection/(\w+)/(.*?)\"")
+ for hoster, lid in pattern.findall(src):
+ self.req.lastURL = url
+ self.load("http://www.hoerbuch.in/protection/%s/%s" % (hoster, lid))
+ links.append(self.req.lastEffectiveURL)
+
+ return links
diff --git a/pyload/plugins/crypter/HotfileFolderCom.py b/pyload/plugins/crypter/HotfileFolderCom.py
new file mode 100644
index 000000000..1b5ce28b6
--- /dev/null
+++ b/pyload/plugins/crypter/HotfileFolderCom.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Crypter import Crypter
+
+
+class HotfileFolderCom(Crypter):
+ __name__ = "HotfileFolderCom"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+'
+
+ __description__ = """Hotfile.com folder decrypter plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ name = re.findall(
+ r'<img src="/i/folder.gif" width="23" height="14" style="margin-bottom: -2px;" />([^<]+)', html,
+ re.MULTILINE)[0].replace("/", "")
+ new_links = re.findall(r'href="(http://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+[^"]+)', html)
+
+ new_links = [x[0] for x in new_links]
+
+ self.packages = [(name, new_links, name)]
diff --git a/pyload/plugins/crypter/ILoadTo.py b/pyload/plugins/crypter/ILoadTo.py
new file mode 100644
index 000000000..16f813926
--- /dev/null
+++ b/pyload/plugins/crypter/ILoadTo.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class ILoadTo(DeadCrypter):
+ __name__ = "ILoadTo"
+ __type__ = "crypter"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/'
+
+ __description__ = """Iload.to decrypter plugin"""
+ __author_name__ = "hzpz"
+ __author_mail__ = None
diff --git a/pyload/plugins/crypter/ImgurComAlbum.py b/pyload/plugins/crypter/ImgurComAlbum.py
new file mode 100644
index 000000000..5e8be3a5d
--- /dev/null
+++ b/pyload/plugins/crypter/ImgurComAlbum.py
@@ -0,0 +1,24 @@
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from pyload.utils import uniqify
+
+
+class ImgurComAlbum(SimpleCrypter):
+ __name__ = "ImgurComAlbum"
+ __type__ = "crypter"
+ __version__ = "0.4"
+
+ __pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}'
+
+ __description__ = """Imgur.com decrypter plugin"""
+ __author_name_ = "nath_schwarz"
+ __author_mail_ = "nathan.notwhite@gmail.com"
+
+ TITLE_PATTERN = r'(?P<title>.+) - Imgur'
+ LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)'
+
+
+ def getLinks(self):
+ f = lambda url: "http://" + re.sub(r'(\w{7})s\.', r'\1.', url)
+ return uniqify(map(f, re.findall(self.LINK_PATTERN, self.html)))
diff --git a/pyload/plugins/crypter/LetitbitNetFolder.py b/pyload/plugins/crypter/LetitbitNetFolder.py
new file mode 100644
index 000000000..b03ea27b2
--- /dev/null
+++ b/pyload/plugins/crypter/LetitbitNetFolder.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class LetitbitNetFolder(Crypter):
+ __name__ = "LetitbitNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+'
+
+ __description__ = """Letitbit.net folder decrypter plugin"""
+ __author_name__ = ("DHMH", "z00nx")
+ __author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com")
+
+ FOLDER_PATTERN = r'<table>(.*)</table>'
+ LINK_PATTERN = r'<a href="([^"]+)" target="_blank">'
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if folder is None:
+ self.fail("Parse error (FOLDER)")
+
+ self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
+
+ if not self.urls:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/LinkSaveIn.py b/pyload/plugins/crypter/LinkSaveIn.py
new file mode 100644
index 000000000..84dd8172e
--- /dev/null
+++ b/pyload/plugins/crypter/LinkSaveIn.py
@@ -0,0 +1,225 @@
+# -*- coding: utf-8 -*-
+#
+# * cnl2 and web links are skipped if JS is not available (instead of failing the package)
+# * only best available link source is used (priority: cnl2>rsdf>ccf>dlc>web
+
+import base64
+import binascii
+import re
+
+from Crypto.Cipher import AES
+from pyload.plugins.Crypter import Crypter
+from pyload.unescape import unescape
+
+
+class LinkSaveIn(Crypter):
+ __name__ = "LinkSaveIn"
+ __type__ = "crypter"
+ __version__ = "2.01"
+
+ __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$'
+
+ __description__ = """LinkSave.in decrypter plugin"""
+ __author_name__ = "fragonib"
+ __author_mail__ = "fragonib[AT]yahoo[DOT]es"
+
+ # Constants
+ _JK_KEY_ = "jk"
+ _CRYPTED_KEY_ = "crypted"
+ HOSTER_NAME = "linksave.in"
+
+
+ def setup(self):
+ self.html = None
+ self.fileid = None
+ self.captcha = False
+ self.package = None
+ self.preferred_sources = ["cnl2", "rsdf", "ccf", "dlc", "web"]
+
+ def decrypt(self, pyfile):
+ # Init
+ self.package = pyfile.package()
+ self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
+ self.req.cj.setCookie(self.HOSTER_NAME, "Linksave_Language", "english")
+
+ # Request package
+ self.html = self.load(pyfile.url)
+ if not self.isOnline():
+ self.offline()
+
+ # Check for protection
+ if self.isPasswordProtected():
+ self.unlockPasswordProtection()
+ self.handleErrors()
+
+ if self.isCaptchaProtected():
+ self.captcha = True
+ self.unlockCaptchaProtection()
+ self.handleErrors()
+
+ # Get package name and folder
+ (package_name, folder_name) = self.getPackageInfo()
+
+ # Extract package links
+ package_links = []
+ for type_ in self.preferred_sources:
+ package_links.extend(self.handleLinkSource(type_))
+ if package_links: # use only first source which provides links
+ break
+ package_links = set(package_links)
+
+ # Pack
+ if package_links:
+ self.packages = [(package_name, package_links, folder_name)]
+ else:
+ self.fail('Could not extract any links')
+
+ def isOnline(self):
+ if "<big>Error 404 - Folder not found!</big>" in self.html:
+ self.logDebug("File not found")
+ return False
+ return True
+
+ def isPasswordProtected(self):
+ if re.search(r'''<input.*?type="password"''', self.html):
+ self.logDebug("Links are password protected")
+ return True
+
+ def isCaptchaProtected(self):
+ if "<b>Captcha:</b>" in self.html:
+ self.logDebug("Links are captcha protected")
+ return True
+ return False
+
+ def unlockPasswordProtection(self):
+ password = self.getPassword()
+ self.logDebug("Submitting password [%s] for protected links" % password)
+ post = {"id": self.fileid, "besucherpasswort": password, 'login': 'submit'}
+ self.html = self.load(self.pyfile.url, post=post)
+
+ def unlockCaptchaProtection(self):
+ captcha_hash = re.search(r'name="hash" value="([^"]+)', self.html).group(1)
+ captcha_url = re.search(r'src=".(/captcha/cap.php\?hsh=[^"]+)', self.html).group(1)
+ captcha_code = self.decryptCaptcha("http://linksave.in" + captcha_url, forceUser=True)
+ self.html = self.load(self.pyfile.url, post={"id": self.fileid, "hash": captcha_hash, "code": captcha_code})
+
+ def getPackageInfo(self):
+ name = self.pyfile.package().name
+ folder = self.pyfile.package().folder
+ self.logDebug("Defaulting to pyfile name [%s] and folder [%s] for package" % (name, folder))
+ return name, folder
+
+ def handleErrors(self):
+ if "The visitorpassword you have entered is wrong" in self.html:
+ self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+
+ if self.captcha:
+ if "Wrong code. Please retry" in self.html:
+ self.logDebug("Invalid captcha, retrying")
+ self.invalidCaptcha()
+ self.retry()
+ else:
+ self.correctCaptcha()
+
+ def handleLinkSource(self, type_):
+ if type_ == "cnl2":
+ return self.handleCNL2()
+ elif type_ in ("rsdf", "ccf", "dlc"):
+ return self.handleContainer(type_)
+ elif type_ == "web":
+ return self.handleWebLinks()
+ else:
+ self.fail('unknown source type "%s" (this is probably a bug)' % type_)
+
+ def handleWebLinks(self):
+ package_links = []
+ self.logDebug("Search for Web links")
+ if not self.js:
+ self.logDebug("no JS -> skip Web links")
+ else:
+ #@TODO: Gather paginated web links
+ pattern = r'<a href="http://linksave\.in/(\w{43})"'
+ ids = re.findall(pattern, self.html)
+ self.logDebug("Decrypting %d Web links" % len(ids))
+ for i, weblink_id in enumerate(ids):
+ try:
+ webLink = "http://linksave.in/%s" % weblink_id
+ self.logDebug("Decrypting Web link %d, %s" % (i + 1, webLink))
+ fwLink = "http://linksave.in/fw-%s" % weblink_id
+ response = self.load(fwLink)
+ jscode = re.findall(r'<script type="text/javascript">(.*)</script>', response)[-1]
+ jseval = self.js.eval("document = { write: function(e) { return e; } }; %s" % jscode)
+ dlLink = re.search(r'http://linksave\.in/dl-\w+', jseval).group(0)
+ self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
+ response = self.load(dlLink)
+ link = unescape(re.search(r'<iframe src="(.+?)"', response).group(1))
+ package_links.append(link)
+ except Exception, detail:
+ self.logDebug("Error decrypting Web link %s, %s" % (webLink, detail))
+ return package_links
+
+ def handleContainer(self, type_):
+ package_links = []
+ type_ = type_.lower()
+ self.logDebug('Seach for %s Container links' % type_.upper())
+ if not type_.isalnum(): # check to prevent broken re-pattern (cnl2,rsdf,ccf,dlc,web are all alpha-numeric)
+ self.fail('unknown container type "%s" (this is probably a bug)' % type_)
+ pattern = r"\('%s_link'\).href=unescape\('(.*?\.%s)'\)" % (type_, type_)
+ containersLinks = re.findall(pattern, self.html)
+ self.logDebug("Found %d %s Container links" % (len(containersLinks), type_.upper()))
+ for containerLink in containersLinks:
+ link = "http://linksave.in/%s" % unescape(containerLink)
+ package_links.append(link)
+ return package_links
+
+ def handleCNL2(self):
+ package_links = []
+ self.logDebug("Search for CNL2 links")
+ if not self.js:
+ self.logDebug("no JS -> skip CNL2 links")
+ elif 'cnl2_load' in self.html:
+ try:
+ (vcrypted, vjk) = self._getCipherParams()
+ for (crypted, jk) in zip(vcrypted, vjk):
+ package_links.extend(self._getLinks(crypted, jk))
+ except:
+ self.fail("Unable to decrypt CNL2 links")
+ return package_links
+
+ def _getCipherParams(self):
+ # Get jk
+ jk_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._JK_KEY_
+ vjk = re.findall(jk_re, self.html)
+
+ # Get crypted
+ crypted_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._CRYPTED_KEY_
+ vcrypted = re.findall(crypted_re, self.html)
+
+ # Log and return
+ self.logDebug("Detected %d crypted blocks" % len(vcrypted))
+ return vcrypted, vjk
+
+ def _getLinks(self, crypted, jk):
+ # Get key
+ jreturn = self.js.eval("%s f()" % jk)
+ self.logDebug("JsEngine returns value [%s]" % jreturn)
+ key = binascii.unhexlify(jreturn)
+
+ # Decode crypted
+ crypted = base64.standard_b64decode(crypted)
+
+ # Decrypt
+ Key = key
+ IV = key
+ obj = AES.new(Key, AES.MODE_CBC, IV)
+ text = obj.decrypt(crypted)
+
+ # Extract links
+ text = text.replace("\x00", "").replace("\r", "")
+ links = text.split("\n")
+ links = filter(lambda x: x != "", links)
+
+ # Log and return
+ self.logDebug("Package has %d links" % len(links))
+ return links
diff --git a/pyload/plugins/crypter/LinkdecrypterCom.py b/pyload/plugins/crypter/LinkdecrypterCom.py
new file mode 100644
index 000000000..b6ca2ec4f
--- /dev/null
+++ b/pyload/plugins/crypter/LinkdecrypterCom.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class LinkdecrypterCom(Crypter):
+ __name__ = "LinkdecrypterCom"
+ __type__ = "crypter"
+ __version__ = "0.27"
+
+ __pattern__ = None
+
+ __description__ = """Linkdecrypter.com"""
+ __author_name__ = ("zoidberg", "flowlee")
+ __author_mail__ = ("zoidberg@mujmail.cz", "")
+
+ TEXTAREA_PATTERN = r'<textarea name="links" wrap="off" readonly="1" class="caja_des">(.+)</textarea>'
+ PASSWORD_PATTERN = r'<input type="text" name="password"'
+ CAPTCHA_PATTERN = r'<img class="captcha" src="(.+?)"(.*?)>'
+ REDIR_PATTERN = r'<i>(Click <a href="./">here</a> if your browser does not redirect you).</i>'
+
+
+ def decrypt(self, pyfile):
+
+ self.passwords = self.getPassword().splitlines()
+
+ # API not working anymore
+ self.urls = self.decryptHTML()
+ if not self.urls:
+ self.fail('Could not extract any links')
+
+ def decryptAPI(self):
+
+ get_dict = {"t": "link", "url": self.pyfile.url, "lcache": "1"}
+ self.html = self.load('http://linkdecrypter.com/api', get=get_dict)
+ if self.html.startswith('http://'):
+ return self.html.splitlines()
+
+ if self.html == 'INTERRUPTION(PASSWORD)':
+ for get_dict['pass'] in self.passwords:
+ self.html = self.load('http://linkdecrypter.com/api', get=get_dict)
+ if self.html.startswith('http://'):
+ return self.html.splitlines()
+
+ self.logError('API', self.html)
+ if self.html == 'INTERRUPTION(PASSWORD)':
+ self.fail("No or incorrect password")
+
+ return None
+
+ def decryptHTML(self):
+
+ retries = 5
+
+ post_dict = {"link_cache": "on", "pro_links": self.pyfile.url, "modo_links": "text"}
+ self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True)
+
+ while self.passwords or retries:
+ m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL)
+ if m:
+ return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x]
+
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
+ captcha_url = 'http://linkdecrypter.com/' + m.group(1)
+ result_type = "positional" if "getPos" in m.group(2) else "textual"
+
+ m = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html)
+ msg = m.group(1) if m else ""
+ self.logInfo("Captcha protected link", result_type, msg)
+
+ captcha = self.decryptCaptcha(captcha_url, result_type=result_type)
+ if result_type == "positional":
+ captcha = "%d|%d" % captcha
+ self.html = self.load('http://linkdecrypter.com/', post={"captcha": captcha}, decode=True)
+ retries -= 1
+
+ elif self.PASSWORD_PATTERN in self.html:
+ if self.passwords:
+ password = self.passwords.pop(0)
+ self.logInfo("Password protected link, trying " + password)
+ self.html = self.load('http://linkdecrypter.com/', post={'password': password}, decode=True)
+ else:
+ self.fail("No or incorrect password")
+
+ else:
+ retries -= 1
+ self.html = self.load('http://linkdecrypter.com/', cookies=True, decode=True)
+
+ return None
diff --git a/pyload/plugins/crypter/LixIn.py b/pyload/plugins/crypter/LixIn.py
new file mode 100644
index 000000000..1d812b0e3
--- /dev/null
+++ b/pyload/plugins/crypter/LixIn.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Crypter import Crypter
+
+
+class LixIn(Crypter):
+ __name__ = "LixIn"
+ __type__ = "crypter"
+ __version__ = "0.22"
+
+ __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)'
+
+ __description__ = """Lix.in decrypter plugin"""
+ __author_name__ = "spoob"
+ __author_mail__ = "spoob@pyload.org"
+
+ CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"'
+ SUBMIT_PATTERN = r"value='continue.*?'"
+ LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"'
+
+
+ def decrypt(self, pyfile):
+ url = pyfile.url
+
+ m = re.match(self.__pattern__, url)
+ if m is None:
+ self.fail("couldn't identify file id")
+
+ id = m.group("id")
+ self.logDebug("File id is %s" % id)
+
+ self.html = self.req.load(url, decode=True)
+
+ m = re.search(self.SUBMIT_PATTERN, self.html)
+ if m is None:
+ self.fail("link doesn't seem valid")
+
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
+ for _ in xrange(5):
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
+ self.logDebug("trying captcha")
+ captcharesult = self.decryptCaptcha("http://lix.in/" + m.group("image"))
+ self.html = self.req.load(url, decode=True,
+ post={"capt": captcharesult, "submit": "submit", "tiny": id})
+ else:
+ self.logDebug("no captcha/captcha solved")
+ else:
+ self.html = self.req.load(url, decode=True, post={"submit": "submit", "tiny": id})
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.fail("can't find destination url")
+ else:
+ self.urls = [m.group("link")]
+ self.logDebug("Found link %s, adding to package" % self.urls[0])
diff --git a/pyload/plugins/crypter/LofCc.py b/pyload/plugins/crypter/LofCc.py
new file mode 100644
index 000000000..6c91a55ec
--- /dev/null
+++ b/pyload/plugins/crypter/LofCc.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class LofCc(DeadCrypter):
+ __name__ = "LofCc"
+ __type__ = "crypter"
+ __version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?lof.cc/(.*)'
+
+ __description__ = """Lof.cc decrypter plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
diff --git a/pyload/plugins/crypter/MBLinkInfo.py b/pyload/plugins/crypter/MBLinkInfo.py
new file mode 100644
index 000000000..8516ff6e4
--- /dev/null
+++ b/pyload/plugins/crypter/MBLinkInfo.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class MBLinkInfo(DeadCrypter):
+ __name__ = "MBLinkInfo"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
+
+ __description__ = """MBLink.info decrypter plugin"""
+ __author_name__ = ("Gummibaer", "stickell")
+ __author_mail__ = ("Gummibaer@wiki-bierkiste.de", "l.stickell@yahoo.it")
diff --git a/pyload/plugins/crypter/MediafireComFolder.py b/pyload/plugins/crypter/MediafireComFolder.py
new file mode 100644
index 000000000..4ea904e89
--- /dev/null
+++ b/pyload/plugins/crypter/MediafireComFolder.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+from pyload.plugins.hoster.MediafireCom import checkHTMLHeader
+from pyload.common.json_layer import json_loads
+
+
+class MediafireComFolder(Crypter):
+ __name__ = "MediafireComFolder"
+ __type__ = "crypter"
+ __version__ = "0.14"
+
+ __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
+
+ __description__ = """Mediafire.com folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FOLDER_KEY_PATTERN = r"var afI= '(\w+)';"
+ FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>'
+
+
+ def decrypt(self, pyfile):
+ url, result = checkHTMLHeader(pyfile.url)
+ self.logDebug('Location (%d): %s' % (result, url))
+
+ if result == 0:
+ # load and parse html
+ html = self.load(pyfile.url)
+ m = re.search(self.FILE_URL_PATTERN, html)
+ if m:
+ # file page
+ self.urls.append("http://www.mediafire.com/file/%s" % m.group(1))
+ else:
+ # folder page
+ m = re.search(self.FOLDER_KEY_PATTERN, html)
+ if m:
+ folder_key = m.group(1)
+ self.logDebug("FOLDER KEY: %s" % folder_key)
+
+ json_resp = json_loads(self.load(
+ "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key))
+ #self.logInfo(json_resp)
+ if json_resp['response']['result'] == "Success":
+ for link in json_resp['response']['folder_info']['files']:
+ self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey'])
+ else:
+ self.fail(json_resp['response']['message'])
+ elif result == 1:
+ self.offline()
+ else:
+ self.urls.append(url)
+
+ if not self.urls:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/Movie2kTo.py b/pyload/plugins/crypter/Movie2kTo.py
new file mode 100644
index 000000000..b6a554758
--- /dev/null
+++ b/pyload/plugins/crypter/Movie2kTo.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class Movie2kTo(DeadCrypter):
+ __name__ = "Movie2kTo"
+ __type__ = "crypter"
+ __version__ = "0.51"
+
+ __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html'
+
+ __description__ = """Movie2k.to decrypter plugin"""
+ __author_name__ = "4Christopher"
+ __author_mail__ = "4Christopher@gmx.de"
diff --git a/pyload/plugins/crypter/MultiUpOrg.py b/pyload/plugins/crypter/MultiUpOrg.py
new file mode 100644
index 000000000..96553a09a
--- /dev/null
+++ b/pyload/plugins/crypter/MultiUpOrg.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+import re
+from urlparse import urljoin
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class MultiUpOrg(SimpleCrypter):
+ __name__ = "MultiUpOrg"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
+
+ __description__ = """MultiUp.org crypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ TITLE_PATTERN = r'<title>.*(Project|Projet|ownload|élécharger) (?P<title>.+?) (\(|- )'
+
+
+ def getLinks(self):
+ m_type = re.match(self.__pattern__, self.pyfile.url).group("TYPE")
+
+ if m_type == "project":
+ pattern = r'\n(http://www\.multiup\.org/(?:en|fr)/download/.*)'
+ else:
+ pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"'
+ if m_type == "download":
+ dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>'
+ miror_page = urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1))
+ self.html = self.load(miror_page)
+
+ return re.findall(pattern, self.html)
diff --git a/pyload/plugins/crypter/MultiloadCz.py b/pyload/plugins/crypter/MultiloadCz.py
new file mode 100644
index 000000000..be7950e98
--- /dev/null
+++ b/pyload/plugins/crypter/MultiloadCz.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class MultiloadCz(Crypter):
+ __name__ = "MultiloadCz"
+ __type__ = "crypter"
+ __version__ = "0.4"
+
+ __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*'
+ __config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""),
+ ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """Multiload.cz decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>'
+ LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">'
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+
+ if re.match(self.__pattern__, pyfile.url).group(1) == "slozka":
+ m = re.search(self.FOLDER_PATTERN, self.html)
+ if m:
+ self.urls.extend(m.group(1).split())
+ else:
+ m = re.findall(self.LINK_PATTERN, self.html)
+ if m:
+ prefered_set = set(self.getConfig("usedHoster").split('|'))
+ self.urls.extend([x[1] for x in m if x[0] in prefered_set])
+
+ if not self.urls:
+ ignored_set = set(self.getConfig("ignoredHoster").split('|'))
+ self.urls.extend([x[1] for x in m if x[0] not in ignored_set])
+
+ if not self.urls:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/MultiuploadCom.py b/pyload/plugins/crypter/MultiuploadCom.py
new file mode 100644
index 000000000..5aa77e5f5
--- /dev/null
+++ b/pyload/plugins/crypter/MultiuploadCom.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+import re
+from time import time
+
+from pyload.plugins.Crypter import Crypter
+from pyload.common.json_layer import json_loads
+
+
+class MultiuploadCom(Crypter):
+ __name__ = "MultiuploadCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)'
+ __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "multiupload"),
+ ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """MultiUpload.com decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ ML_LINK_PATTERN = r'<div id="downloadbutton_" style=""><a href="([^"]+)"'
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url)
+ m = re.search(self.ML_LINK_PATTERN, self.html)
+ ml_url = m.group(1) if m else None
+
+ json_list = json_loads(self.load("http://multiupload.com/progress/", get={
+ "d": re.match(self.__pattern__, pyfile.url).group(1),
+ "r": str(int(time() * 1000))
+ }))
+
+ prefered_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("preferedHoster").split('|')))
+
+ if ml_url and 'multiupload' in prefered_set:
+ self.urls.append(ml_url)
+
+ for link in json_list:
+ if link['service'].lower() in prefered_set and int(link['status']) and not int(link['deleted']):
+ url = self.getLocation(link['url'])
+ if url:
+ self.urls.append(url)
+
+ if not self.urls:
+ ignored_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("ignoredHoster").split('|')))
+
+ if 'multiupload' not in ignored_set:
+ self.urls.append(ml_url)
+
+ for link in json_list:
+ if link['service'].lower() not in ignored_set and int(link['status']) and not int(link['deleted']):
+ url = self.getLocation(link['url'])
+ if url:
+ self.urls.append(url)
+
+ if not self.urls:
+ self.fail('Could not extract any links')
+
+ def getLocation(self, url):
+ header = self.load(url, just_header=True)
+ return header['location'] if "location" in header else None
diff --git a/pyload/plugins/crypter/NCryptIn.py b/pyload/plugins/crypter/NCryptIn.py
new file mode 100644
index 000000000..70c541d02
--- /dev/null
+++ b/pyload/plugins/crypter/NCryptIn.py
@@ -0,0 +1,303 @@
+# -*- coding: utf-8 -*-
+
+import base64
+import binascii
+import re
+
+from Crypto.Cipher import AES
+
+from pyload.plugins.Crypter import Crypter
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+
+
+class NCryptIn(Crypter):
+ __name__ = "NCryptIn"
+ __type__ = "crypter"
+ __version__ = "1.32"
+
+ __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)'
+
+ __description__ = """NCrypt.in decrypter plugin"""
+ __author_name__ = ("fragonib", "stickell")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "l.stickell@yahoo.it")
+
+ JK_KEY = "jk"
+ CRYPTED_KEY = "crypted"
+
+ NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"'
+
+
+ def setup(self):
+ self.package = None
+ self.html = None
+ self.cleanedHtml = None
+ self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"]
+ self.protection_type = None
+
+ def decrypt(self, pyfile):
+ # Init
+ self.package = pyfile.package()
+ package_links = []
+ package_name = self.package.name
+ folder_name = self.package.folder
+
+ # Deal with single links
+ if self.isSingleLink():
+ package_links.extend(self.handleSingleLink())
+
+ # Deal with folders
+ else:
+
+ # Request folder home
+ self.html = self.requestFolderHome()
+ self.cleanedHtml = self.removeHtmlCrap(self.html)
+ if not self.isOnline():
+ self.offline()
+
+ # Check for folder protection
+ if self.isProtected():
+ self.html = self.unlockProtection()
+ self.cleanedHtml = self.removeHtmlCrap(self.html)
+ self.handleErrors()
+
+ # Prepare package name and folder
+ (package_name, folder_name) = self.getPackageInfo()
+
+ # Extract package links
+ for link_source_type in self.links_source_order:
+ package_links.extend(self.handleLinkSource(link_source_type))
+ if package_links: # use only first source which provides links
+ break
+ package_links = set(package_links)
+
+ # Pack and return links
+ if not package_links:
+ self.fail('Could not extract any links')
+ self.packages = [(package_name, package_links, folder_name)]
+
+ def isSingleLink(self):
+ link_type = re.match(self.__pattern__, self.pyfile.url).group('type')
+ return link_type in ("link", "frame")
+
+ def requestFolderHome(self):
+ return self.load(self.pyfile.url, decode=True)
+
+ def removeHtmlCrap(self, content):
+ patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")',
+ r'display:none;">(.*?)</(div|span)>',
+ r'<div\s+class="jdownloader"(.*?)</div>',
+ r'<table class="global">(.*?)</table>',
+ r'<iframe\s+style="display:none(.*?)</iframe>')
+ for pattern in patterns:
+ rexpr = re.compile(pattern, re.DOTALL)
+ content = re.sub(rexpr, "", content)
+ return content
+
+ def isOnline(self):
+ if "Your folder does not exist" in self.cleanedHtml:
+ self.logDebug("File not m")
+ return False
+ return True
+
+ def isProtected(self):
+ form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL)
+ if form is not None:
+ content = form.group(1)
+ for keyword in ("password", "captcha"):
+ if keyword in content:
+ self.protection_type = keyword
+ self.logDebug("Links are %s protected" % self.protection_type)
+ return True
+ return False
+
+ def getPackageInfo(self):
+ m = re.search(self.NAME_PATTERN, self.html)
+ if m:
+ name = folder = m.group('N').strip()
+ self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
+ else:
+ name = self.package.name
+ folder = self.package.folder
+ self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
+ return name, folder
+
+ def unlockProtection(self):
+
+ postData = {}
+
+ form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.DOTALL).group(1)
+
+ # Submit package password
+ if "password" in form:
+ password = self.getPassword()
+ self.logDebug("Submitting password [%s] for protected links" % password)
+ postData['password'] = password
+
+ # Resolve anicaptcha
+ if "anicaptcha" in form:
+ self.logDebug("Captcha protected")
+ captchaUri = re.search(r'src="(/temp/anicaptcha/[^"]+)', form).group(1)
+ captcha = self.decryptCaptcha("http://ncrypt.in" + captchaUri)
+ self.logDebug("Captcha resolved [%s]" % captcha)
+ postData['captcha'] = captcha
+
+ # Resolve recaptcha
+ if "recaptcha" in form:
+ self.logDebug("ReCaptcha protected")
+ captcha_key = re.search(r'\?k=(.*?)"', form).group(1)
+ self.logDebug("Resolving ReCaptcha with key [%s]" % captcha_key)
+ recaptcha = ReCaptcha(self)
+ challenge, code = recaptcha.challenge(captcha_key)
+ postData['recaptcha_challenge_field'] = challenge
+ postData['recaptcha_response_field'] = code
+
+ # Resolve circlecaptcha
+ if "circlecaptcha" in form:
+ self.logDebug("CircleCaptcha protected")
+ captcha_img_url = "http://ncrypt.in/classes/captcha/circlecaptcha.php"
+ coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
+ postData['circle.x'] = coords[0]
+ postData['circle.y'] = coords[1]
+
+ # Unlock protection
+ postData['submit_protected'] = 'Continue to folder'
+ return self.load(self.pyfile.url, post=postData, decode=True)
+
+ def handleErrors(self):
+ if self.protection_type == "password":
+ if "This password is invalid!" in self.cleanedHtml:
+ self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+
+ if self.protection_type == "captcha":
+ if "The securitycheck was wrong!" in self.cleanedHtml:
+ self.logDebug("Invalid captcha, retrying")
+ self.invalidCaptcha()
+ self.retry()
+ else:
+ self.correctCaptcha()
+
+ def handleLinkSource(self, link_source_type):
+ # Check for JS engine
+ require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc")
+ if require_js_engine and not self.js:
+ self.logDebug("No JS engine available, skip %s links" % link_source_type)
+ return []
+
+ # Select suitable handler
+ if link_source_type == 'single':
+ return self.handleSingleLink()
+ if link_source_type == 'cnl2':
+ return self.handleCNL2()
+ elif link_source_type in ("rsdf", "ccf", "dlc"):
+ return self.handleContainer(link_source_type)
+ elif link_source_type == "web":
+ return self.handleWebLinks()
+ else:
+ self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type)
+
+ def handleSingleLink(self):
+
+ self.logDebug("Handling Single link")
+ package_links = []
+
+ # Decrypt single link
+ decrypted_link = self.decryptLink(self.pyfile.url)
+ if decrypted_link:
+ package_links.append(decrypted_link)
+
+ return package_links
+
+ def handleCNL2(self):
+
+ self.logDebug("Handling CNL2 links")
+ package_links = []
+
+ if 'cnl2_output' in self.cleanedHtml:
+ try:
+ (vcrypted, vjk) = self._getCipherParams()
+ for (crypted, jk) in zip(vcrypted, vjk):
+ package_links.extend(self._getLinks(crypted, jk))
+ except:
+ self.fail("Unable to decrypt CNL2 links")
+
+ return package_links
+
+ def handleContainers(self):
+
+ self.logDebug("Handling Container links")
+ package_links = []
+
+ pattern = r"/container/(rsdf|dlc|ccf)/([a-z0-9]+)"
+ containersLinks = re.findall(pattern, self.html)
+ self.logDebug("Decrypting %d Container links" % len(containersLinks))
+ for containerLink in containersLinks:
+ link = "http://ncrypt.in/container/%s/%s.%s" % (containerLink[0], containerLink[1], containerLink[0])
+ package_links.append(link)
+
+ return package_links
+
+ def handleWebLinks(self):
+
+ self.logDebug("Handling Web links")
+ pattern = r"(http://ncrypt\.in/link-.*?=)"
+ links = re.findall(pattern, self.html)
+
+ package_links = []
+ self.logDebug("Decrypting %d Web links" % len(links))
+ for i, link in enumerate(links):
+ self.logDebug("Decrypting Web link %d, %s" % (i + 1, link))
+ decrypted_link = self.decrypt(link)
+ if decrypted_link:
+ package_links.append(decrypted_link)
+
+ return package_links
+
+ def decryptLink(self, link):
+ try:
+ url = link.replace("link-", "frame-")
+ link = self.load(url, just_header=True)['location']
+ return link
+ except Exception, detail:
+ self.logDebug("Error decrypting link %s, %s" % (link, detail))
+
+ def _getCipherParams(self):
+
+ pattern = r'<input.*?name="%s".*?value="(.*?)"'
+
+ # Get jk
+ jk_re = pattern % NCryptIn.JK_KEY
+ vjk = re.findall(jk_re, self.html)
+
+ # Get crypted
+ crypted_re = pattern % NCryptIn.CRYPTED_KEY
+ vcrypted = re.findall(crypted_re, self.html)
+
+ # Log and return
+ self.logDebug("Detected %d crypted blocks" % len(vcrypted))
+ return vcrypted, vjk
+
+ def _getLinks(self, crypted, jk):
+ # Get key
+ jreturn = self.js.eval("%s f()" % jk)
+ self.logDebug("JsEngine returns value [%s]" % jreturn)
+ key = binascii.unhexlify(jreturn)
+
+ # Decode crypted
+ crypted = base64.standard_b64decode(crypted)
+
+ # Decrypt
+ Key = key
+ IV = key
+ obj = AES.new(Key, AES.MODE_CBC, IV)
+ text = obj.decrypt(crypted)
+
+ # Extract links
+ text = text.replace("\x00", "").replace("\r", "")
+ links = text.split("\n")
+ links = filter(lambda x: x != "", links)
+
+ # Log and return
+ self.logDebug("Block has %d links" % len(links))
+ return links
diff --git a/pyload/plugins/crypter/NetfolderIn.py b/pyload/plugins/crypter/NetfolderIn.py
new file mode 100644
index 000000000..858755e5c
--- /dev/null
+++ b/pyload/plugins/crypter/NetfolderIn.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class NetfolderIn(SimpleCrypter):
+ __name__ = "NetfolderIn"
+ __type__ = "crypter"
+ __version__ = "0.6"
+
+ __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))'
+
+ __description__ = """NetFolder.in decrypter plugin"""
+ __author_name__ = ("RaNaN", "fragonib")
+ __author_mail__ = ("RaNaN@pyload.org", "fragonib[AT]yahoo[DOT]es")
+
+ TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span(.*)>(?P<title>.+)</span></div>'
+
+
+ def decrypt(self, pyfile):
+ # Request package
+ self.html = self.load(pyfile.url)
+
+ # Check for password protection
+ if self.isPasswordProtected():
+ self.html = self.submitPassword()
+ if not self.html:
+ self.fail("Incorrect password, please set right password on Add package form and retry")
+
+ # Get package name and folder
+ (package_name, folder_name) = self.getPackageNameAndFolder()
+
+ # Get package links
+ package_links = self.getLinks()
+
+ # Set package
+ self.packages = [(package_name, package_links, folder_name)]
+
+ def isPasswordProtected(self):
+ if '<input type="password" name="password"' in self.html:
+ self.logDebug("Links are password protected")
+ return True
+ return False
+
+ def submitPassword(self):
+ # Gather data
+ try:
+ m = re.match(self.__pattern__, self.pyfile.url)
+ id = max(m.group('id1'), m.group('id2'))
+ except AttributeError:
+ self.logDebug("Unable to get package id from url [%s]" % self.pyfile.url)
+ return
+ url = "http://netfolder.in/folder.php?folder_id=" + id
+ password = self.getPassword()
+
+ # Submit package password
+ post = {'password': password, 'save': 'Absenden'}
+ self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id))
+ html = self.load(url, {}, post)
+
+ # Check for invalid password
+ if '<div class="InPage_Error">' in html:
+ self.logDebug("Incorrect password, please set right password on Edit package form and retry")
+ return None
+
+ return html
+
+ def getLinks(self):
+ links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",")
+ self.logDebug("Package has %d links" % len(links))
+ return links
diff --git a/pyload/plugins/crypter/NosvideoCom.py b/pyload/plugins/crypter/NosvideoCom.py
new file mode 100644
index 000000000..e1c9e2c55
--- /dev/null
+++ b/pyload/plugins/crypter/NosvideoCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class NosvideoCom(SimpleCrypter):
+ __name__ = "NosvideoCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
+
+ __description__ = """Nosvideo.com decrypter plugin"""
+ __author_name__ = "igel"
+ __author_mail__ = "igelkun@myopera.com"
+
+ LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"'
+ TITLE_PATTERN = r'<[tT]itle>Watch (?P<title>.+)</[tT]itle>'
diff --git a/pyload/plugins/crypter/OneKhDe.py b/pyload/plugins/crypter/OneKhDe.py
new file mode 100644
index 000000000..320eaf6c6
--- /dev/null
+++ b/pyload/plugins/crypter/OneKhDe.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.unescape import unescape
+from pyload.plugins.Crypter import Crypter
+
+
+class OneKhDe(Crypter):
+ __name__ = "OneKhDe"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?1kh.de/f/'
+
+ __description__ = """1kh.de decrypter plugin"""
+ __author_name__ = "spoob"
+ __author_mail__ = "spoob@pyload.org"
+
+
+ def __init__(self, parent):
+ Crypter.__init__(self, parent)
+ self.parent = parent
+ self.html = None
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ return True
+
+ def proceed(self, url, location):
+ url = self.parent.url
+ self.html = self.req.load(url)
+ link_ids = re.findall(r"<a id=\"DownloadLink_(\d*)\" href=\"http://1kh.de/", self.html)
+ for id in link_ids:
+ new_link = unescape(
+ re.search("width=\"100%\" src=\"(.*)\"></iframe>", self.req.load("http://1kh.de/l/" + id)).group(1))
+ self.urls.append(new_link)
diff --git a/pyload/plugins/crypter/OronComFolder.py b/pyload/plugins/crypter/OronComFolder.py
new file mode 100644
index 000000000..9b5fb3959
--- /dev/null
+++ b/pyload/plugins/crypter/OronComFolder.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class OronComFolder(DeadCrypter):
+ __name__ = "OronComFolder"
+ __type__ = "crypter"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+'
+
+ __description__ = """Oron.com folder decrypter plugin"""
+ __author_name__ = "DHMH"
+ __author_mail__ = "webmaster@pcProfil.de"
diff --git a/pyload/plugins/crypter/PastebinCom.py b/pyload/plugins/crypter/PastebinCom.py
new file mode 100644
index 000000000..8e394ac3a
--- /dev/null
+++ b/pyload/plugins/crypter/PastebinCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class PastebinCom(SimpleCrypter):
+ __name__ = "PastebinCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
+
+ __description__ = """Pastebin.com decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>'
+ TITLE_PATTERN = r'<div class="paste_box_line1" title="(?P<title>[^"]+)">'
diff --git a/pyload/plugins/crypter/QuickshareCzFolder.py b/pyload/plugins/crypter/QuickshareCzFolder.py
new file mode 100644
index 000000000..5d99cbffd
--- /dev/null
+++ b/pyload/plugins/crypter/QuickshareCzFolder.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class QuickshareCzFolder(Crypter):
+ __name__ = "QuickshareCzFolder"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*'
+
+ __description__ = """Quickshare.cz folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>'
+ LINK_PATTERN = r'(http://www.quickshare.cz/\S+)'
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
+ self.fail("Parse error (FOLDER)")
+ self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
+
+ if not self.urls:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/RSLayerCom.py b/pyload/plugins/crypter/RSLayerCom.py
new file mode 100644
index 000000000..ded550a50
--- /dev/null
+++ b/pyload/plugins/crypter/RSLayerCom.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class RSLayerCom(DeadCrypter):
+ __name__ = "RSLayerCom"
+ __type__ = "crypter"
+ __version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-'
+
+ __description__ = """RS-Layer.com decrypter plugin"""
+ __author_name__ = "hzpz"
+ __author_mail__ = None
diff --git a/pyload/plugins/crypter/RelinkUs.py b/pyload/plugins/crypter/RelinkUs.py
new file mode 100644
index 000000000..74228d41a
--- /dev/null
+++ b/pyload/plugins/crypter/RelinkUs.py
@@ -0,0 +1,263 @@
+# -*- coding: utf-8 -*-
+
+import base64
+import binascii
+import re
+import os
+
+from Crypto.Cipher import AES
+from pyload.plugins.Crypter import Crypter
+
+
+class RelinkUs(Crypter):
+ __name__ = "RelinkUs"
+ __type__ = "crypter"
+ __version__ = "3.0"
+
+ __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)'
+
+ __description__ = """Relink.us decrypter plugin"""
+ __author_name__ = "fragonib"
+ __author_mail__ = "fragonib[AT]yahoo[DOT]es"
+
+ # Constants
+ PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"]
+
+ OFFLINE_TOKEN = r'<title>Tattooside'
+ PASSWORD_TOKEN = r'container_password\.php'
+ PASSWORD_ERROR_ROKEN = r'You have entered an incorrect password'
+ PASSWORD_SUBMIT_URL = r'http://www\.relink\.us/container_password\.php'
+ CAPTCHA_TOKEN = r'container_captcha\.php'
+ CAPTCHA_ERROR_ROKEN = r'You have solved the captcha wrong'
+ CAPTCHA_IMG_URL = r'http://www\.relink\.us/core/captcha/circlecaptcha\.php'
+ CAPTCHA_SUBMIT_URL = r'http://www\.relink\.us/container_captcha\.php'
+ FILE_TITLE_REGEX = r'<th>Title</th><td><i>(.*)</i></td></tr>'
+ FILE_NOTITLE = r'No title'
+
+ CNL2_FORM_REGEX = r'<form id="cnl_form-(.*?)</form>'
+ CNL2_FORMINPUT_REGEX = r'<input.*?name="%s".*?value="(.*?)"'
+ CNL2_JK_KEY = "jk"
+ CNL2_CRYPTED_KEY = "crypted"
+ DLC_LINK_REGEX = r'<a href=".*?" class="dlc_button" target="_blank">'
+ DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php'
+ WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)"
+ WEB_FORWARD_URL = r'http://www\.relink\.us/frame\.php'
+ WEB_LINK_REGEX = r'<iframe name="Container" height="100%" frameborder="no" width="100%" src="(?P<link>.+)"></iframe>'
+
+
+ def setup(self):
+ self.fileid = None
+ self.package = None
+ self.password = None
+ self.html = None
+ self.captcha = False
+
+ def decrypt(self, pyfile):
+ # Init
+ self.initPackage(pyfile)
+
+ # Request package
+ self.requestPackage()
+
+ # Check for online
+ if not self.isOnline():
+ self.offline()
+
+ # Check for protection
+ if self.isPasswordProtected():
+ self.unlockPasswordProtection()
+ self.handleErrors()
+
+ if self.isCaptchaProtected():
+ self.captcha = True
+ self.unlockCaptchaProtection()
+ self.handleErrors()
+
+ # Get package name and folder
+ (package_name, folder_name) = self.getPackageInfo()
+
+ # Extract package links
+ package_links = []
+ for sources in self.PREFERRED_LINK_SOURCES:
+ package_links.extend(self.handleLinkSource(sources))
+ if package_links: # use only first source which provides links
+ break
+ package_links = set(package_links)
+
+ # Pack
+ if package_links:
+ self.packages = [(package_name, package_links, folder_name)]
+ else:
+ self.fail('Could not extract any links')
+
+ def initPackage(self, pyfile):
+ self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
+ self.package = pyfile.package()
+ self.password = self.getPassword()
+
+ def requestPackage(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ def isOnline(self):
+ if self.OFFLINE_TOKEN in self.html:
+ self.logDebug("File not found")
+ return False
+ return True
+
+ def isPasswordProtected(self):
+ if self.PASSWORD_TOKEN in self.html:
+ self.logDebug("Links are password protected")
+ return True
+
+ def isCaptchaProtected(self):
+ if self.CAPTCHA_TOKEN in self.html:
+ self.logDebug("Links are captcha protected")
+ return True
+ return False
+
+ def unlockPasswordProtection(self):
+ self.logDebug("Submitting password [%s] for protected links" % self.password)
+ passwd_url = self.PASSWORD_SUBMIT_URL + "?id=%s" % self.fileid
+ passwd_data = {'id': self.fileid, 'password': self.password, 'pw': 'submit'}
+ self.html = self.load(passwd_url, post=passwd_data, decode=True)
+
+ def unlockCaptchaProtection(self):
+ self.logDebug("Request user positional captcha resolving")
+ captcha_img_url = self.CAPTCHA_IMG_URL + "?id=%s" % self.fileid
+ coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
+ captcha_post_url = self.CAPTCHA_SUBMIT_URL + "?id=%s" % self.fileid
+ captcha_post_data = {'button.x': coords[0], 'button.y': coords[1], 'captcha': 'submit'}
+ self.html = self.load(captcha_post_url, post=captcha_post_data, decode=True)
+
+ def getPackageInfo(self):
+ name = folder = None
+
+ # Try to get info from web
+ m = re.search(self.FILE_TITLE_REGEX, self.html)
+ if m is not None:
+ title = m.group(1).strip()
+ if not self.FILE_NOTITLE in title:
+ name = folder = title
+ self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
+
+ # Fallback to defaults
+ if not name or not folder:
+ name = self.package.name
+ folder = self.package.folder
+ self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
+
+ # Return package info
+ return name, folder
+
+ def handleErrors(self):
+ if self.PASSWORD_ERROR_ROKEN in self.html:
+ msg = "Incorrect password, please set right password on 'Edit package' form and retry"
+ self.logDebug(msg)
+ self.fail(msg)
+
+ if self.captcha:
+ if self.CAPTCHA_ERROR_ROKEN in self.html:
+ self.logDebug("Invalid captcha, retrying")
+ self.invalidCaptcha()
+ self.retry()
+ else:
+ self.correctCaptcha()
+
+ def handleLinkSource(self, source):
+ if source == 'cnl2':
+ return self.handleCNL2Links()
+ elif source == 'dlc':
+ return self.handleDLCLinks()
+ elif source == 'web':
+ return self.handleWEBLinks()
+ else:
+ self.fail('Unknown source [%s] (this is probably a bug)' % source)
+
+ def handleCNL2Links(self):
+ self.logDebug("Search for CNL2 links")
+ package_links = []
+ m = re.search(self.CNL2_FORM_REGEX, self.html, re.DOTALL)
+ if m is not None:
+ cnl2_form = m.group(1)
+ try:
+ (vcrypted, vjk) = self._getCipherParams(cnl2_form)
+ for (crypted, jk) in zip(vcrypted, vjk):
+ package_links.extend(self._getLinks(crypted, jk))
+ except:
+ self.logDebug("Unable to decrypt CNL2 links")
+ return package_links
+
+ def handleDLCLinks(self):
+ self.logDebug('Search for DLC links')
+ package_links = []
+ m = re.search(self.DLC_LINK_REGEX, self.html)
+ if m is not None:
+ container_url = self.DLC_DOWNLOAD_URL + "?id=%s&dlc=1" % self.fileid
+ self.logDebug("Downloading DLC container link [%s]" % container_url)
+ try:
+ dlc = self.load(container_url)
+ dlc_filename = self.fileid + ".dlc"
+ dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename)
+ f = open(dlc_filepath, "wb")
+ f.write(dlc)
+ f.close()
+ package_links.append(dlc_filepath)
+ except:
+ self.logDebug("Unable to download DLC container")
+ return package_links
+
+ def handleWEBLinks(self):
+ self.logDebug("Search for WEB links")
+ package_links = []
+ fw_params = re.findall(self.WEB_FORWARD_REGEX, self.html)
+ self.logDebug("Decrypting %d Web links" % len(fw_params))
+ for index, fw_param in enumerate(fw_params):
+ try:
+ fw_url = self.WEB_FORWARD_URL + "?%s" % fw_param
+ self.logDebug("Decrypting Web link %d, %s" % (index + 1, fw_url))
+ fw_response = self.load(fw_url, decode=True)
+ dl_link = re.search(self.WEB_LINK_REGEX, fw_response).group('link')
+ package_links.append(dl_link)
+ except Exception, detail:
+ self.logDebug("Error decrypting Web link %s, %s" % (index, detail))
+ self.setWait(4)
+ self.wait()
+ return package_links
+
+ def _getCipherParams(self, cnl2_form):
+ # Get jk
+ jk_re = self.CNL2_FORMINPUT_REGEX % self.CNL2_JK_KEY
+ vjk = re.findall(jk_re, cnl2_form, re.IGNORECASE)
+
+ # Get crypted
+ crypted_re = self.CNL2_FORMINPUT_REGEX % RelinkUs.CNL2_CRYPTED_KEY
+ vcrypted = re.findall(crypted_re, cnl2_form, re.IGNORECASE)
+
+ # Log and return
+ self.logDebug("Detected %d crypted blocks" % len(vcrypted))
+ return vcrypted, vjk
+
+ def _getLinks(self, crypted, jk):
+ # Get key
+ jreturn = self.js.eval("%s f()" % jk)
+ self.logDebug("JsEngine returns value [%s]" % jreturn)
+ key = binascii.unhexlify(jreturn)
+
+ # Decode crypted
+ crypted = base64.standard_b64decode(crypted)
+
+ # Decrypt
+ Key = key
+ IV = key
+ obj = AES.new(Key, AES.MODE_CBC, IV)
+ text = obj.decrypt(crypted)
+
+ # Extract links
+ text = text.replace("\x00", "").replace("\r", "")
+ links = text.split("\n")
+ links = filter(lambda x: x != "", links)
+
+ # Log and return
+ self.logDebug("Package has %d links" % len(links))
+ return links
diff --git a/pyload/plugins/crypter/SafelinkingNet.py b/pyload/plugins/crypter/SafelinkingNet.py
new file mode 100644
index 000000000..62dcc6021
--- /dev/null
+++ b/pyload/plugins/crypter/SafelinkingNet.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION
+
+from pyload.lib.BeautifulSoup import BeautifulSoup
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Crypter import Crypter
+from pyload.plugins.internal.CaptchaService import SolveMedia
+
+
+class SafelinkingNet(Crypter):
+ __name__ = "SafelinkingNet"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+'
+
+ __description__ = """Safelinking.net decrypter plugin"""
+ __author_name__ = "quareevo"
+ __author_mail__ = "quareevo@arcor.de"
+
+ SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';"
+
+
+ def decrypt(self, pyfile):
+ url = pyfile.url
+ if re.match(self.__pattern__, url).group(1) == "d":
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+ self.load(url)
+ m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE)
+ if m:
+ self.urls = [m.group(1)]
+ else:
+ self.fail("Couldn't find forwarded Link")
+
+ else:
+ password = ""
+ postData = {"post-protect": "1"}
+
+ self.html = self.load(url)
+
+ if "link-password" in self.html:
+ password = pyfile.package().password
+ postData['link-password'] = password
+
+ if "altcaptcha" in self.html:
+ for _ in xrange(5):
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m:
+ captchaKey = m.group(1)
+ captcha = SolveMedia(self)
+ captchaProvider = "Solvemedia"
+ else:
+ self.fail("Error parsing captcha")
+
+ challenge, response = captcha.challenge(captchaKey)
+ postData['adcopy_challenge'] = challenge
+ postData['adcopy_response'] = response
+
+ self.html = self.load(url, post=postData)
+ if "The password you entered was incorrect" in self.html:
+ self.fail("Incorrect Password")
+ if not "The CAPTCHA code you entered was wrong" in self.html:
+ break
+
+ pyfile.package().password = ""
+ soup = BeautifulSoup(self.html)
+ scripts = soup.findAll("script")
+ for s in scripts:
+ if "d_links" in s.text:
+ break
+ m = re.search('d_links":(\[.*?\])', s.text)
+ if m:
+ linkDict = json_loads(m.group(1))
+ for link in linkDict:
+ if not "http://" in link['full']:
+ self.urls.append("https://safelinking.net/d/" + link['full'])
+ else:
+ self.urls.append(link['full'])
diff --git a/pyload/plugins/crypter/SecuredIn.py b/pyload/plugins/crypter/SecuredIn.py
new file mode 100644
index 000000000..fc2667586
--- /dev/null
+++ b/pyload/plugins/crypter/SecuredIn.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class SecuredIn(DeadCrypter):
+ __name__ = "SecuredIn"
+ __type__ = "crypter"
+ __version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html'
+
+ __description__ = """Secured.in decrypter plugin"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
diff --git a/pyload/plugins/crypter/SerienjunkiesOrg.py b/pyload/plugins/crypter/SerienjunkiesOrg.py
new file mode 100644
index 000000000..c7f7b1892
--- /dev/null
+++ b/pyload/plugins/crypter/SerienjunkiesOrg.py
@@ -0,0 +1,324 @@
+# -*- coding: utf-8 -*-
+
+import random
+import re
+
+from time import sleep
+
+from pyload.lib.BeautifulSoup import BeautifulSoup
+
+from pyload.plugins.Crypter import Crypter
+from pyload.unescape import unescape
+
+
+class SerienjunkiesOrg(Crypter):
+ __name__ = "SerienjunkiesOrg"
+ __type__ = "crypter"
+ __version__ = "0.39"
+
+ __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?'
+ __config__ = [("changeNameSJ", "Packagename;Show;Season;Format;Episode", "Take SJ.org name", "Show"),
+ ("changeNameDJ", "Packagename;Show;Format;Episode", "Take DJ.org name", "Show"),
+ ("randomPreferred", "bool", "Randomize Preferred-List", False),
+ ("hosterListMode", "OnlyOne;OnlyPreferred(One);OnlyPreferred(All);All",
+ "Use for hosters (if supported)", "All"),
+ ("hosterList", "str", "Preferred Hoster list (comma separated)",
+ "RapidshareCom,UploadedTo,NetloadIn,FilefactoryCom,FreakshareNet,FilebaseTo,HotfileCom,DepositfilesCom,EasyshareCom,KickloadCom"),
+ ("ignoreList", "str", "Ignored Hoster list (comma separated)", "MegauploadCom")]
+
+ __description__ = """Serienjunkies.org decrypter plugin"""
+ __author_name__ = ("mkaay", "godofdream")
+ __author_mail__ = ("mkaay@mkaay.de", "soilfiction@gmail.com")
+
+
+ def setup(self):
+ self.multiDL = False
+
+ def getSJSrc(self, url):
+ src = self.req.load(str(url))
+ if "This website is not available in your country" in src:
+ self.fail("Not available in your country")
+ if not src.find("Enter Serienjunkies") == -1:
+ sleep(1)
+ src = self.req.load(str(url))
+ return src
+
+ def handleShow(self, url):
+ src = self.getSJSrc(url)
+ soup = BeautifulSoup(src)
+ packageName = self.pyfile.package().name
+ if self.getConfig("changeNameSJ") == "Show":
+ found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
+ if found:
+ packageName = found
+
+ nav = soup.find("div", attrs={"id": "scb"})
+
+ package_links = []
+ for a in nav.findAll("a"):
+ if self.getConfig("changeNameSJ") == "Show":
+ package_links.append(a['href'])
+ else:
+ package_links.append(a['href'] + "#hasName")
+ if self.getConfig("changeNameSJ") == "Show":
+ self.packages.append((packageName, package_links, packageName))
+ else:
+ self.core.files.addLinks(package_links, self.pyfile.package().id)
+
+ def handleSeason(self, url):
+ src = self.getSJSrc(url)
+ soup = BeautifulSoup(src)
+ post = soup.find("div", attrs={"class": "post-content"})
+ ps = post.findAll("p")
+
+ seasonName = unescape(soup.find("a", attrs={"rel": "bookmark"}).string).replace("&#8211;", "-")
+ groups = {}
+ gid = -1
+ for p in ps:
+ if re.search("<strong>Sprache|<strong>Format", str(p)):
+ var = p.findAll("strong")
+ opts = {"Sprache": "", "Format": ""}
+ for v in var:
+ n = unescape(v.string).strip()
+ n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n)
+ if n.strip() not in opts:
+ continue
+ val = v.nextSibling
+ if not val:
+ continue
+ val = val.replace("|", "").strip()
+ val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val)
+ opts[n.strip()] = val.strip()
+ gid += 1
+ groups[gid] = {}
+ groups[gid]['ep'] = {}
+ groups[gid]['opts'] = opts
+ elif re.search("<strong>Download:", str(p)):
+ parts = str(p).split("<br />")
+ if re.search("<strong>", parts[0]):
+ ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
+ "&#8211;", "-")
+ groups[gid]['ep'][ename] = {}
+ parts.remove(parts[0])
+ for part in parts:
+ hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
+ if hostername:
+ hostername = hostername.group(1)
+ groups[gid]['ep'][ename][hostername] = []
+ links = re.findall('href="(.*?)"', part)
+ for link in links:
+ groups[gid]['ep'][ename][hostername].append(link + "#hasName")
+
+ links = []
+ for g in groups.values():
+ for ename in g['ep']:
+ links.extend(self.getpreferred(g['ep'][ename]))
+ if self.getConfig("changeNameSJ") == "Episode":
+ self.packages.append((ename, links, ename))
+ links = []
+ package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
+ if self.getConfig("changeNameSJ") == "Format":
+ self.packages.append((package, links, package))
+ links = []
+ if (self.getConfig("changeNameSJ") == "Packagename") or re.search("#hasName", url):
+ self.core.files.addLinks(links, self.pyfile.package().id)
+ elif (self.getConfig("changeNameSJ") == "Season") or not re.search("#hasName", url):
+ self.packages.append((seasonName, links, seasonName))
+
+ def handleEpisode(self, url):
+ src = self.getSJSrc(url)
+ if not src.find(
+ "Du hast das Download-Limit &uuml;berschritten! Bitte versuche es sp&auml;ter nocheinmal.") == -1:
+ self.fail(_("Downloadlimit reached"))
+ else:
+ soup = BeautifulSoup(src)
+ form = soup.find("form")
+ h1 = soup.find("h1")
+
+ if h1.get("class") == "wrap":
+ captchaTag = soup.find(attrs={"src": re.compile("^/secure/")})
+ if not captchaTag:
+ sleep(5)
+ self.retry()
+
+ captchaUrl = "http://download.serienjunkies.org" + captchaTag['src']
+ result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
+ sinp = form.find(attrs={"name": "s"})
+
+ self.req.lastURL = str(url)
+ sj = self.load(str(url), post={'s': sinp['value'], 'c': result, 'action': "Download"})
+
+ soup = BeautifulSoup(sj)
+ rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")})
+
+ if not len(rawLinks) > 0:
+ sleep(1)
+ self.retry()
+ return
+
+ self.correctCaptcha()
+
+ links = []
+ for link in rawLinks:
+ frameUrl = link['action'].replace("/go-", "/frame/go-")
+ links.append(self.handleFrame(frameUrl))
+ if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and
+ (self.getConfig("changeNameDJ") == "Packagename")):
+ self.core.files.addLinks(links, self.pyfile.package().id)
+ else:
+ if h1.text[2] == "_":
+ eName = h1.text[3:]
+ else:
+ eName = h1.text
+ self.packages.append((eName, links, eName))
+
+ def handleOldStyleLink(self, url):
+ sj = self.req.load(str(url))
+ soup = BeautifulSoup(sj)
+ form = soup.find("form", attrs={"action": re.compile("^http://serienjunkies.org")})
+ captchaTag = form.find(attrs={"src": re.compile("^/safe/secure/")})
+ captchaUrl = "http://serienjunkies.org" + captchaTag['src']
+ result = self.decryptCaptcha(str(captchaUrl))
+ url = form['action']
+ sinp = form.find(attrs={"name": "s"})
+
+ self.req.load(str(url), post={'s': sinp['value'], 'c': result, 'dl.start': "Download"}, cookies=False,
+ just_header=True)
+ decrypted = self.req.lastEffectiveURL
+ if decrypted == str(url):
+ self.retry()
+ self.core.files.addLinks([decrypted], self.pyfile.package().id)
+
+ def handleFrame(self, url):
+ self.req.load(str(url))
+ return self.req.lastEffectiveURL
+
+ def handleShowDJ(self, url):
+ src = self.getSJSrc(url)
+ soup = BeautifulSoup(src)
+ post = soup.find("div", attrs={"id": "page_post"})
+ ps = post.findAll("p")
+ found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
+ if found:
+ seasonName = found
+
+ groups = {}
+ gid = -1
+ for p in ps:
+ if re.search("<strong>Sprache|<strong>Format", str(p)):
+ var = p.findAll("strong")
+ opts = {"Sprache": "", "Format": ""}
+ for v in var:
+ n = unescape(v.string).strip()
+ n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n)
+ if n.strip() not in opts:
+ continue
+ val = v.nextSibling
+ if not val:
+ continue
+ val = val.replace("|", "").strip()
+ val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val)
+ opts[n.strip()] = val.strip()
+ gid += 1
+ groups[gid] = {}
+ groups[gid]['ep'] = {}
+ groups[gid]['opts'] = opts
+ elif re.search("<strong>Download:", str(p)):
+ parts = str(p).split("<br />")
+ if re.search("<strong>", parts[0]):
+ ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
+ "&#8211;", "-")
+ groups[gid]['ep'][ename] = {}
+ parts.remove(parts[0])
+ for part in parts:
+ hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
+ if hostername:
+ hostername = hostername.group(1)
+ groups[gid]['ep'][ename][hostername] = []
+ links = re.findall('href="(.*?)"', part)
+ for link in links:
+ groups[gid]['ep'][ename][hostername].append(link + "#hasName")
+
+ links = []
+ for g in groups.values():
+ for ename in g['ep']:
+ links.extend(self.getpreferred(g['ep'][ename]))
+ if self.getConfig("changeNameDJ") == "Episode":
+ self.packages.append((ename, links, ename))
+ links = []
+ package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
+ if self.getConfig("changeNameDJ") == "Format":
+ self.packages.append((package, links, package))
+ links = []
+ if (self.getConfig("changeNameDJ") == "Packagename") or re.search("#hasName", url):
+ self.core.files.addLinks(links, self.pyfile.package().id)
+ elif (self.getConfig("changeNameDJ") == "Show") or not re.search("#hasName", url):
+ self.packages.append((seasonName, links, seasonName))
+
+ def handleCategoryDJ(self, url):
+ package_links = []
+ src = self.getSJSrc(url)
+ soup = BeautifulSoup(src)
+ content = soup.find("div", attrs={"id": "content"})
+ for a in content.findAll("a", attrs={"rel": "bookmark"}):
+ package_links.append(a['href'])
+ self.core.files.addLinks(package_links, self.pyfile.package().id)
+
+ def decrypt(self, pyfile):
+ showPattern = re.compile("^http://serienjunkies.org/serie/(.*)/$")
+ seasonPattern = re.compile("^http://serienjunkies.org/.*?/(.*)/$")
+ episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html(#hasName)?$")
+ oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$")
+ categoryPatternDJ = re.compile("^http://dokujunkies.org/.*?(.*)$")
+ showPatternDJ = re.compile(r"^http://dokujunkies.org/.*?/(.*)\.html(#hasName)?$")
+ framePattern = re.compile("^http://download.(serienjunkies.org|dokujunkies.org)/frame/go-.*?/$")
+ url = pyfile.url
+ if framePattern.match(url):
+ self.packages.append((pyfile.package().name, [self.handleFrame(url)], pyfile.package().name))
+ elif episodePattern.match(url):
+ self.handleEpisode(url)
+ elif oldStyleLink.match(url):
+ self.handleOldStyleLink(url)
+ elif showPattern.match(url):
+ self.handleShow(url)
+ elif showPatternDJ.match(url):
+ self.handleShowDJ(url)
+ elif seasonPattern.match(url):
+ self.handleSeason(url)
+ elif categoryPatternDJ.match(url):
+ self.handleCategoryDJ(url)
+
+ #selects the preferred hoster, after that selects any hoster (ignoring the one to ignore)
+ def getpreferred(self, hosterlist):
+
+ result = []
+ preferredList = self.getConfig("hosterList").strip().lower().replace(
+ '|', ',').replace('.', '').replace(';', ',').split(',')
+ if (self.getConfig("randomPreferred") is True) and (
+ self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]):
+ random.shuffle(preferredList)
+ # we don't want hosters be read two times
+ hosterlist2 = hosterlist.copy()
+
+ for preferred in preferredList:
+ for Hoster in hosterlist:
+ if preferred == Hoster.lower().replace('.', ''):
+ for Part in hosterlist[Hoster]:
+ self.logDebug("selected " + Part)
+ result.append(str(Part))
+ del (hosterlist2[Hoster])
+ if self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]:
+ return result
+
+ ignorelist = self.getConfig("ignoreList").strip().lower().replace(
+ '|', ',').replace('.', '').replace(';', ',').split(',')
+ if self.getConfig('hosterListMode') in ["OnlyOne", "All"]:
+ for Hoster in hosterlist2:
+ if Hoster.strip().lower().replace('.', '') not in ignorelist:
+ for Part in hosterlist2[Hoster]:
+ self.logDebug("selected2 " + Part)
+ result.append(str(Part))
+
+ if self.getConfig('hosterListMode') == "OnlyOne":
+ return result
+ return result
diff --git a/pyload/plugins/crypter/ShareLinksBiz.py b/pyload/plugins/crypter/ShareLinksBiz.py
new file mode 100644
index 000000000..132d2160b
--- /dev/null
+++ b/pyload/plugins/crypter/ShareLinksBiz.py
@@ -0,0 +1,269 @@
+# -*- coding: utf-8 -*-
+
+import base64
+import binascii
+import re
+
+from Crypto.Cipher import AES
+from pyload.plugins.Crypter import Crypter
+
+
+class ShareLinksBiz(Crypter):
+ __name__ = "ShareLinksBiz"
+ __type__ = "crypter"
+ __version__ = "1.13"
+
+ __pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
+
+ __description__ = """Share-Links.biz decrypter plugin"""
+ __author_name__ = "fragonib"
+ __author_mail__ = "fragonib[AT]yahoo[DOT]es"
+
+
+ def setup(self):
+ self.baseUrl = None
+ self.fileId = None
+ self.package = None
+ self.html = None
+ self.captcha = False
+
+ def decrypt(self, pyfile):
+ # Init
+ self.initFile(pyfile)
+
+ # Request package
+ url = self.baseUrl + '/' + self.fileId
+ self.html = self.load(url, decode=True)
+
+ # Unblock server (load all images)
+ self.unblockServer()
+
+ # Check for protection
+ if self.isPasswordProtected():
+ self.unlockPasswordProtection()
+ self.handleErrors()
+
+ if self.isCaptchaProtected():
+ self.captcha = True
+ self.unlockCaptchaProtection()
+ self.handleErrors()
+
+ # Extract package links
+ package_links = []
+ package_links.extend(self.handleWebLinks())
+ package_links.extend(self.handleContainers())
+ package_links.extend(self.handleCNL2())
+ package_links = set(package_links)
+
+ # Get package info
+ package_name, package_folder = self.getPackageInfo()
+
+ # Pack
+ self.packages = [(package_name, package_links, package_folder)]
+
+ def initFile(self, pyfile):
+ url = pyfile.url
+ if 's2l.biz' in url:
+ url = self.load(url, just_header=True)['location']
+ self.baseUrl = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1)
+ self.fileId = re.match(self.__pattern__, url).group('ID')
+ self.package = pyfile.package()
+
+ def isOnline(self):
+ if "No usable content was found" in self.html:
+ self.logDebug("File not found")
+ return False
+ return True
+
+ def isPasswordProtected(self):
+ if re.search(r'''<form.*?id="passwordForm".*?>''', self.html):
+ self.logDebug("Links are protected")
+ return True
+ return False
+
+ def isCaptchaProtected(self):
+ if '<map id="captchamap"' in self.html:
+ self.logDebug("Links are captcha protected")
+ return True
+ return False
+
+ def unblockServer(self):
+ imgs = re.findall(r"(/template/images/.*?\.gif)", self.html)
+ for img in imgs:
+ self.load(self.baseUrl + img)
+
+ def unlockPasswordProtection(self):
+ password = self.getPassword()
+ self.logDebug("Submitting password [%s] for protected links" % password)
+ post = {"password": password, 'login': 'Submit form'}
+ url = self.baseUrl + '/' + self.fileId
+ self.html = self.load(url, post=post, decode=True)
+
+ def unlockCaptchaProtection(self):
+ # Get captcha map
+ captchaMap = self._getCaptchaMap()
+ self.logDebug("Captcha map with [%d] positions" % len(captchaMap.keys()))
+
+ # Request user for captcha coords
+ m = re.search(r'<img src="/captcha.gif\?d=(.*?)&amp;PHPSESSID=(.*?)&amp;legend=1"', self.html)
+ captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2))
+ self.logDebug("Waiting user for correct position")
+ coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional')
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
+
+ # Resolve captcha
+ href = self._resolveCoords(coords, captchaMap)
+ if href is None:
+ self.logDebug("Invalid captcha resolving, retrying")
+ self.invalidCaptcha()
+ self.setWait(5, False)
+ self.wait()
+ self.retry()
+ url = self.baseUrl + href
+ self.html = self.load(url, decode=True)
+
+ def _getCaptchaMap(self):
+ mapp = {}
+ for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
+ rect = eval('(' + m.group(1) + ')')
+ href = m.group(2)
+ mapp[rect] = href
+ return mapp
+
+ def _resolveCoords(self, coords, captchaMap):
+ x, y = coords
+ for rect, href in captchaMap.items():
+ x1, y1, x2, y2 = rect
+ if (x >= x1 and x <= x2) and (y >= y1 and y <= y2):
+ return href
+
+ def handleErrors(self):
+ if "The inserted password was wrong" in self.html:
+ self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+
+ if self.captcha:
+ if "Your choice was wrong" in self.html:
+ self.logDebug("Invalid captcha, retrying")
+ self.invalidCaptcha()
+ self.setWait(5)
+ self.wait()
+ self.retry()
+ else:
+ self.correctCaptcha()
+
+ def getPackageInfo(self):
+ name = folder = None
+
+ # Extract from web package header
+ title_re = r'<h2><img.*?/>(.*)</h2>'
+ m = re.search(title_re, self.html, re.DOTALL)
+ if m is not None:
+ title = m.group(1).strip()
+ if 'unnamed' not in title:
+ name = folder = title
+ self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
+
+ # Fallback to defaults
+ if not name or not folder:
+ name = self.package.name
+ folder = self.package.folder
+ self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
+
+ # Return package info
+ return name, folder
+
+ def handleWebLinks(self):
+ package_links = []
+ self.logDebug("Handling Web links")
+
+ #@TODO: Gather paginated web links
+ pattern = r"javascript:_get\('(.*?)', \d+, ''\)"
+ ids = re.findall(pattern, self.html)
+ self.logDebug("Decrypting %d Web links" % len(ids))
+ for i, ID in enumerate(ids):
+ try:
+ self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID))
+ dwLink = self.baseUrl + "/get/lnk/" + ID
+ response = self.load(dwLink)
+ code = re.search(r'frm/(\d+)', response).group(1)
+ fwLink = self.baseUrl + "/get/frm/" + code
+ response = self.load(fwLink)
+ jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response,
+ re.DOTALL).group(1)
+ jscode = self.js.eval("f = %s" % jscode)
+ jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href"
+ dlLink = self.js.eval(jslauncher % jscode)
+ self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
+ package_links.append(dlLink)
+ except Exception, detail:
+ self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail))
+ return package_links
+
+ def handleContainers(self):
+ package_links = []
+ self.logDebug("Handling Container links")
+
+ pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)"
+ containersLinks = re.findall(pattern, self.html)
+ self.logDebug("Decrypting %d Container links" % len(containersLinks))
+ for containerLink in containersLinks:
+ link = "%s/get/%s/%s" % (self.baseUrl, containerLink[1], containerLink[0])
+ package_links.append(link)
+ return package_links
+
+ def handleCNL2(self):
+ package_links = []
+ self.logDebug("Handling CNL2 links")
+
+ if '/lib/cnl2/ClicknLoad.swf' in self.html:
+ try:
+ (crypted, jk) = self._getCipherParams()
+ package_links.extend(self._getLinks(crypted, jk))
+ except:
+ self.fail("Unable to decrypt CNL2 links")
+ return package_links
+
+ def _getCipherParams(self):
+ # Request CNL2
+ code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
+ url = "%s/get/cnl2/%s" % (self.baseUrl, code)
+ response = self.load(url)
+ params = response.split(";;")
+
+ # Get jk
+ strlist = list(base64.standard_b64decode(params[1]))
+ strlist.reverse()
+ jk = ''.join(strlist)
+
+ # Get crypted
+ strlist = list(base64.standard_b64decode(params[2]))
+ strlist.reverse()
+ crypted = ''.join(strlist)
+
+ # Log and return
+ return crypted, jk
+
+ def _getLinks(self, crypted, jk):
+ # Get key
+ jreturn = self.js.eval("%s f()" % jk)
+ self.logDebug("JsEngine returns value [%s]" % jreturn)
+ key = binascii.unhexlify(jreturn)
+
+ # Decode crypted
+ crypted = base64.standard_b64decode(crypted)
+
+ # Decrypt
+ Key = key
+ IV = key
+ obj = AES.new(Key, AES.MODE_CBC, IV)
+ text = obj.decrypt(crypted)
+
+ # Extract links
+ text = text.replace("\x00", "").replace("\r", "")
+ links = text.split("\n")
+ links = filter(lambda x: x != "", links)
+
+ # Log and return
+ self.logDebug("Block has %d links" % len(links))
+ return links
diff --git a/pyload/plugins/crypter/ShareRapidComFolder.py b/pyload/plugins/crypter/ShareRapidComFolder.py
new file mode 100644
index 000000000..c8e95be1c
--- /dev/null
+++ b/pyload/plugins/crypter/ShareRapidComFolder.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class ShareRapidComFolder(SimpleCrypter):
+ __name__ = "ShareRapidComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(slozka/.+)'
+
+ __description__ = """Share-Rapid.com folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">'
diff --git a/pyload/plugins/crypter/SpeedLoadOrgFolder.py b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
new file mode 100644
index 000000000..fff119a93
--- /dev/null
+++ b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class SpeedLoadOrgFolder(DeadCrypter):
+ __name__ = "SpeedLoadOrgFolder"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
+
+ __description__ = """Speedload decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
diff --git a/pyload/plugins/crypter/StealthTo.py b/pyload/plugins/crypter/StealthTo.py
new file mode 100644
index 000000000..24489a1b3
--- /dev/null
+++ b/pyload/plugins/crypter/StealthTo.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class StealthTo(DeadCrypter):
+ __name__ = "StealthTo"
+ __type__ = "crypter"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+'
+
+ __description__ = """Stealth.to decrypter plugin"""
+ __author_name__ = "spoob"
+ __author_mail__ = "spoob@pyload.org"
diff --git a/pyload/plugins/crypter/TnyCz.py b/pyload/plugins/crypter/TnyCz.py
new file mode 100644
index 000000000..879941ba4
--- /dev/null
+++ b/pyload/plugins/crypter/TnyCz.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+import re
+
+
+class TnyCz(SimpleCrypter):
+ __name__ = "TnyCz"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
+
+ __description__ = """Tny.cz decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ TITLE_PATTERN = r'<title>(?P<title>.+) - .+</title>'
+
+
+ def getLinks(self):
+ m = re.search(r'<a id=\'save_paste\' href="(.+save\.php\?hash=.+)">', self.html)
+ return re.findall(".+", self.load(m.group(1), decode=True)) if m else None
diff --git a/pyload/plugins/crypter/TrailerzoneInfo.py b/pyload/plugins/crypter/TrailerzoneInfo.py
new file mode 100644
index 000000000..7be3beef0
--- /dev/null
+++ b/pyload/plugins/crypter/TrailerzoneInfo.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class TrailerzoneInfo(DeadCrypter):
+ __name__ = "TrailerzoneInfo"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?'
+
+ __description__ = """TrailerZone.info decrypter plugin"""
+ __author_name__ = "godofdream"
+ __author_mail__ = "soilfiction@gmail.com"
diff --git a/pyload/plugins/crypter/TurbobitNetFolder.py b/pyload/plugins/crypter/TurbobitNetFolder.py
new file mode 100644
index 000000000..48b28c28a
--- /dev/null
+++ b/pyload/plugins/crypter/TurbobitNetFolder.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from pyload.common.json_layer import json_loads
+
+
+class TurbobitNetFolder(SimpleCrypter):
+ __name__ = "TurbobitNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
+
+ __description__ = """Turbobit.net folder decrypter plugin"""
+ __author_name__ = ("stickell", "Walter Purcaro")
+ __author_mail__ = ("l.stickell@yahoo.it", "vuolter@gmail.com")
+
+ TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(?P<title>.+?)</span>"
+
+
+ def _getLinks(self, id, page=1):
+ gridFile = self.load("http://turbobit.net/downloadfolder/gridFile",
+ get={"rootId": id, "rows": 200, "page": page}, decode=True)
+ grid = json_loads(gridFile)
+
+ if grid['rows']:
+ for i in grid['rows']:
+ yield i['id']
+ for id in self._getLinks(id, page + 1):
+ yield id
+ else:
+ return
+
+ def getLinks(self):
+ id = re.match(self.__pattern__, self.pyfile.url).group("ID")
+ fixurl = lambda id: "http://turbobit.net/%s.html" % id
+ return map(fixurl, self._getLinks(id))
diff --git a/pyload/plugins/crypter/TusfilesNetFolder.py b/pyload/plugins/crypter/TusfilesNetFolder.py
new file mode 100644
index 000000000..f4f1c7723
--- /dev/null
+++ b/pyload/plugins/crypter/TusfilesNetFolder.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+import math
+import re
+from urlparse import urljoin
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class TusfilesNetFolder(SimpleCrypter):
+ __name__ = "TusfilesNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?'
+
+ __description__ = """Tusfiles.net folder decrypter plugin"""
+ __author_name__ = ("Walter Purcaro", "stickell")
+ __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it")
+
+ LINK_PATTERN = r'<TD align=left><a href="(.*?)">'
+ TITLE_PATTERN = r'<Title>.*?\: (?P<title>.+) folder</Title>'
+ PAGES_PATTERN = r'>\((?P<pages>\d+) \w+\)<'
+
+ URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')]
+
+
+ def loadPage(self, page_n):
+ return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True)
+
+ def handleMultiPages(self):
+ pages = re.search(self.PAGES_PATTERN, self.html)
+ if pages:
+ pages = int(math.ceil(int(pages.group('pages')) / 25.0))
+ else:
+ return
+
+ for p in xrange(2, pages + 1):
+ self.html = self.loadPage(p)
+ self.package_links += self.getLinks()
diff --git a/pyload/plugins/crypter/UlozToFolder.py b/pyload/plugins/crypter/UlozToFolder.py
new file mode 100644
index 000000000..2cc440a5d
--- /dev/null
+++ b/pyload/plugins/crypter/UlozToFolder.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import re
+from pyload.plugins.Crypter import Crypter
+
+
+class UlozToFolder(Crypter):
+ __name__ = "UlozToFolder"
+ __type__ = "crypter"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*'
+
+ __description__ = """Uloz.to folder decrypter plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>'
+ LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>'
+ NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)">&nbsp;</a>'
+
+
+ def decrypt(self, pyfile):
+ html = self.load(pyfile.url)
+
+ new_links = []
+ for i in xrange(1, 100):
+ self.logInfo("Fetching links from page %i" % i)
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
+ self.fail("Parse error (FOLDER)")
+
+ new_links.extend(re.findall(self.LINK_PATTERN, m.group(1)))
+ m = re.search(self.NEXT_PAGE_PATTERN, html)
+ if m:
+ html = self.load("http://ulozto.net/" + m.group(1))
+ else:
+ break
+ else:
+ self.logInfo("Limit of 99 pages reached, aborting")
+
+ if new_links:
+ self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)]
+ else:
+ self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/UploadableChFolder.py b/pyload/plugins/crypter/UploadableChFolder.py
new file mode 100644
index 000000000..3be8b0167
--- /dev/null
+++ b/pyload/plugins/crypter/UploadableChFolder.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class UploadableChFolder(SimpleCrypter):
+ __name__ = "UploadableChFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+'
+
+ __description__ = """ Uploadable.ch folder decrypter plugin """
+ __author_name__ = ("guidobelix", "Walter Purcaro")
+ __author_mail__ = ("guidobelix@hotmail.it", "vuolter@gmail.com")
+
+
+ LINK_PATTERN = r'"(.+?)" class="icon_zipfile">'
+ TITLE_PATTERN = r'<div class="folder"><span>&nbsp;</span>(?P<title>.+?)</div>'
+ OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.'
+ TEMP_OFFLINE_PATTERN = r'<div class="icon_err">'
diff --git a/pyload/plugins/crypter/UploadedToFolder.py b/pyload/plugins/crypter/UploadedToFolder.py
new file mode 100644
index 000000000..31977409d
--- /dev/null
+++ b/pyload/plugins/crypter/UploadedToFolder.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class UploadedToFolder(SimpleCrypter):
+ __name__ = "UploadedToFolder"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)'
+
+ __description__ = """UploadedTo decrypter plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick='
+ TITLE_PATTERN = r'<title>(?P<title>[^<]+)</title>'
+
+
+ def decrypt(self, pyfile):
+ self.html = self.load(pyfile.url)
+
+ package_name, folder_name = self.getPackageNameAndFolder()
+
+ m = re.search(self.PLAIN_PATTERN, self.html)
+ if m:
+ plain_link = 'http://uploaded.net/' + m.group('plain')
+ else:
+ self.fail('Parse error - Unable to find plain url list')
+
+ self.html = self.load(plain_link)
+ package_links = self.html.split('\n')[:-1]
+ self.logDebug('Package has %d links' % len(package_links))
+
+ self.packages = [(package_name, package_links, folder_name)]
diff --git a/pyload/plugins/crypter/WiiReloadedOrg.py b/pyload/plugins/crypter/WiiReloadedOrg.py
new file mode 100644
index 000000000..7dfe574ab
--- /dev/null
+++ b/pyload/plugins/crypter/WiiReloadedOrg.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadCrypter import DeadCrypter
+
+
+class WiiReloadedOrg(DeadCrypter):
+ __name__ = "WiiReloadedOrg"
+ __type__ = "crypter"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
+
+ __description__ = """Wii-Reloaded.org decrypter plugin"""
+ __author_name__ = "hzpz"
+ __author_mail__ = None
diff --git a/pyload/plugins/crypter/XupPl.py b/pyload/plugins/crypter/XupPl.py
new file mode 100644
index 000000000..8d09e28a3
--- /dev/null
+++ b/pyload/plugins/crypter/XupPl.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Crypter import Crypter
+
+
+class XupPl(Crypter):
+ __name__ = "XupPl"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*'
+
+ __description__ = """Xup.pl decrypter plugin"""
+ __author_name__ = "z00nx"
+ __author_mail__ = "z00nx0@gmail.com"
+
+
+ def decrypt(self, pyfile):
+ header = self.load(pyfile.url, just_header=True)
+ if 'location' in header:
+ self.urls = [header['location']]
+ else:
+ self.fail('Unable to find link')
diff --git a/pyload/plugins/crypter/YoutubeBatch.py b/pyload/plugins/crypter/YoutubeBatch.py
new file mode 100644
index 000000000..5b7cb6530
--- /dev/null
+++ b/pyload/plugins/crypter/YoutubeBatch.py
@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urlparse import urljoin
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Crypter import Crypter
+from pyload.utils import safe_join
+
+API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
+
+
+class YoutubeBatch(Crypter):
+ __name__ = "YoutubeBatch"
+ __type__ = "crypter"
+ __version__ = "1.00"
+
+ __pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)'
+ __config__ = [("likes", "bool", "Grab user (channel) liked videos", False),
+ ("favorites", "bool", "Grab user (channel) favorite videos", False),
+ ("uploads", "bool", "Grab channel unplaylisted videos", True)]
+
+ __description__ = """Youtube.com channel & playlist decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+ def api_response(self, ref, req):
+ req.update({"key": API_KEY})
+ url = urljoin("https://www.googleapis.com/youtube/v3/", ref)
+ page = self.load(url, get=req)
+ return json_loads(page)
+
+ def getChannel(self, user):
+ channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"})
+ if channels['items']:
+ channel = channels['items'][0]
+ return {"id": channel['id'],
+ "title": channel['snippet']['title'],
+ "relatedPlaylists": channel['contentDetails']['relatedPlaylists'],
+ "user": user} # One lone channel for user?
+
+ def getPlaylist(self, p_id):
+ playlists = self.api_response("playlists", {"part": "snippet", "id": p_id})
+ if playlists['items']:
+ playlist = playlists['items'][0]
+ return {"id": p_id,
+ "title": playlist['snippet']['title'],
+ "channelId": playlist['snippet']['channelId'],
+ "channelTitle": playlist['snippet']['channelTitle']}
+
+ def _getPlaylists(self, id, token=None):
+ req = {"part": "id", "maxResults": "50", "channelId": id}
+ if token:
+ req.update({"pageToken": token})
+
+ playlists = self.api_response("playlists", req)
+
+ for playlist in playlists['items']:
+ yield playlist['id']
+
+ if "nextPageToken" in playlists:
+ for item in self._getPlaylists(id, playlists['nextPageToken']):
+ yield item
+
+ def getPlaylists(self, ch_id):
+ return map(self.getPlaylist, self._getPlaylists(ch_id))
+
+ def _getVideosId(self, id, token=None):
+ req = {"part": "contentDetails", "maxResults": "50", "playlistId": id}
+ if token:
+ req.update({"pageToken": token})
+
+ playlist = self.api_response("playlistItems", req)
+
+ for item in playlist['items']:
+ yield item['contentDetails']['videoId']
+
+ if "nextPageToken" in playlist:
+ for item in self._getVideosId(id, playlist['nextPageToken']):
+ yield item
+
+ def getVideosId(self, p_id):
+ return list(self._getVideosId(p_id))
+
+ def decrypt(self, pyfile):
+ m = re.match(self.__pattern__, pyfile.url)
+ m_id = m.group("ID")
+ m_type = m.group("TYPE")
+
+ if m_type == "user":
+ self.logDebug("Url recognized as Channel")
+ user = m_id
+ channel = self.getChannel(user)
+
+ if channel:
+ playlists = self.getPlaylists(channel['id'])
+ self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel['title']))
+
+ relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel['relatedPlaylists'].iteritems()}
+ self.logDebug("Channel's related playlists found = %s" % relatedplaylist.keys())
+
+ relatedplaylist['uploads']['title'] = "Unplaylisted videos"
+ relatedplaylist['uploads']['checkDups'] = True #: checkDups flag
+
+ for p_name, p_data in relatedplaylist.iteritems():
+ if self.getConfig(p_name):
+ p_data['title'] += " of " + user
+ playlists.append(p_data)
+ else:
+ playlists = []
+ else:
+ self.logDebug("Url recognized as Playlist")
+ playlists = [self.getPlaylist(m_id)]
+
+ if not playlists:
+ self.fail("No playlist available")
+
+ addedvideos = []
+ urlize = lambda x: "https://www.youtube.com/watch?v=" + x
+ for p in playlists:
+ p_name = p['title']
+ p_videos = self.getVideosId(p['id'])
+ p_folder = safe_join(self.config['general']['download_folder'], p['channelTitle'], p_name)
+ self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name))
+
+ if not p_videos:
+ continue
+ elif "checkDups" in p:
+ p_urls = [urlize(v_id) for v_id in p_videos if v_id not in addedvideos]
+ self.logDebug("%s video\s available on playlist \"%s\" after duplicates cleanup" % (len(p_urls), p_name))
+ else:
+ p_urls = map(urlize, p_videos)
+
+ self.packages.append((p_name, p_urls, p_folder)) #: folder is NOT recognized by pyload 0.4.9!
+
+ addedvideos.extend(p_videos)
diff --git a/module/plugins/crypter/__init__.py b/pyload/plugins/crypter/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/crypter/__init__.py
+++ b/pyload/plugins/crypter/__init__.py
diff --git a/pyload/plugins/hooks/AlldebridCom.py b/pyload/plugins/hooks/AlldebridCom.py
new file mode 100644
index 000000000..8eade2941
--- /dev/null
+++ b/pyload/plugins/hooks/AlldebridCom.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class AlldebridCom(MultiHoster):
+ __name__ = "AlldebridCom"
+ __type__ = "hook"
+ __version__ = "0.13"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("https", "bool", "Enable HTTPS", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Alldebrid.com hook plugin"""
+ __author_name__ = "Andy Voigt"
+ __author_mail__ = "spamsales@online.de"
+
+
+ def getHoster(self):
+ https = "https" if self.getConfig("https") else "http"
+ page = getURL(https + "://www.alldebrid.com/api.php?action=get_host").replace("\"", "").strip()
+
+ return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/pyload/plugins/hooks/BypassCaptcha.py b/pyload/plugins/hooks/BypassCaptcha.py
new file mode 100644
index 000000000..9558ba4c4
--- /dev/null
+++ b/pyload/plugins/hooks/BypassCaptcha.py
@@ -0,0 +1,127 @@
+# -*- coding: utf-8 -*-
+
+from pycurl import FORM_FILE, LOW_SPEED_TIME
+from thread import start_new_thread
+
+from pyload.network.HTTPRequest import BadHeader
+from pyload.network.RequestFactory import getURL, getRequest
+from pyload.plugins.Hook import Hook
+
+
+class BypassCaptchaException(Exception):
+
+ def __init__(self, err):
+ self.err = err
+
+ def getCode(self):
+ return self.err
+
+ def __str__(self):
+ return "<BypassCaptchaException %s>" % self.err
+
+ def __repr__(self):
+ return "<BypassCaptchaException %s>" % self.err
+
+
+class BypassCaptcha(Hook):
+ __name__ = "BypassCaptcha"
+ __type__ = "hook"
+ __version__ = "0.04"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("force", "bool", "Force BC even if client is connected", False),
+ ("passkey", "password", "Passkey", "")]
+
+ __description__ = """Send captchas to BypassCaptcha.com"""
+ __author_name__ = ("RaNaN", "Godofdream", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "soilfcition@gmail.com", "zoidberg@mujmail.cz")
+
+ PYLOAD_KEY = "4f771155b640970d5607f919a615bdefc67e7d32"
+
+ SUBMIT_URL = "http://bypasscaptcha.com/upload.php"
+ RESPOND_URL = "http://bypasscaptcha.com/check_value.php"
+ GETCREDITS_URL = "http://bypasscaptcha.com/ex_left.php"
+
+
+ def setup(self):
+ self.info = {}
+
+ def getCredits(self):
+ response = getURL(self.GETCREDITS_URL, post={"key": self.getConfig("passkey")})
+
+ data = dict([x.split(' ', 1) for x in response.splitlines()])
+ return int(data['Left'])
+
+ def submit(self, captcha, captchaType="file", match=None):
+ req = getRequest()
+
+ #raise timeout threshold
+ req.c.setopt(LOW_SPEED_TIME, 80)
+
+ try:
+ response = req.load(self.SUBMIT_URL,
+ post={"vendor_key": self.PYLOAD_KEY,
+ "key": self.getConfig("passkey"),
+ "gen_task_id": "1",
+ "file": (FORM_FILE, captcha)},
+ multipart=True)
+ finally:
+ req.close()
+
+ data = dict([x.split(' ', 1) for x in response.splitlines()])
+ if not data or "Value" not in data:
+ raise BypassCaptchaException(response)
+
+ result = data['Value']
+ ticket = data['TaskId']
+ self.logDebug("result %s : %s" % (ticket, result))
+
+ return ticket, result
+
+ def respond(self, ticket, success):
+ try:
+ response = getURL(self.RESPOND_URL, post={"task_id": ticket, "key": self.getConfig("passkey"),
+ "cv": 1 if success else 0})
+ except BadHeader, e:
+ self.logError("Could not send response.", str(e))
+
+ def newCaptchaTask(self, task):
+ if "service" in task.data:
+ return False
+
+ if not task.isTextual():
+ return False
+
+ if not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if self.getCredits() > 0:
+ task.handler.append(self)
+ task.data['service'] = self.__name__
+ task.setWaiting(100)
+ start_new_thread(self.processCaptcha, (task,))
+
+ else:
+ self.logInfo("Your %s account has not enough credits" % self.__name__)
+
+ def captchaCorrect(self, task):
+ if task.data['service'] == self.__name__ and "ticket" in task.data:
+ self.respond(task.data['ticket'], True)
+
+ def captchaInvalid(self, task):
+ if task.data['service'] == self.__name__ and "ticket" in task.data:
+ self.respond(task.data['ticket'], False)
+
+ def processCaptcha(self, task):
+ c = task.captchaFile
+ try:
+ ticket, result = self.submit(c)
+ except BypassCaptchaException, e:
+ task.error = e.getCode()
+ return
+
+ task.data['ticket'] = ticket
+ task.setResult(result)
diff --git a/pyload/plugins/hooks/Captcha9kw.py b/pyload/plugins/hooks/Captcha9kw.py
new file mode 100644
index 000000000..fcb5dd7c1
--- /dev/null
+++ b/pyload/plugins/hooks/Captcha9kw.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import time
+
+from base64 import b64encode
+from thread import start_new_thread
+
+from pyload.network.HTTPRequest import BadHeader
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hook import Hook
+
+
+class Captcha9kw(Hook):
+ __name__ = "Captcha9kw"
+ __type__ = "hook"
+ __version__ = "0.09"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("force", "bool", "Force CT even if client is connected", True),
+ ("https", "bool", "Enable HTTPS", False),
+ ("confirm", "bool", "Confirm Captcha (Cost +6)", False),
+ ("captchaperhour", "int", "Captcha per hour (max. 9999)", 9999),
+ ("prio", "int", "Prio 1-10 (Cost +1-10)", 0),
+ ("selfsolve", "bool",
+ "If enabled and you have a 9kw client active only you will get your captcha to solve it (Selfsolve)",
+ False),
+ ("timeout", "int", "Timeout (max. 300)", 300),
+ ("passkey", "password", "API key", "")]
+
+ __description__ = """Send captchas to 9kw.eu"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+ API_URL = "://www.9kw.eu/index.cgi"
+
+
+ def setup(self):
+ self.API_URL = "https" + self.API_URL if self.getConfig("https") else "http" + self.API_URL
+ self.info = {}
+
+ def getCredits(self):
+ response = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "pyload": "1", "source": "pyload",
+ "action": "usercaptchaguthaben"})
+
+ if response.isdigit():
+ self.logInfo(_("%s credits left") % response)
+ self.info['credits'] = credits = int(response)
+ return credits
+ else:
+ self.logError(response)
+ return 0
+
+ def processCaptcha(self, task):
+ result = None
+
+ with open(task.captchaFile, 'rb') as f:
+ data = f.read()
+ data = b64encode(data)
+ self.logDebug("%s : %s" % (task.captchaFile, data))
+ if task.isPositional():
+ mouse = 1
+ else:
+ mouse = 0
+
+ response = getURL(self.API_URL, post={
+ "apikey": self.getConfig("passkey"),
+ "prio": self.getConfig("prio"),
+ "confirm": self.getConfig("confirm"),
+ "captchaperhour": self.getConfig("captchaperhour"),
+ "maxtimeout": self.getConfig("timeout"),
+ "selfsolve": self.getConfig("selfsolve"),
+ "pyload": "1",
+ "source": "pyload",
+ "base64": "1",
+ "mouse": mouse,
+ "file-upload-01": data,
+ "action": "usercaptchaupload"})
+
+ if response.isdigit():
+ self.logInfo(_("New CaptchaID from upload: %s : %s") % (response, task.captchaFile))
+
+ for _ in xrange(1, 100, 1):
+ response2 = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "id": response,
+ "pyload": "1", "source": "pyload",
+ "action": "usercaptchacorrectdata"})
+
+ if response2 != "":
+ break
+
+ time.sleep(3)
+
+ result = response2
+ task.data['ticket'] = response
+ self.logInfo("result %s : %s" % (response, result))
+ task.setResult(result)
+ else:
+ self.logError("Bad upload: %s" % response)
+ return False
+
+ def newCaptchaTask(self, task):
+ if not task.isTextual() and not task.isPositional():
+ return False
+
+ if not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if self.getCredits() > 0:
+ task.handler.append(self)
+ task.setWaiting(self.getConfig("timeout"))
+ start_new_thread(self.processCaptcha, (task,))
+
+ else:
+ self.logError(_("Your Captcha 9kw.eu Account has not enough credits"))
+
+ def captchaCorrect(self, task):
+ if "ticket" in task.data:
+
+ try:
+ response = getURL(self.API_URL,
+ post={"action": "usercaptchacorrectback",
+ "apikey": self.getConfig("passkey"),
+ "api_key": self.getConfig("passkey"),
+ "correct": "1",
+ "pyload": "1",
+ "source": "pyload",
+ "id": task.data['ticket']})
+ self.logInfo("Request correct: %s" % response)
+
+ except BadHeader, e:
+ self.logError("Could not send correct request.", str(e))
+ else:
+ self.logError("No CaptchaID for correct request (task %s) found." % task)
+
+ def captchaInvalid(self, task):
+ if "ticket" in task.data:
+
+ try:
+ response = getURL(self.API_URL,
+ post={"action": "usercaptchacorrectback",
+ "apikey": self.getConfig("passkey"),
+ "api_key": self.getConfig("passkey"),
+ "correct": "2",
+ "pyload": "1",
+ "source": "pyload",
+ "id": task.data['ticket']})
+ self.logInfo("Request refund: %s" % response)
+
+ except BadHeader, e:
+ self.logError("Could not send refund request.", str(e))
+ else:
+ self.logError("No CaptchaID for not correct request (task %s) found." % task)
diff --git a/pyload/plugins/hooks/CaptchaBrotherhood.py b/pyload/plugins/hooks/CaptchaBrotherhood.py
new file mode 100644
index 000000000..81325be92
--- /dev/null
+++ b/pyload/plugins/hooks/CaptchaBrotherhood.py
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import StringIO
+import pycurl
+
+from PIL import Image
+from thread import start_new_thread
+from time import sleep
+from urllib import urlencode
+
+from pyload.network.RequestFactory import getURL, getRequest
+from pyload.plugins.Hook import Hook
+
+
+class CaptchaBrotherhoodException(Exception):
+
+ def __init__(self, err):
+ self.err = err
+
+ def getCode(self):
+ return self.err
+
+ def __str__(self):
+ return "<CaptchaBrotherhoodException %s>" % self.err
+
+ def __repr__(self):
+ return "<CaptchaBrotherhoodException %s>" % self.err
+
+
+class CaptchaBrotherhood(Hook):
+ __name__ = "CaptchaBrotherhood"
+ __type__ = "hook"
+ __version__ = "0.05"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("username", "str", "Username", ""),
+ ("force", "bool", "Force CT even if client is connected", False),
+ ("passkey", "password", "Password", "")]
+
+ __description__ = """Send captchas to CaptchaBrotherhood.com"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ API_URL = "http://www.captchabrotherhood.com/"
+
+
+ def setup(self):
+ self.info = {}
+
+ def getCredits(self):
+ response = getURL(self.API_URL + "askCredits.aspx",
+ get={"username": self.getConfig("username"), "password": self.getConfig("passkey")})
+ if not response.startswith("OK"):
+ raise CaptchaBrotherhoodException(response)
+ else:
+ credits = int(response[3:])
+ self.logInfo(_("%d credits left") % credits)
+ self.info['credits'] = credits
+ return credits
+
+ def submit(self, captcha, captchaType="file", match=None):
+ try:
+ img = Image.open(captcha)
+ output = StringIO.StringIO()
+ self.logDebug("CAPTCHA IMAGE", img, img.format, img.mode)
+ if img.format in ("GIF", "JPEG"):
+ img.save(output, img.format)
+ else:
+ if img.mode != "RGB":
+ img = img.convert("RGB")
+ img.save(output, "JPEG")
+ data = output.getvalue()
+ output.close()
+ except Exception, e:
+ raise CaptchaBrotherhoodException("Reading or converting captcha image failed: %s" % e)
+
+ req = getRequest()
+
+ url = "%ssendNewCaptcha.aspx?%s" % (self.API_URL,
+ urlencode({"username": self.getConfig("username"),
+ "password": self.getConfig("passkey"),
+ "captchaSource": "pyLoad",
+ "timeout": "80"}))
+
+ req.c.setopt(pycurl.URL, url)
+ req.c.setopt(pycurl.POST, 1)
+ req.c.setopt(pycurl.POSTFIELDS, data)
+ req.c.setopt(pycurl.HTTPHEADER, ["Content-Type: text/html"])
+
+ try:
+ req.c.perform()
+ response = req.getResponse()
+ except Exception, e:
+ raise CaptchaBrotherhoodException("Submit captcha image failed")
+
+ req.close()
+
+ if not response.startswith("OK"):
+ raise CaptchaBrotherhoodException(response[1])
+
+ ticket = response[3:]
+
+ for _ in xrange(15):
+ sleep(5)
+ response = self.get_api("askCaptchaResult", ticket)
+ if response.startswith("OK-answered"):
+ return ticket, response[12:]
+
+ raise CaptchaBrotherhoodException("No solution received in time")
+
+ def get_api(self, api, ticket):
+ response = getURL("%s%s.aspx" % (self.API_URL, api),
+ get={"username": self.getConfig("username"),
+ "password": self.getConfig("passkey"),
+ "captchaID": ticket})
+ if not response.startswith("OK"):
+ raise CaptchaBrotherhoodException("Unknown response: %s" % response)
+
+ return response
+
+ def newCaptchaTask(self, task):
+ if "service" in task.data:
+ return False
+
+ if not task.isTextual():
+ return False
+
+ if not self.getConfig("username") or not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if self.getCredits() > 10:
+ task.handler.append(self)
+ task.data['service'] = self.__name__
+ task.setWaiting(100)
+ start_new_thread(self.processCaptcha, (task,))
+ else:
+ self.logInfo("Your CaptchaBrotherhood Account has not enough credits")
+
+ def captchaInvalid(self, task):
+ if task.data['service'] == self.__name__ and "ticket" in task.data:
+ response = self.get_api("complainCaptcha", task.data['ticket'])
+
+ def processCaptcha(self, task):
+ c = task.captchaFile
+ try:
+ ticket, result = self.submit(c)
+ except CaptchaBrotherhoodException, e:
+ task.error = e.getCode()
+ return
+
+ task.data['ticket'] = ticket
+ task.setResult(result)
diff --git a/pyload/plugins/hooks/Checksum.py b/pyload/plugins/hooks/Checksum.py
new file mode 100644
index 000000000..75ebcdc4c
--- /dev/null
+++ b/pyload/plugins/hooks/Checksum.py
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import hashlib
+import re
+import zlib
+
+from os import remove
+from os.path import getsize, isfile, splitext
+
+from pyload.plugins.Hook import Hook
+from pyload.utils import safe_join, fs_encode
+
+
+def computeChecksum(local_file, algorithm):
+ if algorithm in getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")):
+ h = getattr(hashlib, algorithm)()
+
+ with open(local_file, 'rb') as f:
+ for chunk in iter(lambda: f.read(128 * h.block_size), b''):
+ h.update(chunk)
+
+ return h.hexdigest()
+
+ elif algorithm in ("adler32", "crc32"):
+ hf = getattr(zlib, algorithm)
+ last = 0
+
+ with open(local_file, 'rb') as f:
+ for chunk in iter(lambda: f.read(8192), b''):
+ last = hf(chunk, last)
+
+ return "%x" % last
+
+ else:
+ return None
+
+
+class Checksum(Hook):
+ __name__ = "Checksum"
+ __type__ = "hook"
+ __version__ = "0.13"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("check_checksum", "bool", "Check checksum? (If False only size will be verified)", True),
+ ("check_action", "fail;retry;nothing", "What to do if check fails?", "retry"),
+ ("max_tries", "int", "Number of retries", 2),
+ ("retry_action", "fail;nothing", "What to do if all retries fail?", "fail"),
+ ("wait_time", "int", "Time to wait before each retry (seconds)", 1)]
+
+ __description__ = """Verify downloaded file size and checksum"""
+ __author_name__ = ("zoidberg", "Walter Purcaro", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com", "l.stickell@yahoo.it")
+
+ methods = {'sfv': 'crc32', 'crc': 'crc32', 'hash': 'md5'}
+ regexps = {'sfv': r'^(?P<name>[^;].+)\s+(?P<hash>[0-9A-Fa-f]{8})$',
+ 'md5': r'^(?P<name>[0-9A-Fa-f]{32}) (?P<file>.+)$',
+ 'crc': r'filename=(?P<name>.+)\nsize=(?P<size>\d+)\ncrc32=(?P<hash>[0-9A-Fa-f]{8})$',
+ 'default': r'^(?P<hash>[0-9A-Fa-f]+)\s+\*?(?P<name>.+)$'}
+
+
+ def coreReady(self):
+ if not self.getConfig("check_checksum"):
+ self.logInfo("Checksum validation is disabled in plugin configuration")
+
+ def setup(self):
+ self.algorithms = sorted(
+ getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")), reverse=True)
+ self.algorithms.extend(["crc32", "adler32"])
+ self.formats = self.algorithms + ["sfv", "crc", "hash"]
+
+ def downloadFinished(self, pyfile):
+ """
+ Compute checksum for the downloaded file and compare it with the hash provided by the hoster.
+ pyfile.plugin.check_data should be a dictionary which can contain:
+ a) if known, the exact filesize in bytes (e.g. "size": 123456789)
+ b) hexadecimal hash string with algorithm name as key (e.g. "md5": "d76505d0869f9f928a17d42d66326307")
+ """
+ if hasattr(pyfile.plugin, "check_data") and (isinstance(pyfile.plugin.check_data, dict)):
+ data = pyfile.plugin.check_data.copy()
+ elif hasattr(pyfile.plugin, "api_data") and (isinstance(pyfile.plugin.api_data, dict)):
+ data = pyfile.plugin.api_data.copy()
+ else:
+ return
+
+ self.logDebug(data)
+
+ if not pyfile.plugin.lastDownload:
+ self.checkFailed(pyfile, None, "No file downloaded")
+
+ local_file = fs_encode(pyfile.plugin.lastDownload)
+ #download_folder = self.config['general']['download_folder']
+ #local_file = fs_encode(safe_join(download_folder, pyfile.package().folder, pyfile.name))
+
+ if not isfile(local_file):
+ self.checkFailed(pyfile, None, "File does not exist")
+
+ # validate file size
+ if "size" in data:
+ api_size = int(data['size'])
+ file_size = getsize(local_file)
+ if api_size != file_size:
+ self.logWarning("File %s has incorrect size: %d B (%d expected)" % (pyfile.name, file_size, api_size))
+ self.checkFailed(pyfile, local_file, "Incorrect file size")
+ del data['size']
+
+ # validate checksum
+ if data and self.getConfig("check_checksum"):
+ if "checksum" in data:
+ data['md5'] = data['checksum']
+
+ for key in self.algorithms:
+ if key in data:
+ checksum = computeChecksum(local_file, key.replace("-", "").lower())
+ if checksum:
+ if checksum == data[key].lower():
+ self.logInfo('File integrity of "%s" verified by %s checksum (%s).' %
+ (pyfile.name, key.upper(), checksum))
+ break
+ else:
+ self.logWarning("%s checksum for file %s does not match (%s != %s)" %
+ (key.upper(), pyfile.name, checksum, data[key]))
+ self.checkFailed(pyfile, local_file, "Checksums do not match")
+ else:
+ self.logWarning("Unsupported hashing algorithm: %s" % key.upper())
+ else:
+ self.logWarning("Unable to validate checksum for file %s" % pyfile.name)
+
+ def checkFailed(self, pyfile, local_file, msg):
+ check_action = self.getConfig("check_action")
+ if check_action == "retry":
+ max_tries = self.getConfig("max_tries")
+ retry_action = self.getConfig("retry_action")
+ if pyfile.plugin.retries < max_tries:
+ if local_file:
+ remove(local_file)
+ pyfile.plugin.retry(max_tries=max_tries, wait_time=self.getConfig("wait_time"), reason=msg)
+ elif retry_action == "nothing":
+ return
+ elif check_action == "nothing":
+ return
+ pyfile.plugin.fail(reason=msg)
+
+ def packageFinished(self, pypack):
+ download_folder = safe_join(self.config['general']['download_folder'], pypack.folder, "")
+
+ for link in pypack.getChildren().itervalues():
+ file_type = splitext(link['name'])[1][1:].lower()
+ #self.logDebug(link, file_type)
+
+ if file_type not in self.formats:
+ continue
+
+ hash_file = fs_encode(safe_join(download_folder, link['name']))
+ if not isfile(hash_file):
+ self.logWarning("File not found: %s" % link['name'])
+ continue
+
+ with open(hash_file) as f:
+ text = f.read()
+
+ for m in re.finditer(self.regexps.get(file_type, self.regexps['default']), text):
+ data = m.groupdict()
+ self.logDebug(link['name'], data)
+
+ local_file = fs_encode(safe_join(download_folder, data['name']))
+ algorithm = self.methods.get(file_type, file_type)
+ checksum = computeChecksum(local_file, algorithm)
+ if checksum == data['hash']:
+ self.logInfo('File integrity of "%s" verified by %s checksum (%s).' %
+ (data['name'], algorithm, checksum))
+ else:
+ self.logWarning("%s checksum for file %s does not match (%s != %s)" %
+ (algorithm, data['name'], checksum, data['hash']))
diff --git a/pyload/plugins/hooks/ClickAndLoad.py b/pyload/plugins/hooks/ClickAndLoad.py
new file mode 100644
index 000000000..47163ceef
--- /dev/null
+++ b/pyload/plugins/hooks/ClickAndLoad.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+
+import socket
+import thread
+
+from pyload.plugins.Hook import Hook
+
+
+class ClickAndLoad(Hook):
+ __name__ = "ClickAndLoad"
+ __type__ = "hook"
+ __version__ = "0.22"
+
+ __config__ = [("activated", "bool", "Activated", True),
+ ("extern", "bool", "Allow external link adding", False)]
+
+ __description__ = """Gives abillity to use jd's click and load. depends on webinterface"""
+ __author_name__ = ("RaNaN", "mkaay")
+ __author_mail__ = ("RaNaN@pyload.de", "mkaay@mkaay.de")
+
+
+ def coreReady(self):
+ self.port = int(self.config['webinterface']['port'])
+ if self.config['webinterface']['activated']:
+ try:
+ if self.getConfig("extern"):
+ ip = "0.0.0.0"
+ else:
+ ip = "127.0.0.1"
+
+ thread.start_new_thread(proxy, (self, ip, self.port, 9666))
+ except:
+ self.logError("ClickAndLoad port already in use.")
+
+
+def proxy(self, *settings):
+ thread.start_new_thread(server, (self,) + settings)
+ lock = thread.allocate_lock()
+ lock.acquire()
+ lock.acquire()
+
+
+def server(self, *settings):
+ try:
+ dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ dock_socket.bind((settings[0], settings[2]))
+ dock_socket.listen(5)
+ while True:
+ client_socket = dock_socket.accept()[0]
+ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_socket.connect(("127.0.0.1", settings[1]))
+ thread.start_new_thread(forward, (client_socket, server_socket))
+ thread.start_new_thread(forward, (server_socket, client_socket))
+ except socket.error, e:
+ if hasattr(e, "errno"):
+ errno = e.errno
+ else:
+ errno = e.args[0]
+
+ if errno == 98:
+ self.logWarning(_("Click'N'Load: Port 9666 already in use"))
+ return
+ thread.start_new_thread(server, (self,) + settings)
+ except:
+ thread.start_new_thread(server, (self,) + settings)
+
+
+def forward(source, destination):
+ string = ' '
+ while string:
+ string = source.recv(1024)
+ if string:
+ destination.sendall(string)
+ else:
+ #source.shutdown(socket.SHUT_RD)
+ destination.shutdown(socket.SHUT_WR)
diff --git a/pyload/plugins/hooks/DeathByCaptcha.py b/pyload/plugins/hooks/DeathByCaptcha.py
new file mode 100644
index 000000000..57bf9031f
--- /dev/null
+++ b/pyload/plugins/hooks/DeathByCaptcha.py
@@ -0,0 +1,202 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import re
+
+from base64 import b64encode
+from pycurl import FORM_FILE, HTTPHEADER
+from thread import start_new_thread
+from time import sleep
+
+from pyload.common.json_layer import json_loads
+from pyload.network.HTTPRequest import BadHeader
+from pyload.network.RequestFactory import getRequest
+from pyload.plugins.Hook import Hook
+
+
+class DeathByCaptchaException(Exception):
+ DBC_ERRORS = {'not-logged-in': 'Access denied, check your credentials',
+ 'invalid-credentials': 'Access denied, check your credentials',
+ 'banned': 'Access denied, account is suspended',
+ 'insufficient-funds': 'Insufficient account balance to decrypt CAPTCHA',
+ 'invalid-captcha': 'CAPTCHA is not a valid image',
+ 'service-overload': 'CAPTCHA was rejected due to service overload, try again later',
+ 'invalid-request': 'Invalid request',
+ 'timed-out': 'No CAPTCHA solution received in time'}
+
+ def __init__(self, err):
+ self.err = err
+
+ def getCode(self):
+ return self.err
+
+ def getDesc(self):
+ if self.err in self.DBC_ERRORS.keys():
+ return self.DBC_ERRORS[self.err]
+ else:
+ return self.err
+
+ def __str__(self):
+ return "<DeathByCaptchaException %s>" % self.err
+
+ def __repr__(self):
+ return "<DeathByCaptchaException %s>" % self.err
+
+
+class DeathByCaptcha(Hook):
+ __name__ = "DeathByCaptcha"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("username", "str", "Username", ""),
+ ("passkey", "password", "Password", ""),
+ ("force", "bool", "Force DBC even if client is connected", False)]
+
+ __description__ = """Send captchas to DeathByCaptcha.com"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ API_URL = "http://api.dbcapi.me/api/"
+
+
+ def setup(self):
+ self.info = {}
+
+ def call_api(self, api="captcha", post=False, multipart=False):
+ req = getRequest()
+ req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version])
+
+ if post:
+ if not isinstance(post, dict):
+ post = {}
+ post.update({"username": self.getConfig("username"),
+ "password": self.getConfig("passkey")})
+
+ response = None
+ try:
+ json = req.load("%s%s" % (self.API_URL, api),
+ post=post,
+ multipart=multipart)
+ self.logDebug(json)
+ response = json_loads(json)
+
+ if "error" in response:
+ raise DeathByCaptchaException(response['error'])
+ elif "status" not in response:
+ raise DeathByCaptchaException(str(response))
+
+ except BadHeader, e:
+ if 403 == e.code:
+ raise DeathByCaptchaException('not-logged-in')
+ elif 413 == e.code:
+ raise DeathByCaptchaException('invalid-captcha')
+ elif 503 == e.code:
+ raise DeathByCaptchaException('service-overload')
+ elif e.code in (400, 405):
+ raise DeathByCaptchaException('invalid-request')
+ else:
+ raise
+
+ finally:
+ req.close()
+
+ return response
+
+ def getCredits(self):
+ response = self.call_api("user", True)
+
+ if 'is_banned' in response and response['is_banned']:
+ raise DeathByCaptchaException('banned')
+ elif 'balance' in response and 'rate' in response:
+ self.info.update(response)
+ else:
+ raise DeathByCaptchaException(response)
+
+ def getStatus(self):
+ response = self.call_api("status", False)
+
+ if 'is_service_overloaded' in response and response['is_service_overloaded']:
+ raise DeathByCaptchaException('service-overload')
+
+ def submit(self, captcha, captchaType="file", match=None):
+ #workaround multipart-post bug in HTTPRequest.py
+ if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")):
+ multipart = True
+ data = (FORM_FILE, captcha)
+ else:
+ multipart = False
+ with open(captcha, 'rb') as f:
+ data = f.read()
+ data = "base64:" + b64encode(data)
+
+ response = self.call_api("captcha", {"captchafile": data}, multipart)
+
+ if "captcha" not in response:
+ raise DeathByCaptchaException(response)
+ ticket = response['captcha']
+
+ for _ in xrange(24):
+ sleep(5)
+ response = self.call_api("captcha/%d" % ticket, False)
+ if response['text'] and response['is_correct']:
+ break
+ else:
+ raise DeathByCaptchaException('timed-out')
+
+ result = response['text']
+ self.logDebug("result %s : %s" % (ticket, result))
+
+ return ticket, result
+
+ def newCaptchaTask(self, task):
+ if "service" in task.data:
+ return False
+
+ if not task.isTextual():
+ return False
+
+ if not self.getConfig("username") or not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ try:
+ self.getStatus()
+ self.getCredits()
+ except DeathByCaptchaException, e:
+ self.logError(e.getDesc())
+ return False
+
+ balance, rate = self.info['balance'], self.info['rate']
+ self.logInfo("Account balance: US$%.3f (%d captchas left at %.2f cents each)" % (balance / 100,
+ balance // rate, rate))
+
+ if balance > rate:
+ task.handler.append(self)
+ task.data['service'] = self.__name__
+ task.setWaiting(180)
+ start_new_thread(self.processCaptcha, (task,))
+
+ def captchaInvalid(self, task):
+ if task.data['service'] == self.__name__ and "ticket" in task.data:
+ try:
+ response = self.call_api("captcha/%d/report" % task.data['ticket'], True)
+ except DeathByCaptchaException, e:
+ self.logError(e.getDesc())
+ except Exception, e:
+ self.logError(e)
+
+ def processCaptcha(self, task):
+ c = task.captchaFile
+ try:
+ ticket, result = self.submit(c)
+ except DeathByCaptchaException, e:
+ task.error = e.getCode()
+ self.logError(e.getDesc())
+ return
+
+ task.data['ticket'] = ticket
+ task.setResult(result)
diff --git a/pyload/plugins/hooks/DebridItaliaCom.py b/pyload/plugins/hooks/DebridItaliaCom.py
new file mode 100644
index 000000000..4272b758f
--- /dev/null
+++ b/pyload/plugins/hooks/DebridItaliaCom.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class DebridItaliaCom(MultiHoster):
+ __name__ = "DebridItaliaCom"
+ __type__ = "hook"
+ __version__ = "0.07"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Debriditalia.com hook plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def getHoster(self):
+ return ["netload.in", "hotfile.com", "rapidshare.com", "multiupload.com",
+ "uploading.com", "megashares.com", "crocko.com", "filepost.com",
+ "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to",
+ "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch",
+ "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co",
+ "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net", "letitbit.net",
+ "easybytez.com", "uptobox.com", "ddlstorage.com"]
diff --git a/pyload/plugins/hooks/DeleteFinished.py b/pyload/plugins/hooks/DeleteFinished.py
new file mode 100644
index 000000000..99aa040bf
--- /dev/null
+++ b/pyload/plugins/hooks/DeleteFinished.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+
+from pyload.database import style
+from pyload.plugins.Hook import Hook
+
+
+class DeleteFinished(Hook):
+ __name__ = "DeleteFinished"
+ __type__ = "hook"
+ __version__ = "1.09"
+
+ __config__ = [('activated', 'bool', 'Activated', 'False'),
+ ('interval', 'int', 'Delete every (hours)', '72'),
+ ('deloffline', 'bool', 'Delete packages with offline links', 'False')]
+
+ __description__ = """Automatically delete all finished packages from queue"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+ ## overwritten methods ##
+ def periodical(self):
+ if not self.info['sleep']:
+ deloffline = self.getConfig('deloffline')
+ mode = '0,1,4' if deloffline else '0,4'
+ msg = 'delete all finished packages in queue list (%s packages with offline links)'
+ self.logInfo(msg % ('including' if deloffline else 'excluding'))
+ self.deleteFinished(mode)
+ self.info['sleep'] = True
+ self.addEvent('packageFinished', self.wakeup)
+
+ def pluginConfigChanged(self, plugin, name, value):
+ if name == 'interval' and value != self.interval:
+ self.interval = value * 3600
+ self.initPeriodical()
+
+ def unload(self):
+ self.removeEvent('packageFinished', self.wakeup)
+
+ def coreReady(self):
+ self.info = {'sleep': True}
+ interval = self.getConfig('interval')
+ self.pluginConfigChanged('DeleteFinished', 'interval', interval)
+ self.addEvent('packageFinished', self.wakeup)
+
+ ## own methods ##
+ @style.queue
+ def deleteFinished(self, mode):
+ self.c.execute('DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (%s))' % mode)
+ self.c.execute('DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)')
+
+ def wakeup(self, pypack):
+ self.removeEvent('packageFinished', self.wakeup)
+ self.info['sleep'] = False
+
+ ## event managing ##
+ def addEvent(self, event, func):
+ """Adds an event listener for event name"""
+ if event in self.m.events:
+ if func in self.m.events[event]:
+ self.logDebug('Function already registered %s' % func)
+ else:
+ self.m.events[event].append(func)
+ else:
+ self.m.events[event] = [func]
+
+ def setup(self):
+ self.m = self.manager
+ self.removeEvent = self.m.removeEvent
diff --git a/pyload/plugins/hooks/DownloadScheduler.py b/pyload/plugins/hooks/DownloadScheduler.py
new file mode 100644
index 000000000..fc2e10aac
--- /dev/null
+++ b/pyload/plugins/hooks/DownloadScheduler.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import localtime
+
+from pyload.plugins.Hook import Hook
+
+
+class DownloadScheduler(Hook):
+ __name__ = "DownloadScheduler"
+ __type__ = "hook"
+ __version__ = "0.21"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("timetable", "str", "List time periods as hh:mm full or number(kB/s)",
+ "0:00 full, 7:00 250, 10:00 0, 17:00 150"),
+ ("abort", "bool", "Abort active downloads when start period with speed 0", False)]
+
+ __description__ = """Download Scheduler"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+ def setup(self):
+ self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded
+
+ def coreReady(self):
+ self.updateSchedule()
+
+ def updateSchedule(self, schedule=None):
+ if schedule is None:
+ schedule = self.getConfig("timetable")
+
+ schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)",
+ schedule.lower().replace("full", "-1").replace("none", "0"))
+ if not schedule:
+ self.logError("Invalid schedule")
+ return
+
+ t0 = localtime()
+ now = (t0.tm_hour, t0.tm_min, t0.tm_sec, "X")
+ schedule = sorted([(int(x[0]), int(x[1]), 0, int(x[2])) for x in schedule] + [now])
+
+ self.logDebug("Schedule", schedule)
+
+ for i, v in enumerate(schedule):
+ if v[3] == "X":
+ last, next = schedule[i - 1], schedule[(i + 1) % len(schedule)]
+ self.logDebug("Now/Last/Next", now, last, next)
+
+ self.setDownloadSpeed(last[3])
+
+ next_time = (((24 + next[0] - now[0]) * 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400
+ self.core.scheduler.removeJob(self.cb)
+ self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False)
+
+ def setDownloadSpeed(self, speed):
+ if speed == 0:
+ abort = self.getConfig("abort")
+ self.logInfo("Stopping download server. (Running downloads will %sbe aborted.)" % ('' if abort else 'not '))
+ self.core.api.pauseServer()
+ if abort:
+ self.core.api.stopAllDownloads()
+ else:
+ self.core.api.unpauseServer()
+
+ if speed > 0:
+ self.logInfo("Setting download speed to %d kB/s" % speed)
+ self.core.api.setConfigValue("download", "limit_speed", 1)
+ self.core.api.setConfigValue("download", "max_speed", speed)
+ else:
+ self.logInfo("Setting download speed to FULL")
+ self.core.api.setConfigValue("download", "limit_speed", 0)
+ self.core.api.setConfigValue("download", "max_speed", -1)
diff --git a/pyload/plugins/hooks/EasybytezCom.py b/pyload/plugins/hooks/EasybytezCom.py
new file mode 100644
index 000000000..1ec8a98f1
--- /dev/null
+++ b/pyload/plugins/hooks/EasybytezCom.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class EasybytezCom(MultiHoster):
+ __name__ = "EasybytezCom"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "")]
+
+ __description__ = """EasyBytez.com hook plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def getHoster(self):
+ self.account = self.core.accountManager.getAccountPlugin(self.__name__)
+ user = self.account.selectAccount()[0]
+
+ try:
+ req = self.account.getAccountRequest(user)
+ page = req.load("http://www.easybytez.com")
+
+ m = re.search(r'</textarea>\s*Supported sites:(.*)', page)
+ return m.group(1).split(',')
+ except Exception, e:
+ self.logDebug(e)
+ self.logWarning("Unable to load supported hoster list, using last known")
+ return ["bitshare.com", "crocko.com", "ddlstorage.com", "depositfiles.com", "extabit.com", "hotfile.com",
+ "mediafire.com", "netload.in", "rapidgator.net", "rapidshare.com", "uploading.com", "uload.to",
+ "uploaded.to"]
diff --git a/pyload/plugins/hooks/Ev0InFetcher.py b/pyload/plugins/hooks/Ev0InFetcher.py
new file mode 100644
index 000000000..5c2022bac
--- /dev/null
+++ b/pyload/plugins/hooks/Ev0InFetcher.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+from time import mktime, time
+
+from pyload.lib import feedparser
+
+from pyload.plugins.Hook import Hook
+
+
+class Ev0InFetcher(Hook):
+ __name__ = "Ev0InFetcher"
+ __type__ = "hook"
+ __version__ = "0.21"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("interval", "int", "Check interval in minutes", 10),
+ ("queue", "bool", "Move new shows directly to Queue", False),
+ ("shows", "str", "Shows to check for (comma seperated)", ""),
+ ("quality", "xvid;x264;rmvb", "Video Format", "xvid"),
+ ("hoster", "str", "Hoster to use (comma seperated)",
+ "NetloadIn,RapidshareCom,MegauploadCom,HotfileCom")]
+
+ __description__ = """Checks rss feeds for Ev0.in"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def setup(self):
+ self.interval = self.getConfig("interval") * 60
+
+ def filterLinks(self, links):
+ results = self.core.pluginManager.parseUrls(links)
+ sortedLinks = {}
+
+ for url, hoster in results:
+ if hoster not in sortedLinks:
+ sortedLinks[hoster] = []
+ sortedLinks[hoster].append(url)
+
+ for h in self.getConfig("hoster").split(","):
+ try:
+ return sortedLinks[h.strip()]
+ except:
+ continue
+ return []
+
+
+ def periodical(self):
+
+ def normalizefiletitle(filename):
+ filename = filename.replace('.', ' ')
+ filename = filename.replace('_', ' ')
+ filename = filename.lower()
+ return filename
+
+ shows = [s.strip() for s in self.getConfig("shows").split(",")]
+
+ feed = feedparser.parse("http://feeds.feedburner.com/ev0in/%s?format=xml" % self.getConfig("quality"))
+
+ showStorage = {}
+ for show in shows:
+ showStorage[show] = int(self.getStorage("show_%s_lastfound" % show, 0))
+
+ found = False
+ for item in feed['items']:
+ for show, lastfound in showStorage.iteritems():
+ if show.lower() in normalizefiletitle(item['title']) and lastfound < int(mktime(item.date_parsed)):
+ links = self.filterLinks(item['description'].split("<br />"))
+ packagename = item['title'].encode("utf-8")
+ self.logInfo("Ev0InFetcher: new episode '%s' (matched '%s')" % (packagename, show))
+ self.core.api.addPackage(packagename, links, 1 if self.getConfig("queue") else 0)
+ self.setStorage("show_%s_lastfound" % show, int(mktime(item.date_parsed)))
+ found = True
+ if not found:
+ #self.logDebug("Ev0InFetcher: no new episodes found")
+ pass
+
+ for show, lastfound in self.getStorage().iteritems():
+ if int(lastfound) > 0 and int(lastfound) + (3600 * 24 * 30) < int(time()):
+ self.delStorage("show_%s_lastfound" % show)
+ self.logDebug("Ev0InFetcher: cleaned '%s' record" % show)
diff --git a/pyload/plugins/hooks/ExpertDecoders.py b/pyload/plugins/hooks/ExpertDecoders.py
new file mode 100644
index 000000000..ef5409b76
--- /dev/null
+++ b/pyload/plugins/hooks/ExpertDecoders.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+from base64 import b64encode
+from pycurl import LOW_SPEED_TIME
+from thread import start_new_thread
+from uuid import uuid4
+
+from pyload.network.HTTPRequest import BadHeader
+from pyload.network.RequestFactory import getURL, getRequest
+from pyload.plugins.Hook import Hook
+
+
+class ExpertDecoders(Hook):
+ __name__ = "ExpertDecoders"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("force", "bool", "Force CT even if client is connected", False),
+ ("passkey", "password", "Access key", "")]
+
+ __description__ = """Send captchas to expertdecoders.com"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ API_URL = "http://www.fasttypers.org/imagepost.ashx"
+
+
+ def setup(self):
+ self.info = {}
+
+ def getCredits(self):
+ response = getURL(self.API_URL, post={"key": self.getConfig("passkey"), "action": "balance"})
+
+ if response.isdigit():
+ self.logInfo(_("%s credits left") % response)
+ self.info['credits'] = credits = int(response)
+ return credits
+ else:
+ self.logError(response)
+ return 0
+
+ def processCaptcha(self, task):
+ task.data['ticket'] = ticket = uuid4()
+ result = None
+
+ with open(task.captchaFile, 'rb') as f:
+ data = f.read()
+ data = b64encode(data)
+ #self.logDebug("%s: %s : %s" % (ticket, task.captchaFile, data))
+
+ req = getRequest()
+ #raise timeout threshold
+ req.c.setopt(LOW_SPEED_TIME, 80)
+
+ try:
+ result = req.load(self.API_URL, post={"action": "upload", "key": self.getConfig("passkey"),
+ "file": data, "gen_task_id": ticket})
+ finally:
+ req.close()
+
+ self.logDebug("result %s : %s" % (ticket, result))
+ task.setResult(result)
+
+ def newCaptchaTask(self, task):
+ if not task.isTextual():
+ return False
+
+ if not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if self.getCredits() > 0:
+ task.handler.append(self)
+ task.setWaiting(100)
+ start_new_thread(self.processCaptcha, (task,))
+
+ else:
+ self.logInfo(_("Your ExpertDecoders Account has not enough credits"))
+
+ def captchaInvalid(self, task):
+ if "ticket" in task.data:
+
+ try:
+ response = getURL(self.API_URL, post={"action": "refund", "key": self.getConfig("passkey"),
+ "gen_task_id": task.data['ticket']})
+ self.logInfo("Request refund: %s" % response)
+
+ except BadHeader, e:
+ self.logError("Could not send refund request.", str(e))
diff --git a/pyload/plugins/hooks/ExternalScripts.py b/pyload/plugins/hooks/ExternalScripts.py
new file mode 100644
index 000000000..372035e82
--- /dev/null
+++ b/pyload/plugins/hooks/ExternalScripts.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+
+import subprocess
+
+from os import listdir, access, X_OK, makedirs
+from os.path import join, exists, basename, abspath
+
+from pyload.plugins.Hook import Hook
+from pyload.utils import safe_join
+
+
+class ExternalScripts(Hook):
+ __name__ = "ExternalScripts"
+ __type__ = "hook"
+ __version__ = "0.23"
+
+ __config__ = [("activated", "bool", "Activated", True)]
+
+ __description__ = """Run external scripts"""
+ __author_name__ = ("mkaay", "RaNaN", "spoob")
+ __author_mail__ = ("mkaay@mkaay.de", "ranan@pyload.org", "spoob@pyload.org")
+
+ event_list = ["unrarFinished", "allDownloadsFinished", "allDownloadsProcessed"]
+
+
+ def setup(self):
+ self.scripts = {}
+
+ folders = ["download_preparing", "download_finished", "package_finished",
+ "before_reconnect", "after_reconnect", "unrar_finished",
+ "all_dls_finished", "all_dls_processed"]
+
+ for folder in folders:
+ self.scripts[folder] = []
+
+ self.initPluginType(folder, join(pypath, 'scripts', folder))
+ self.initPluginType(folder, join('scripts', folder))
+
+ for script_type, names in self.scripts.iteritems():
+ if names:
+ self.logInfo((_("Installed scripts for %s: ") % script_type) + ", ".join([basename(x) for x in names]))
+
+ def initPluginType(self, folder, path):
+ if not exists(path):
+ try:
+ makedirs(path)
+ except:
+ self.logDebug("Script folder %s not created" % folder)
+ return
+
+ for f in listdir(path):
+ if f.startswith("#") or f.startswith(".") or f.startswith("_") or f.endswith("~") or f.endswith(".swp"):
+ continue
+
+ if not access(join(path, f), X_OK):
+ self.logWarning(_("Script not executable:") + " %s/%s" % (folder, f))
+
+ self.scripts[folder].append(join(path, f))
+
+ def callScript(self, script, *args):
+ try:
+ cmd = [script] + [str(x) if not isinstance(x, basestring) else x for x in args]
+ self.logDebug("Executing %(script)s: %(cmd)s" % {"script": abspath(script), "cmd": " ".join(cmd)})
+ #output goes to pyload
+ subprocess.Popen(cmd, bufsize=-1)
+ except Exception, e:
+ self.logError(_("Error in %(script)s: %(error)s") % {"script": basename(script), "error": str(e)})
+
+ def downloadPreparing(self, pyfile):
+ for script in self.scripts['download_preparing']:
+ self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.id)
+
+ def downloadFinished(self, pyfile):
+ for script in self.scripts['download_finished']:
+ self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.name,
+ safe_join(self.config['general']['download_folder'],
+ pyfile.package().folder, pyfile.name), pyfile.id)
+
+ def packageFinished(self, pypack):
+ for script in self.scripts['package_finished']:
+ folder = self.config['general']['download_folder']
+ folder = safe_join(folder, pypack.folder)
+
+ self.callScript(script, pypack.name, folder, pypack.password, pypack.id)
+
+ def beforeReconnecting(self, ip):
+ for script in self.scripts['before_reconnect']:
+ self.callScript(script, ip)
+
+ def afterReconnecting(self, ip):
+ for script in self.scripts['after_reconnect']:
+ self.callScript(script, ip)
+
+ def unrarFinished(self, folder, fname):
+ for script in self.scripts['unrar_finished']:
+ self.callScript(script, folder, fname)
+
+ def allDownloadsFinished(self):
+ for script in self.scripts['all_dls_finished']:
+ self.callScript(script)
+
+ def allDownloadsProcessed(self):
+ for script in self.scripts['all_dls_processed']:
+ self.callScript(script)
diff --git a/pyload/plugins/hooks/ExtractArchive.py b/pyload/plugins/hooks/ExtractArchive.py
new file mode 100644
index 000000000..1a2da53ad
--- /dev/null
+++ b/pyload/plugins/hooks/ExtractArchive.py
@@ -0,0 +1,320 @@
+# -*- coding: utf-8 -*-
+
+import os
+import sys
+
+from copy import copy
+from os import remove, chmod, makedirs
+from os.path import exists, basename, isfile, isdir
+from traceback import print_exc
+
+# monkey patch bug in python 2.6 and lower
+# http://bugs.python.org/issue6122 , http://bugs.python.org/issue1236 , http://bugs.python.org/issue1731717
+if sys.version_info < (2, 7) and os.name != "nt":
+ import errno
+ from subprocess import Popen
+
+ def _eintr_retry_call(func, *args):
+ while True:
+ try:
+ return func(*args)
+ except OSError, e:
+ if e.errno == errno.EINTR:
+ continue
+ raise
+
+ # unsued timeout option for older python version
+ def wait(self, timeout=0):
+ """Wait for child process to terminate. Returns returncode
+ attribute."""
+ if self.returncode is None:
+ try:
+ pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
+ except OSError, e:
+ if e.errno != errno.ECHILD:
+ raise
+ # This happens if SIGCLD is set to be ignored or waiting
+ # for child processes has otherwise been disabled for our
+ # process. This child is dead, we can't get the status.
+ sts = 0
+ self._handle_exitstatus(sts)
+ return self.returncode
+
+ Popen.wait = wait
+
+if os.name != "nt":
+ from grp import getgrnam
+ from os import chown
+ from pwd import getpwnam
+
+from pyload.plugins.Hook import Hook, threaded, Expose
+from pyload.plugins.internal.AbstractExtractor import ArchiveError, CRCError, WrongPassword
+from pyload.utils import safe_join, fs_encode
+
+
+class ExtractArchive(Hook):
+ """
+ Provides: unrarFinished (folder, filename)
+ """
+ __name__ = "ExtractArchive"
+ __type__ = "hook"
+ __version__ = "0.16"
+
+ __config__ = [("activated", "bool", "Activated", True),
+ ("fullpath", "bool", "Extract full path", True),
+ ("overwrite", "bool", "Overwrite files", True),
+ ("passwordfile", "file", "password file", "unrar_passwords.txt"),
+ ("deletearchive", "bool", "Delete archives when done", False),
+ ("subfolder", "bool", "Create subfolder for each package", False),
+ ("destination", "folder", "Extract files to", ""),
+ ("excludefiles", "str", "Exclude files from unpacking (seperated by ;)", ""),
+ ("recursive", "bool", "Extract archives in archvies", True),
+ ("queue", "bool", "Wait for all downloads to be finished", True),
+ ("renice", "int", "CPU Priority", 0)]
+
+ __description__ = """Extract different kind of archives"""
+ __author_name__ = ("pyLoad Team", "AndroKev")
+ __author_mail__ = ("admin@pyload.org", "@pyloadforum")
+
+ event_list = ["allDownloadsProcessed"]
+
+
+ def setup(self):
+ self.plugins = []
+ self.passwords = []
+ names = []
+
+ for p in ("UnRar", "UnZip"):
+ try:
+ module = self.core.pluginManager.loadModule("internal", p)
+ klass = getattr(module, p)
+ if klass.checkDeps():
+ names.append(p)
+ self.plugins.append(klass)
+
+ except OSError, e:
+ if e.errno == 2:
+ self.logInfo(_("No %s installed") % p)
+ else:
+ self.logWarning(_("Could not activate %s") % p, str(e))
+ if self.core.debug:
+ print_exc()
+
+ except Exception, e:
+ self.logWarning(_("Could not activate %s") % p, str(e))
+ if self.core.debug:
+ print_exc()
+
+ if names:
+ self.logInfo(_("Activated") + " " + " ".join(names))
+ else:
+ self.logInfo(_("No Extract plugins activated"))
+
+ # queue with package ids
+ self.queue = []
+
+ @Expose
+ def extractPackage(self, id):
+ """ Extract package with given id"""
+ self.manager.startThread(self.extract, [id])
+
+ def packageFinished(self, pypack):
+ if self.getConfig("queue"):
+ self.logInfo(_("Package %s queued for later extracting") % pypack.name)
+ self.queue.append(pypack.id)
+ else:
+ self.manager.startThread(self.extract, [pypack.id])
+
+ @threaded
+ def allDownloadsProcessed(self, thread):
+ local = copy(self.queue)
+ del self.queue[:]
+ self.extract(local, thread)
+
+ def extract(self, ids, thread=None):
+ # reload from txt file
+ self.reloadPasswords()
+
+ # dl folder
+ dl = self.config['general']['download_folder']
+
+ extracted = []
+
+ #iterate packages -> plugins -> targets
+ for pid in ids:
+ p = self.core.files.getPackage(pid)
+ self.logInfo(_("Check package %s") % p.name)
+ if not p:
+ continue
+
+ # determine output folder
+ out = safe_join(dl, p.folder, "")
+ # force trailing slash
+
+ if self.getConfig("destination") and self.getConfig("destination").lower() != "none":
+
+ out = safe_join(dl, p.folder, self.getConfig("destination"), "")
+ #relative to package folder if destination is relative, otherwise absolute path overwrites them
+
+ if self.getConfig("subfolder"):
+ out = safe_join(out, fs_encode(p.folder))
+
+ if not exists(out):
+ makedirs(out)
+
+ files_ids = [(safe_join(dl, p.folder, x['name']), x['id']) for x in p.getChildren().itervalues()]
+ matched = False
+
+ # check as long there are unseen files
+ while files_ids:
+ new_files_ids = []
+
+ for plugin in self.plugins:
+ targets = plugin.getTargets(files_ids)
+ if targets:
+ self.logDebug("Targets for %s: %s" % (plugin.__name__, targets))
+ matched = True
+ for target, fid in targets:
+ if target in extracted:
+ self.logDebug(basename(target), "skipped")
+ continue
+ extracted.append(target) # prevent extracting same file twice
+
+ klass = plugin(self, target, out, self.getConfig("fullpath"), self.getConfig("overwrite"), self.getConfig("excludefiles"),
+ self.getConfig("renice"))
+ klass.init()
+
+ self.logInfo(basename(target), _("Extract to %s") % out)
+ new_files = self.startExtracting(klass, fid, p.password.strip().splitlines(), thread)
+ self.logDebug("Extracted: %s" % new_files)
+ self.setPermissions(new_files)
+
+ for file in new_files:
+ if not exists(file):
+ self.logDebug("new file %s does not exists" % file)
+ continue
+ if self.getConfig("recursive") and isfile(file):
+ new_files_ids.append((file, fid)) # append as new target
+
+ files_ids = new_files_ids # also check extracted files
+
+ if not matched:
+ self.logInfo(_("No files found to extract"))
+
+ def startExtracting(self, plugin, fid, passwords, thread):
+ pyfile = self.core.files.getFile(fid)
+ if not pyfile:
+ return []
+
+ pyfile.setCustomStatus(_("extracting"))
+ thread.addActive(pyfile) # keep this file until everything is done
+
+ try:
+ progress = lambda x: pyfile.setProgress(x)
+ success = False
+
+ if not plugin.checkArchive():
+ plugin.extract(progress)
+ success = True
+ else:
+ self.logInfo(basename(plugin.file), _("Password protected"))
+ self.logDebug("Passwords: %s" % str(passwords))
+
+ pwlist = copy(self.getPasswords())
+ #remove already supplied pws from list (only local)
+ for pw in passwords:
+ if pw in pwlist:
+ pwlist.remove(pw)
+
+ for pw in passwords + pwlist:
+ try:
+ self.logDebug("Try password: %s" % pw)
+ if plugin.checkPassword(pw):
+ plugin.extract(progress, pw)
+ self.addPassword(pw)
+ success = True
+ break
+ except WrongPassword:
+ self.logDebug("Password was wrong")
+
+ if not success:
+ self.logError(basename(plugin.file), _("Wrong password"))
+ return []
+
+ if self.core.debug:
+ self.logDebug("Would delete: %s" % ", ".join(plugin.getDeleteFiles()))
+
+ if self.getConfig("deletearchive"):
+ files = plugin.getDeleteFiles()
+ self.logInfo(_("Deleting %s files") % len(files))
+ for f in files:
+ if exists(f):
+ remove(f)
+ else:
+ self.logDebug("%s does not exists" % f)
+
+ self.logInfo(basename(plugin.file), _("Extracting finished"))
+ self.manager.dispatchEvent("unrarFinished", plugin.out, plugin.file)
+
+ return plugin.getExtractedFiles()
+
+ except ArchiveError, e:
+ self.logError(basename(plugin.file), _("Archive Error"), str(e))
+ except CRCError:
+ self.logError(basename(plugin.file), _("CRC Mismatch"))
+ except Exception, e:
+ if self.core.debug:
+ print_exc()
+ self.logError(basename(plugin.file), _("Unknown Error"), str(e))
+
+ return []
+
+ @Expose
+ def getPasswords(self):
+ """ List of saved passwords """
+ return self.passwords
+
+ def reloadPasswords(self):
+ pwfile = self.getConfig("passwordfile")
+ if not exists(pwfile):
+ open(pwfile, "wb").close()
+
+ passwords = []
+ f = open(pwfile, "rb")
+ for pw in f.read().splitlines():
+ passwords.append(pw)
+ f.close()
+
+ self.passwords = passwords
+
+ @Expose
+ def addPassword(self, pw):
+ """ Adds a password to saved list"""
+ pwfile = self.getConfig("passwordfile")
+
+ if pw in self.passwords:
+ self.passwords.remove(pw)
+ self.passwords.insert(0, pw)
+
+ f = open(pwfile, "wb")
+ for pw in self.passwords:
+ f.write(pw + "\n")
+ f.close()
+
+ def setPermissions(self, files):
+ for f in files:
+ if not exists(f):
+ continue
+ try:
+ if self.config['permission']['change_file']:
+ if isfile(f):
+ chmod(f, int(self.config['permission']['file'], 8))
+ elif isdir(f):
+ chmod(f, int(self.config['permission']['folder'], 8))
+
+ if self.config['permission']['change_dl'] and os.name != "nt":
+ uid = getpwnam(self.config['permission']['user'])[2]
+ gid = getgrnam(self.config['permission']['group'])[2]
+ chown(f, uid, gid)
+ except Exception, e:
+ self.logWarning(_("Setting User and Group failed"), e)
diff --git a/pyload/plugins/hooks/FastixRu.py b/pyload/plugins/hooks/FastixRu.py
new file mode 100644
index 000000000..966bc6bd3
--- /dev/null
+++ b/pyload/plugins/hooks/FastixRu.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class FastixRu(MultiHoster):
+ __name__ = "FastixRu"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Fastix.ru hook plugin"""
+ __author_name__ = "Massimo Rosamilia"
+ __author_mail__ = "max@spiritix.eu"
+
+
+ def getHoster(self):
+ page = getURL(
+ "http://fastix.ru/api_v2/?apikey=5182964c3f8f9a7f0b00000a_kelmFB4n1IrnCDYuIFn2y&sub=allowed_sources")
+ host_list = json_loads(page)
+ host_list = host_list['allow']
+ return host_list
diff --git a/pyload/plugins/hooks/FreeWayMe.py b/pyload/plugins/hooks/FreeWayMe.py
new file mode 100644
index 000000000..35b275067
--- /dev/null
+++ b/pyload/plugins/hooks/FreeWayMe.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class FreeWayMe(MultiHoster):
+ __name__ = "FreeWayMe"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """FreeWay.me hook plugin"""
+ __author_name__ = "Nicolas Giese"
+ __author_mail__ = "james@free-way.me"
+
+
+ def getHoster(self):
+ hostis = getURL("https://www.free-way.me/ajax/jd.php", get={"id": 3}).replace("\"", "").strip()
+ self.logDebug("hosters: %s" % hostis)
+ return [x.strip() for x in hostis.split(",") if x.strip()]
diff --git a/pyload/plugins/hooks/HotFolder.py b/pyload/plugins/hooks/HotFolder.py
new file mode 100644
index 000000000..f76e95af4
--- /dev/null
+++ b/pyload/plugins/hooks/HotFolder.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+import time
+
+from os import listdir, makedirs
+from os.path import exists, isfile, join
+from shutil import move
+
+from pyload.plugins.Hook import Hook
+
+
+class HotFolder(Hook):
+ __name__ = "HotFolder"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("folder", "str", "Folder to observe", "container"),
+ ("watch_file", "bool", "Observe link file", False),
+ ("keep", "bool", "Keep added containers", True),
+ ("file", "str", "Link file", "links.txt")]
+
+ __description__ = """Observe folder and file for changes and add container and links"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.de"
+
+
+ def setup(self):
+ self.interval = 10
+
+ def periodical(self):
+ if not exists(join(self.getConfig("folder"), "finished")):
+ makedirs(join(self.getConfig("folder"), "finished"))
+
+ if self.getConfig("watch_file"):
+
+ if not exists(self.getConfig("file")):
+ f = open(self.getConfig("file"), "wb")
+ f.close()
+
+ f = open(self.getConfig("file"), "rb")
+ content = f.read().strip()
+ f.close()
+ f = open(self.getConfig("file"), "wb")
+ f.close()
+ if content:
+ name = "%s_%s.txt" % (self.getConfig("file"), time.strftime("%H-%M-%S_%d%b%Y"))
+
+ f = open(join(self.getConfig("folder"), "finished", name), "wb")
+ f.write(content)
+ f.close()
+
+ self.core.api.addPackage(f.name, [f.name], 1)
+
+ for f in listdir(self.getConfig("folder")):
+ path = join(self.getConfig("folder"), f)
+
+ if not isfile(path) or f.endswith("~") or f.startswith("#") or f.startswith("."):
+ continue
+
+ newpath = join(self.getConfig("folder"), "finished", f if self.getConfig("keep") else "tmp_" + f)
+ move(path, newpath)
+
+ self.logInfo(_("Added %s from HotFolder") % f)
+ self.core.api.addPackage(f, [newpath], 1)
diff --git a/pyload/plugins/hooks/IRCInterface.py b/pyload/plugins/hooks/IRCInterface.py
new file mode 100644
index 000000000..af8d8fa69
--- /dev/null
+++ b/pyload/plugins/hooks/IRCInterface.py
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+
+import re
+import socket
+import time
+
+from pycurl import FORM_FILE
+from select import select
+from threading import Thread
+from time import sleep
+from traceback import print_exc
+
+from pyload.Api import PackageDoesNotExists, FileDoesNotExists
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hook import Hook
+from pyload.utils import formatSize
+
+
+class IRCInterface(Thread, Hook):
+ __name__ = "IRCInterface"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("host", "str", "IRC-Server Address", "Enter your server here!"),
+ ("port", "int", "IRC-Server Port", 6667),
+ ("ident", "str", "Clients ident", "pyload-irc"),
+ ("realname", "str", "Realname", "pyload-irc"),
+ ("nick", "str", "Nickname the Client will take", "pyLoad-IRC"),
+ ("owner", "str", "Nickname the Client will accept commands from", "Enter your nick here!"),
+ ("info_file", "bool", "Inform about every file finished", False),
+ ("info_pack", "bool", "Inform about every package finished", True),
+ ("captcha", "bool", "Send captcha requests", True)]
+
+ __description__ = """Connect to irc and let owner perform different tasks"""
+ __author_name__ = "Jeix"
+ __author_mail__ = "Jeix@hasnomail.com"
+
+
+ def __init__(self, core, manager):
+ Thread.__init__(self)
+ Hook.__init__(self, core, manager)
+ self.setDaemon(True)
+ # self.sm = core.server_methods
+ self.api = core.api # todo, only use api
+
+ def coreReady(self):
+ self.abort = False
+ self.more = []
+ self.new_package = {}
+
+ self.start()
+
+ def packageFinished(self, pypack):
+ try:
+ if self.getConfig("info_pack"):
+ self.response(_("Package finished: %s") % pypack.name)
+ except:
+ pass
+
+ def downloadFinished(self, pyfile):
+ try:
+ if self.getConfig("info_file"):
+ self.response(
+ _("Download finished: %(name)s @ %(plugin)s ") % {"name": pyfile.name, "plugin": pyfile.pluginname})
+ except:
+ pass
+
+ def newCaptchaTask(self, task):
+ if self.getConfig("captcha") and task.isTextual():
+ task.handler.append(self)
+ task.setWaiting(60)
+
+ page = getURL("http://www.freeimagehosting.net/upload.php",
+ post={"attached": (FORM_FILE, task.captchaFile)}, multipart=True)
+
+ url = re.search(r"\[img\]([^\[]+)\[/img\]\[/url\]", page).group(1)
+ self.response(_("New Captcha Request: %s") % url)
+ self.response(_("Answer with 'c %s text on the captcha'") % task.id)
+
+ def run(self):
+ # connect to IRC etc.
+ self.sock = socket.socket()
+ host = self.getConfig("host")
+ self.sock.connect((host, self.getConfig("port")))
+ nick = self.getConfig("nick")
+ self.sock.send("NICK %s\r\n" % nick)
+ self.sock.send("USER %s %s bla :%s\r\n" % (nick, host, nick))
+ for t in self.getConfig("owner").split():
+ if t.strip().startswith("#"):
+ self.sock.send("JOIN %s\r\n" % t.strip())
+ self.logInfo("pyLoad IRC: Connected to %s!" % host)
+ self.logInfo("pyLoad IRC: Switching to listening mode!")
+ try:
+ self.main_loop()
+
+ except IRCError, ex:
+ self.sock.send("QUIT :byebye\r\n")
+ print_exc()
+ self.sock.close()
+
+ def main_loop(self):
+ readbuffer = ""
+ while True:
+ sleep(1)
+ fdset = select([self.sock], [], [], 0)
+ if self.sock not in fdset[0]:
+ continue
+
+ if self.abort:
+ raise IRCError("quit")
+
+ readbuffer += self.sock.recv(1024)
+ temp = readbuffer.split("\n")
+ readbuffer = temp.pop()
+
+ for line in temp:
+ line = line.rstrip()
+ first = line.split()
+
+ if first[0] == "PING":
+ self.sock.send("PONG %s\r\n" % first[1])
+
+ if first[0] == "ERROR":
+ raise IRCError(line)
+
+ msg = line.split(None, 3)
+ if len(msg) < 4:
+ continue
+
+ msg = {
+ "origin": msg[0][1:],
+ "action": msg[1],
+ "target": msg[2],
+ "text": msg[3][1:]
+ }
+
+ self.handle_events(msg)
+
+ def handle_events(self, msg):
+ if not msg['origin'].split("!", 1)[0] in self.getConfig("owner").split():
+ return
+
+ if msg['target'].split("!", 1)[0] != self.getConfig("nick"):
+ return
+
+ if msg['action'] != "PRIVMSG":
+ return
+
+ # HANDLE CTCP ANTI FLOOD/BOT PROTECTION
+ if msg['text'] == "\x01VERSION\x01":
+ self.logDebug("Sending CTCP VERSION.")
+ self.sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
+ return
+ elif msg['text'] == "\x01TIME\x01":
+ self.logDebug("Sending CTCP TIME.")
+ self.sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time()))
+ return
+ elif msg['text'] == "\x01LAG\x01":
+ self.logDebug("Received CTCP LAG.") # don't know how to answer
+ return
+
+ trigger = "pass"
+ args = None
+
+ try:
+ temp = msg['text'].split()
+ trigger = temp[0]
+ if len(temp) > 1:
+ args = temp[1:]
+ except:
+ pass
+
+ handler = getattr(self, "event_%s" % trigger, self.event_pass)
+ try:
+ res = handler(args)
+ for line in res:
+ self.response(line, msg['origin'])
+ except Exception, e:
+ self.logError("pyLoad IRC: " + repr(e))
+
+ def response(self, msg, origin=""):
+ if origin == "":
+ for t in self.getConfig("owner").split():
+ self.sock.send("PRIVMSG %s :%s\r\n" % (t.strip(), msg))
+ else:
+ self.sock.send("PRIVMSG %s :%s\r\n" % (origin.split("!", 1)[0], msg))
+
+ #### Events
+
+ def event_pass(self, args):
+ return []
+
+ def event_status(self, args):
+ downloads = self.api.statusDownloads()
+ if not downloads:
+ return ["INFO: There are no active downloads currently."]
+
+ temp_progress = ""
+ lines = ["ID - Name - Status - Speed - ETA - Progress"]
+ for data in downloads:
+
+ if data.status == 5:
+ temp_progress = data.format_wait
+ else:
+ temp_progress = "%d%% (%s)" % (data.percent, data.format_size)
+
+ lines.append("#%d - %s - %s - %s - %s - %s" %
+ (
+ data.fid,
+ data.name,
+ data.statusmsg,
+ "%s/s" % formatSize(data.speed),
+ "%s" % data.format_eta,
+ temp_progress
+ ))
+ return lines
+
+ def event_queue(self, args):
+ ps = self.api.getQueueData()
+
+ if not ps:
+ return ["INFO: There are no packages in queue."]
+
+ lines = []
+ for pack in ps:
+ lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links)))
+
+ return lines
+
+ def event_collector(self, args):
+ ps = self.api.getCollectorData()
+ if not ps:
+ return ["INFO: No packages in collector!"]
+
+ lines = []
+ for pack in ps:
+ lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links)))
+
+ return lines
+
+ def event_info(self, args):
+ if not args:
+ return ["ERROR: Use info like this: info <id>"]
+
+ info = None
+ try:
+ info = self.api.getFileData(int(args[0]))
+
+ except FileDoesNotExists:
+ return ["ERROR: Link doesn't exists."]
+
+ return ['LINK #%s: %s (%s) [%s][%s]' % (info.fid, info.name, info.format_size, info.statusmsg, info.plugin)]
+
+ def event_packinfo(self, args):
+ if not args:
+ return ["ERROR: Use packinfo like this: packinfo <id>"]
+
+ lines = []
+ pack = None
+ try:
+ pack = self.api.getPackageData(int(args[0]))
+
+ except PackageDoesNotExists:
+ return ["ERROR: Package doesn't exists."]
+
+ id = args[0]
+
+ self.more = []
+
+ lines.append('PACKAGE #%s: "%s" with %d links' % (id, pack.name, len(pack.links)))
+ for pyfile in pack.links:
+ self.more.append('LINK #%s: %s (%s) [%s][%s]' % (pyfile.fid, pyfile.name, pyfile.format_size,
+ pyfile.statusmsg, pyfile.plugin))
+
+ if len(self.more) < 6:
+ lines.extend(self.more)
+ self.more = []
+ else:
+ lines.extend(self.more[:6])
+ self.more = self.more[6:]
+ lines.append("%d more links do display." % len(self.more))
+
+ return lines
+
+ def event_more(self, args):
+ if not self.more:
+ return ["No more information to display."]
+
+ lines = self.more[:6]
+ self.more = self.more[6:]
+ lines.append("%d more links do display." % len(self.more))
+
+ return lines
+
+ def event_start(self, args):
+ self.api.unpauseServer()
+ return ["INFO: Starting downloads."]
+
+ def event_stop(self, args):
+ self.api.pauseServer()
+ return ["INFO: No new downloads will be started."]
+
+ def event_add(self, args):
+ if len(args) < 2:
+ return ['ERROR: Add links like this: "add <packagename|id> links". ',
+ "This will add the link <link> to to the package <package> / the package with id <id>!"]
+
+ pack = args[0].strip()
+ links = [x.strip() for x in args[1:]]
+
+ count_added = 0
+ count_failed = 0
+ try:
+ id = int(pack)
+ pack = self.api.getPackageData(id)
+ if not pack:
+ return ["ERROR: Package doesn't exists."]
+
+ #TODO add links
+
+ return ["INFO: Added %d links to Package %s [#%d]" % (len(links), pack['name'], id)]
+
+ except:
+ # create new package
+ id = self.api.addPackage(pack, links, 1)
+ return ["INFO: Created new Package %s [#%d] with %d links." % (pack, id, len(links))]
+
+ def event_del(self, args):
+ if len(args) < 2:
+ return ["ERROR: Use del command like this: del -p|-l <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"]
+
+ if args[0] == "-p":
+ ret = self.api.deletePackages(map(int, args[1:]))
+ return ["INFO: Deleted %d packages!" % len(args[1:])]
+
+ elif args[0] == "-l":
+ ret = self.api.delLinks(map(int, args[1:]))
+ return ["INFO: Deleted %d links!" % len(args[1:])]
+
+ else:
+ return ["ERROR: Use del command like this: del <-p|-l> <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"]
+
+ def event_push(self, args):
+ if not args:
+ return ["ERROR: Push package to queue like this: push <package id>"]
+
+ id = int(args[0])
+ try:
+ info = self.api.getPackageInfo(id)
+ except PackageDoesNotExists:
+ return ["ERROR: Package #%d does not exist." % id]
+
+ self.api.pushToQueue(id)
+ return ["INFO: Pushed package #%d to queue." % id]
+
+ def event_pull(self, args):
+ if not args:
+ return ["ERROR: Pull package from queue like this: pull <package id>."]
+
+ id = int(args[0])
+ if not self.api.getPackageData(id):
+ return ["ERROR: Package #%d does not exist." % id]
+
+ self.api.pullFromQueue(id)
+ return ["INFO: Pulled package #%d from queue to collector." % id]
+
+ def event_c(self, args):
+ """ captcha answer """
+ if not args:
+ return ["ERROR: Captcha ID missing."]
+
+ task = self.core.captchaManager.getTaskByID(args[0])
+ if not task:
+ return ["ERROR: Captcha Task with ID %s does not exists." % args[0]]
+
+ task.setResult(" ".join(args[1:]))
+ return ["INFO: Result %s saved." % " ".join(args[1:])]
+
+ def event_help(self, args):
+ lines = ["The following commands are available:",
+ "add <package|packid> <links> [...] Adds link to package. (creates new package if it does not exist)",
+ "queue Shows all packages in the queue",
+ "collector Shows all packages in collector",
+ "del -p|-l <id> [...] Deletes all packages|links with the ids specified",
+ "info <id> Shows info of the link with id <id>",
+ "packinfo <id> Shows info of the package with id <id>",
+ "more Shows more info when the result was truncated",
+ "start Starts all downloads",
+ "stop Stops the download (but not abort active downloads)",
+ "push <id> Push package to queue",
+ "pull <id> Pull package from queue",
+ "status Show general download status",
+ "help Shows this help message"]
+ return lines
+
+
+class IRCError(Exception):
+
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
diff --git a/pyload/plugins/hooks/ImageTyperz.py b/pyload/plugins/hooks/ImageTyperz.py
new file mode 100644
index 000000000..2591a1c78
--- /dev/null
+++ b/pyload/plugins/hooks/ImageTyperz.py
@@ -0,0 +1,143 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import re
+
+from base64 import b64encode
+from pycurl import FORM_FILE, LOW_SPEED_TIME
+from thread import start_new_thread
+
+from pyload.network.RequestFactory import getURL, getRequest
+from pyload.plugins.Hook import Hook
+
+
+class ImageTyperzException(Exception):
+
+ def __init__(self, err):
+ self.err = err
+
+ def getCode(self):
+ return self.err
+
+ def __str__(self):
+ return "<ImageTyperzException %s>" % self.err
+
+ def __repr__(self):
+ return "<ImageTyperzException %s>" % self.err
+
+
+class ImageTyperz(Hook):
+ __name__ = "ImageTyperz"
+ __type__ = "hook"
+ __version__ = "0.04"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("username", "str", "Username", ""),
+ ("passkey", "password", "Password", ""),
+ ("force", "bool", "Force IT even if client is connected", False)]
+
+ __description__ = """Send captchas to ImageTyperz.com"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ SUBMIT_URL = "http://captchatypers.com/Forms/UploadFileAndGetTextNEW.ashx"
+ RESPOND_URL = "http://captchatypers.com/Forms/SetBadImage.ashx"
+ GETCREDITS_URL = "http://captchatypers.com/Forms/RequestBalance.ashx"
+
+
+ def setup(self):
+ self.info = {}
+
+ def getCredits(self):
+ response = getURL(self.GETCREDITS_URL, post={"action": "REQUESTBALANCE", "username": self.getConfig("username"),
+ "password": self.getConfig("passkey")})
+
+ if response.startswith('ERROR'):
+ raise ImageTyperzException(response)
+
+ try:
+ balance = float(response)
+ except:
+ raise ImageTyperzException("invalid response")
+
+ self.logInfo("Account balance: $%s left" % response)
+ return balance
+
+ def submit(self, captcha, captchaType="file", match=None):
+ req = getRequest()
+ #raise timeout threshold
+ req.c.setopt(LOW_SPEED_TIME, 80)
+
+ try:
+ #workaround multipart-post bug in HTTPRequest.py
+ if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")):
+ multipart = True
+ data = (FORM_FILE, captcha)
+ else:
+ multipart = False
+ with open(captcha, 'rb') as f:
+ data = f.read()
+ data = b64encode(data)
+
+ response = req.load(self.SUBMIT_URL, post={"action": "UPLOADCAPTCHA",
+ "username": self.getConfig("username"),
+ "password": self.getConfig("passkey"), "file": data},
+ multipart=multipart)
+ finally:
+ req.close()
+
+ if response.startswith("ERROR"):
+ raise ImageTyperzException(response)
+ else:
+ data = response.split('|')
+ if len(data) == 2:
+ ticket, result = data
+ else:
+ raise ImageTyperzException("Unknown response %s" % response)
+
+ return ticket, result
+
+ def newCaptchaTask(self, task):
+ if "service" in task.data:
+ return False
+
+ if not task.isTextual():
+ return False
+
+ if not self.getConfig("username") or not self.getConfig("passkey"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if self.getCredits() > 0:
+ task.handler.append(self)
+ task.data['service'] = self.__name__
+ task.setWaiting(100)
+ start_new_thread(self.processCaptcha, (task,))
+
+ else:
+ self.logInfo("Your %s account has not enough credits" % self.__name__)
+
+ def captchaInvalid(self, task):
+ if task.data['service'] == self.__name__ and "ticket" in task.data:
+ response = getURL(self.RESPOND_URL, post={"action": "SETBADIMAGE", "username": self.getConfig("username"),
+ "password": self.getConfig("passkey"),
+ "imageid": task.data['ticket']})
+
+ if response == "SUCCESS":
+ self.logInfo("Bad captcha solution received, requested refund")
+ else:
+ self.logError("Bad captcha solution received, refund request failed", response)
+
+ def processCaptcha(self, task):
+ c = task.captchaFile
+ try:
+ ticket, result = self.submit(c)
+ except ImageTyperzException, e:
+ task.error = e.getCode()
+ return
+
+ task.data['ticket'] = ticket
+ task.setResult(result)
diff --git a/pyload/plugins/hooks/LinkdecrypterCom.py b/pyload/plugins/hooks/LinkdecrypterCom.py
new file mode 100644
index 000000000..34517761a
--- /dev/null
+++ b/pyload/plugins/hooks/LinkdecrypterCom.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hook import Hook
+from pyload.utils import remove_chars
+
+
+class LinkdecrypterCom(Hook):
+ __name__ = "LinkdecrypterCom"
+ __type__ = "hook"
+ __version__ = "0.19"
+
+ __config__ = [("activated", "bool", "Activated", False)]
+
+ __description__ = """Linkdecrypter.com hook plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def coreReady(self):
+ try:
+ self.loadPatterns()
+ except Exception, e:
+ self.logError(e)
+
+ def loadPatterns(self):
+ page = getURL("http://linkdecrypter.com/")
+ m = re.search(r'<b>Supported\(\d+\)</b>: <i>([^+<]*)', page)
+ if m is None:
+ self.logError(_("Crypter list not found"))
+ return
+
+ builtin = [name.lower() for name in self.core.pluginManager.crypterPlugins.keys()]
+ builtin.append("downloadserienjunkiesorg")
+
+ crypter_pattern = re.compile("(\w[\w.-]+)")
+ online = []
+ for crypter in m.group(1).split(', '):
+ m = re.match(crypter_pattern, crypter)
+ if m and remove_chars(m.group(1), "-.") not in builtin:
+ online.append(m.group(1).replace(".", "\\."))
+
+ if not online:
+ self.logError(_("Crypter list is empty"))
+ return
+
+ regexp = r"https?://([^.]+\.)*?(%s)/.*" % "|".join(online)
+
+ dict = self.core.pluginManager.crypterPlugins[self.__name__]
+ dict['pattern'] = regexp
+ dict['re'] = re.compile(regexp)
+
+ self.logDebug("REGEXP: " + regexp)
diff --git a/pyload/plugins/hooks/LinksnappyCom.py b/pyload/plugins/hooks/LinksnappyCom.py
new file mode 100644
index 000000000..f662ae4e9
--- /dev/null
+++ b/pyload/plugins/hooks/LinksnappyCom.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class LinksnappyCom(MultiHoster):
+ __name__ = "LinksnappyCom"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Linksnappy.com hook plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def getHoster(self):
+ json_data = getURL('http://gen.linksnappy.com/lseAPI.php?act=FILEHOSTS')
+ json_data = json_loads(json_data)
+
+ return json_data['return'].keys()
diff --git a/pyload/plugins/hooks/MegaDebridEu.py b/pyload/plugins/hooks/MegaDebridEu.py
new file mode 100644
index 000000000..da151f9aa
--- /dev/null
+++ b/pyload/plugins/hooks/MegaDebridEu.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class MegaDebridEu(MultiHoster):
+ __name__ = "MegaDebridEu"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False)]
+
+ __description__ = """mega-debrid.eu hook plugin"""
+ __author_name__ = "D.Ducatel"
+ __author_mail__ = "dducatel@je-geek.fr"
+
+
+ def getHoster(self):
+ reponse = getURL('http://www.mega-debrid.eu/api.php?action=getHosters')
+ json_data = json_loads(reponse)
+
+ if json_data['response_code'] == "ok":
+ host_list = [element[0] for element in json_data['hosters']]
+ else:
+ self.logError("Unable to retrieve hoster list")
+ host_list = list()
+
+ return host_list
diff --git a/pyload/plugins/hooks/MergeFiles.py b/pyload/plugins/hooks/MergeFiles.py
new file mode 100644
index 000000000..5761a5990
--- /dev/null
+++ b/pyload/plugins/hooks/MergeFiles.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+
+import os
+import re
+import traceback
+
+from pyload.plugins.Hook import Hook, threaded
+from pyload.utils import safe_join, fs_encode
+
+
+class MergeFiles(Hook):
+ __name__ = "MergeFiles"
+ __type__ = "hook"
+ __version__ = "0.12"
+
+ __config__ = [("activated", "bool", "Activated", False)]
+
+ __description__ = """Merges parts splitted with hjsplit"""
+ __author_name__ = "and9000"
+ __author_mail__ = "me@has-no-mail.com"
+
+ BUFFER_SIZE = 4096
+
+
+ def setup(self):
+ # nothing to do
+ pass
+
+ @threaded
+ def packageFinished(self, pack):
+ files = {}
+ fid_dict = {}
+ for fid, data in pack.getChildren().iteritems():
+ if re.search("\.[0-9]{3}$", data['name']):
+ if data['name'][:-4] not in files:
+ files[data['name'][:-4]] = []
+ files[data['name'][:-4]].append(data['name'])
+ files[data['name'][:-4]].sort()
+ fid_dict[data['name']] = fid
+
+ download_folder = self.config['general']['download_folder']
+
+ if self.config['general']['folder_per_package']:
+ download_folder = safe_join(download_folder, pack.folder)
+
+ for name, file_list in files.iteritems():
+ self.logInfo("Starting merging of %s" % name)
+ final_file = open(safe_join(download_folder, name), "wb")
+
+ for splitted_file in file_list:
+ self.logDebug("Merging part %s" % splitted_file)
+ pyfile = self.core.files.getFile(fid_dict[splitted_file])
+ pyfile.setStatus("processing")
+ try:
+ s_file = open(os.path.join(download_folder, splitted_file), "rb")
+ size_written = 0
+ s_file_size = int(os.path.getsize(os.path.join(download_folder, splitted_file)))
+ while True:
+ f_buffer = s_file.read(self.BUFFER_SIZE)
+ if f_buffer:
+ final_file.write(f_buffer)
+ size_written += self.BUFFER_SIZE
+ pyfile.setProgress((size_written * 100) / s_file_size)
+ else:
+ break
+ s_file.close()
+ self.logDebug("Finished merging part %s" % splitted_file)
+ except Exception, e:
+ print traceback.print_exc()
+ finally:
+ pyfile.setProgress(100)
+ pyfile.setStatus("finished")
+ pyfile.release()
+
+ final_file.close()
+ self.logInfo("Finished merging of %s" % name)
diff --git a/pyload/plugins/hooks/MultiDebridCom.py b/pyload/plugins/hooks/MultiDebridCom.py
new file mode 100644
index 000000000..7d9b6526a
--- /dev/null
+++ b/pyload/plugins/hooks/MultiDebridCom.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class MultiDebridCom(MultiHoster):
+ __name__ = "MultiDebridCom"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Multi-debrid.com hook plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def getHoster(self):
+ json_data = getURL('http://multi-debrid.com/api.php?hosts', decode=True)
+ self.logDebug('JSON data: ' + json_data)
+ json_data = json_loads(json_data)
+
+ return json_data['hosts']
diff --git a/pyload/plugins/hooks/MultiHome.py b/pyload/plugins/hooks/MultiHome.py
new file mode 100644
index 000000000..61fbdd230
--- /dev/null
+++ b/pyload/plugins/hooks/MultiHome.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+from time import time
+
+from pyload.plugins.Hook import Hook
+
+
+class MultiHome(Hook):
+ __name__ = "MultiHome"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("interfaces", "str", "Interfaces", "None")]
+
+ __description__ = """Ip address changer"""
+ __author_name__ = "mkaay"
+ __author_mail__ = "mkaay@mkaay.de"
+
+
+ def setup(self):
+ self.register = {}
+ self.interfaces = []
+ self.parseInterfaces(self.getConfig("interfaces").split(";"))
+ if not self.interfaces:
+ self.parseInterfaces([self.config['download']['interface']])
+ self.setConfig("interfaces", self.toConfig())
+
+ def toConfig(self):
+ return ";".join([i.adress for i in self.interfaces])
+
+ def parseInterfaces(self, interfaces):
+ for interface in interfaces:
+ if not interface or str(interface).lower() == "none":
+ continue
+ self.interfaces.append(Interface(interface))
+
+ def coreReady(self):
+ requestFactory = self.core.requestFactory
+ oldGetRequest = requestFactory.getRequest
+
+ def getRequest(pluginName, account=None):
+ iface = self.bestInterface(pluginName, account)
+ if iface:
+ iface.useFor(pluginName, account)
+ requestFactory.iface = lambda: iface.adress
+ self.logDebug("Multihome: using address: " + iface.adress)
+ return oldGetRequest(pluginName, account)
+
+ requestFactory.getRequest = getRequest
+
+ def bestInterface(self, pluginName, account):
+ best = None
+ for interface in self.interfaces:
+ if not best or interface.lastPluginAccess(pluginName, account) < best.lastPluginAccess(pluginName, account):
+ best = interface
+ return best
+
+
+class Interface(object):
+
+ def __init__(self, adress):
+ self.adress = adress
+ self.history = {}
+
+ def lastPluginAccess(self, pluginName, account):
+ if (pluginName, account) in self.history:
+ return self.history[(pluginName, account)]
+ return 0
+
+ def useFor(self, pluginName, account):
+ self.history[(pluginName, account)] = time()
+
+ def __repr__(self):
+ return "<Interface - %s>" % self.adress
diff --git a/pyload/plugins/hooks/MultishareCz.py b/pyload/plugins/hooks/MultishareCz.py
new file mode 100644
index 000000000..9e1bd50a4
--- /dev/null
+++ b/pyload/plugins/hooks/MultishareCz.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class MultishareCz(MultiHoster):
+ __name__ = "MultishareCz"
+ __type__ = "hook"
+ __version__ = "0.04"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "uloz.to")]
+
+ __description__ = """MultiShare.cz hook plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_PATTERN = r'<img class="logo-shareserveru"[^>]*?alt="([^"]+)"></td>\s*<td class="stav">[^>]*?alt="OK"'
+
+
+ def getHoster(self):
+ page = getURL("http://www.multishare.cz/monitoring/")
+ return re.findall(self.HOSTER_PATTERN, page)
diff --git a/pyload/plugins/hooks/OverLoadMe.py b/pyload/plugins/hooks/OverLoadMe.py
new file mode 100644
index 000000000..a57c7c2b4
--- /dev/null
+++ b/pyload/plugins/hooks/OverLoadMe.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class OverLoadMe(MultiHoster):
+ __name__ = "OverLoadMe"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("https", "bool", "Enable HTTPS", True),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 12)]
+
+ __description__ = """Over-Load.me hook plugin"""
+ __author_name__ = "marley"
+ __author_mail__ = "marley@over-load.me"
+
+
+ def getHoster(self):
+ https = "https" if self.getConfig("https") else "http"
+ page = getURL(https + "://api.over-load.me/hoster.php",
+ get={"auth": "0001-cb1f24dadb3aa487bda5afd3b76298935329be7700cd7-5329be77-00cf-1ca0135f"}
+ ).replace("\"", "").strip()
+ self.logDebug("Hosterlist: %s" % page)
+
+ return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/pyload/plugins/hooks/Premium4Me.py b/pyload/plugins/hooks/Premium4Me.py
new file mode 100644
index 000000000..6841dfa90
--- /dev/null
+++ b/pyload/plugins/hooks/Premium4Me.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class Premium4Me(MultiHoster):
+ __name__ = "Premium4Me"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "")]
+
+ __description__ = """Premium.to hook plugin"""
+ __author_name__ = ("RaNaN", "zoidberg", "stickell")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+ def getHoster(self):
+ page = getURL("http://premium.to/api/hosters.php?authcode=%s" % self.account.authcode)
+ return [x.strip() for x in page.replace("\"", "").split(";")]
+
+ def coreReady(self):
+ self.account = self.core.accountManager.getAccountPlugin("Premium4Me")
+
+ user = self.account.selectAccount()[0]
+
+ if not user:
+ self.logError(_("Please add your premium.to account first and restart pyLoad"))
+ return
+
+ return MultiHoster.coreReady(self)
diff --git a/pyload/plugins/hooks/PremiumizeMe.py b/pyload/plugins/hooks/PremiumizeMe.py
new file mode 100644
index 000000000..70bc4a0f2
--- /dev/null
+++ b/pyload/plugins/hooks/PremiumizeMe.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class PremiumizeMe(MultiHoster):
+ __name__ = "PremiumizeMe"
+ __type__ = "hook"
+ __version__ = "0.12"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Premiumize.me hook plugin"""
+ __author_name__ = "Florian Franzen"
+ __author_mail__ = "FlorianFranzen@gmail.com"
+
+
+ def getHoster(self):
+ # If no accounts are available there will be no hosters available
+ if not self.account or not self.account.canUse():
+ return []
+
+ # Get account data
+ (user, data) = self.account.selectAccount()
+
+ # Get supported hosters list from premiumize.me using the
+ # json API v1 (see https://secure.premiumize.me/?show=api)
+ answer = getURL("https://api.premiumize.me/pm-api/v1.php?method=hosterlist&params[login]=%s&params[pass]=%s" % (
+ user, data['password']))
+ data = json_loads(answer)
+
+ # If account is not valid thera are no hosters available
+ if data['status'] != 200:
+ return []
+
+ # Extract hosters from json file
+ return data['result']['hosterlist']
+
+ def coreReady(self):
+ # Get account plugin and check if there is a valid account available
+ self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe")
+ if not self.account.canUse():
+ self.account = None
+ self.logError(_("Please add a valid premiumize.me account first and restart pyLoad."))
+ return
+
+ # Run the overwriten core ready which actually enables the multihoster hook
+ return MultiHoster.coreReady(self)
diff --git a/pyload/plugins/hooks/RPNetBiz.py b/pyload/plugins/hooks/RPNetBiz.py
new file mode 100644
index 000000000..e119e6451
--- /dev/null
+++ b/pyload/plugins/hooks/RPNetBiz.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class RPNetBiz(MultiHoster):
+ __name__ = "RPNetBiz"
+ __type__ = "hook"
+ __version__ = "0.1"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """RPNet.biz hook plugin"""
+ __author_name__ = "Dman"
+ __author_mail__ = "dmanugm@gmail.com"
+
+
+ def getHoster(self):
+ # No hosts supported if no account
+ if not self.account or not self.account.canUse():
+ return []
+
+ # Get account data
+ (user, data) = self.account.selectAccount()
+
+ response = getURL("https://premium.rpnet.biz/client_api.php",
+ get={"username": user, "password": data['password'], "action": "showHosterList"})
+ hoster_list = json_loads(response)
+
+ # If account is not valid thera are no hosters available
+ if 'error' in hoster_list:
+ return []
+
+ # Extract hosters from json file
+ return hoster_list['hosters']
+
+ def coreReady(self):
+ # Get account plugin and check if there is a valid account available
+ self.account = self.core.accountManager.getAccountPlugin("RPNetBiz")
+ if not self.account.canUse():
+ self.account = None
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet")
+ return
+
+ # Run the overwriten core ready which actually enables the multihoster hook
+ return MultiHoster.coreReady(self)
diff --git a/pyload/plugins/hooks/RealdebridCom.py b/pyload/plugins/hooks/RealdebridCom.py
new file mode 100644
index 000000000..c1c519ace
--- /dev/null
+++ b/pyload/plugins/hooks/RealdebridCom.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class RealdebridCom(MultiHoster):
+ __name__ = "RealdebridCom"
+ __type__ = "hook"
+ __version__ = "0.43"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("https", "bool", "Enable HTTPS", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Real-Debrid.com hook plugin"""
+ __author_name__ = "Devirex Hazzard"
+ __author_mail__ = "naibaf_11@yahoo.de"
+
+
+ def getHoster(self):
+ https = "https" if self.getConfig("https") else "http"
+ page = getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip()
+
+ return [x.strip() for x in page.split(",") if x.strip()]
diff --git a/pyload/plugins/hooks/RehostTo.py b/pyload/plugins/hooks/RehostTo.py
new file mode 100644
index 000000000..097ebc646
--- /dev/null
+++ b/pyload/plugins/hooks/RehostTo.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class RehostTo(MultiHoster):
+ __name__ = "RehostTo"
+ __type__ = "hook"
+ __version__ = "0.43"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+
+ __description__ = """Rehost.to hook plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def getHoster(self):
+ page = getURL("http://rehost.to/api.php?cmd=get_supported_och_dl&long_ses=%s" % self.long_ses)
+ return [x.strip() for x in page.replace("\"", "").split(",")]
+
+ def coreReady(self):
+ self.account = self.core.accountManager.getAccountPlugin("RehostTo")
+
+ user = self.account.selectAccount()[0]
+
+ if not user:
+ self.logError("Rehost.to: " + _("Please add your rehost.to account first and restart pyLoad"))
+ return
+
+ data = self.account.getAccountInfo(user)
+ self.ses = data['ses']
+ self.long_ses = data['long_ses']
+
+ return MultiHoster.coreReady(self)
diff --git a/pyload/plugins/hooks/RestartFailed.py b/pyload/plugins/hooks/RestartFailed.py
new file mode 100644
index 000000000..a50ab60a4
--- /dev/null
+++ b/pyload/plugins/hooks/RestartFailed.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Hook import Hook
+
+
+class RestartFailed(Hook):
+ __name__ = "RestartFailed"
+ __type__ = "hook"
+ __version__ = "1.55"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("interval", "int", "Check interval in minutes", 90)]
+
+ __description__ = """Periodically restart all failed downloads in queue"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ MIN_INTERVAL = 15 * 60 #: 15m minimum check interval (value is in seconds)
+
+ event_list = ["pluginConfigChanged"]
+
+
+ def pluginConfigChanged(self, plugin, name, value):
+ if name == "interval":
+ interval = value * 60
+ if self.MIN_INTERVAL <= interval != self.interval:
+ self.core.scheduler.removeJob(self.cb)
+ self.interval = interval
+ self.initPeriodical()
+ else:
+ self.logDebug("Invalid interval value, kept current")
+
+ def periodical(self):
+ self.logInfo("Restart failed downloads")
+ self.api.restartFailed()
+
+ def setup(self):
+ self.api = self.core.api
+ self.interval = self.MIN_INTERVAL
+
+ def coreReady(self):
+ self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval"))
diff --git a/pyload/plugins/hooks/SimplyPremiumCom.py b/pyload/plugins/hooks/SimplyPremiumCom.py
new file mode 100644
index 000000000..8e9bc5e1e
--- /dev/null
+++ b/pyload/plugins/hooks/SimplyPremiumCom.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class SimplyPremiumCom(MultiHoster):
+ __name__ = "SimplyPremiumCom"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", "False"),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", "False"),
+ ("interval", "int", "Reload interval in hours (0 to disable)", "24")]
+
+ __description__ = """Simply-Premium.com hook plugin"""
+ __author_name__ = "EvolutionClip"
+ __author_mail__ = "evolutionclip@live.de"
+
+
+ def getHoster(self):
+ json_data = getURL('http://www.simply-premium.com/api/hosts.php?format=json&online=1')
+ json_data = json_loads(json_data)
+
+ host_list = [element['regex'] for element in json_data['result']]
+
+ return host_list
diff --git a/pyload/plugins/hooks/SimplydebridCom.py b/pyload/plugins/hooks/SimplydebridCom.py
new file mode 100644
index 000000000..f7c899a48
--- /dev/null
+++ b/pyload/plugins/hooks/SimplydebridCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class SimplydebridCom(MultiHoster):
+ __name__ = "SimplydebridCom"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "")]
+
+ __description__ = """Simply-Debrid.com hook plugin"""
+ __author_name__ = "Kagenoshin"
+ __author_mail__ = "kagenoshin@gmx.ch"
+
+
+ def getHoster(self):
+ page = getURL("http://simply-debrid.com/api.php?list=1")
+ return [x.strip() for x in page.rstrip(';').replace("\"", "").split(";")]
diff --git a/pyload/plugins/hooks/UnSkipOnFail.py b/pyload/plugins/hooks/UnSkipOnFail.py
new file mode 100644
index 000000000..fd3b35a0a
--- /dev/null
+++ b/pyload/plugins/hooks/UnSkipOnFail.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+from os.path import basename
+
+from pyload.PyFile import PyFile
+from pyload.plugins.Hook import Hook
+from pyload.utils import fs_encode
+
+
+class UnSkipOnFail(Hook):
+ __name__ = "UnSkipOnFail"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("activated", "bool", "Activated", True)]
+
+ __description__ = """When a download fails, restart skipped duplicates"""
+ __author_name__ = "hagg"
+ __author_mail__ = None
+
+
+ def downloadFailed(self, pyfile):
+ pyfile_name = basename(pyfile.name)
+ pid = pyfile.package().id
+ msg = 'look for skipped duplicates for %s (pid:%s)...'
+ self.logInfo(msg % (pyfile_name, pid))
+ dups = self.findDuplicates(pyfile)
+ for link in dups:
+ # check if link is "skipped"(=4)
+ if link.status == 4:
+ lpid = link.packageID
+ self.logInfo('restart "%s" (pid:%s)...' % (pyfile_name, lpid))
+ self.setLinkStatus(link, "queued")
+
+ def findDuplicates(self, pyfile):
+ """ Search all packages for duplicate links to "pyfile".
+ Duplicates are links that would overwrite "pyfile".
+ To test on duplicity the package-folder and link-name
+ of twolinks are compared (basename(link.name)).
+ So this method returns a list of all links with equal
+ package-folders and filenames as "pyfile", but except
+ the data for "pyfile" iotselöf.
+ It does MOT check the link's status.
+ """
+ dups = []
+ pyfile_name = fs_encode(basename(pyfile.name))
+ # get packages (w/o files, as most file data is useless here)
+ queue = self.core.api.getQueue()
+ for package in queue:
+ # check if package-folder equals pyfile's package folder
+ if fs_encode(package.folder) == fs_encode(pyfile.package().folder):
+ # now get packaged data w/ files/links
+ pdata = self.core.api.getPackageData(package.pid)
+ if pdata.links:
+ for link in pdata.links:
+ link_name = fs_encode(basename(link.name))
+ # check if link name collides with pdata's name
+ if link_name == pyfile_name:
+ # at last check if it is not pyfile itself
+ if link.fid != pyfile.id:
+ dups.append(link)
+ return dups
+
+ def setLinkStatus(self, link, new_status):
+ """ Change status of "link" to "new_status".
+ "link" has to be a valid FileData object,
+ "new_status" has to be a valid status name
+ (i.e. "queued" for this Plugin)
+ It creates a temporary PyFile object using
+ "link" data, changes its status, and tells
+ the core.files-manager to save its data.
+ """
+ pyfile = PyFile(self.core.files,
+ link.fid,
+ link.url,
+ link.name,
+ link.size,
+ link.status,
+ link.error,
+ link.plugin,
+ link.packageID,
+ link.order)
+ pyfile.setStatus(new_status)
+ self.core.files.save()
+ pyfile.release()
diff --git a/pyload/plugins/hooks/UnrestrictLi.py b/pyload/plugins/hooks/UnrestrictLi.py
new file mode 100644
index 000000000..1562bdf24
--- /dev/null
+++ b/pyload/plugins/hooks/UnrestrictLi.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class UnrestrictLi(MultiHoster):
+ __name__ = "UnrestrictLi"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", ""),
+ ("unloadFailing", "bool", "Revert to standard download if download fails", False),
+ ("interval", "int", "Reload interval in hours (0 to disable)", 24),
+ ("history", "bool", "Delete History", False)]
+
+ __description__ = """Unrestrict.li hook plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def getHoster(self):
+ json_data = getURL('http://unrestrict.li/api/jdownloader/hosts.php?format=json')
+ json_data = json_loads(json_data)
+
+ host_list = [element['host'] for element in json_data['result']]
+
+ return host_list
diff --git a/pyload/plugins/hooks/UpdateManager.py b/pyload/plugins/hooks/UpdateManager.py
new file mode 100644
index 000000000..ece7ca610
--- /dev/null
+++ b/pyload/plugins/hooks/UpdateManager.py
@@ -0,0 +1,281 @@
+# -*- coding: utf-8 -*-
+
+import re
+import sys
+
+from operator import itemgetter
+from os import path, remove, stat
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hook import Expose, Hook, threaded
+from pyload.utils import safe_join
+
+
+class UpdateManager(Hook):
+ __name__ = "UpdateManager"
+ __type__ = "hook"
+ __version__ = "0.35"
+
+ __config__ = [("activated", "bool", "Activated", True),
+ ("mode", "pyLoad + plugins;plugins only", "Check updates for", "pyLoad + plugins"),
+ ("interval", "int", "Check interval in hours", 8),
+ ("reloadplugins", "bool", "Monitor plugins for code changes (debug mode only)", True),
+ ("nodebugupdate", "bool", "Don't check for updates in debug mode", True)]
+
+ __description__ = """ Check for updates """
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+ event_list = ["pluginConfigChanged"]
+
+ SERVER_URL = "http://updatemanager.pyload.org"
+ MIN_INTERVAL = 3 * 60 * 60 #: 3h minimum check interval (value is in seconds)
+
+
+ def pluginConfigChanged(self, plugin, name, value):
+ if name == "interval":
+ interval = value * 60 * 60
+ if self.MIN_INTERVAL <= interval != self.interval:
+ self.core.scheduler.removeJob(self.cb)
+ self.interval = interval
+ self.initPeriodical()
+ else:
+ self.logDebug("Invalid interval value, kept current")
+ elif name == "reloadplugins":
+ if self.cb2:
+ self.core.scheduler.removeJob(self.cb2)
+ if value is True and self.core.debug:
+ self.periodical2()
+
+ def coreReady(self):
+ self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval"))
+ x = lambda: self.pluginConfigChanged(self.__name__, "reloadplugins", self.getConfig("reloadplugins"))
+ self.core.scheduler.addJob(10, x, threaded=False)
+
+ def unload(self):
+ self.pluginConfigChanged(self.__name__, "reloadplugins", False)
+
+ def setup(self):
+ self.cb2 = None
+ self.interval = self.MIN_INTERVAL
+ self.updating = False
+ self.info = {'pyload': False, 'version': None, 'plugins': False}
+ self.mtimes = {} #: store modification time for each plugin
+
+ def periodical2(self):
+ if not self.updating:
+ self.autoreloadPlugins()
+ self.cb2 = self.core.scheduler.addJob(4, self.periodical2, threaded=False)
+
+ @Expose
+ def autoreloadPlugins(self):
+ """ reload and reindex all modified plugins """
+ modules = filter(
+ lambda m: m and (m.__name__.startswith("pyload.plugins.") or
+ m.__name__.startswith("userplugins.")) and
+ m.__name__.count(".") >= 2, sys.modules.itervalues()
+ )
+
+ reloads = []
+
+ for m in modules:
+ root, type, name = m.__name__.rsplit(".", 2)
+ id = (type, name)
+ if type in self.core.pluginManager.plugins:
+ f = m.__file__.replace(".pyc", ".py")
+ if not path.isfile(f):
+ continue
+
+ mtime = stat(f).st_mtime
+
+ if id not in self.mtimes:
+ self.mtimes[id] = mtime
+ elif self.mtimes[id] < mtime:
+ reloads.append(id)
+ self.mtimes[id] = mtime
+
+ return True if self.core.pluginManager.reloadPlugins(reloads) else False
+
+ def periodical(self):
+ if not self.info['pyload'] and not (self.getConfig("nodebugupdate") and self.core.debug):
+ self.updateThread()
+
+ def server_request(self):
+ try:
+ return getURL(self.SERVER_URL, get={'v': self.core.api.getServerVersion()}).splitlines()
+ except:
+ self.logWarning(_("Unable to contact server to get updates"))
+
+ @threaded
+ def updateThread(self):
+ self.updating = True
+ status = self.update(onlyplugin=self.getConfig("mode") == "plugins only")
+ if status == 2:
+ self.core.api.restart()
+ else:
+ self.updating = False
+
+ @Expose
+ def updatePlugins(self):
+ """ simple wrapper for calling plugin update quickly """
+ return self.update(onlyplugin=True)
+
+ @Expose
+ def update(self, onlyplugin=False):
+ """ check for updates """
+ data = self.server_request()
+ if not data:
+ exitcode = 0
+ elif data[0] == "None":
+ self.logInfo(_("No new pyLoad version available"))
+ updates = data[1:]
+ exitcode = self._updatePlugins(updates)
+ elif onlyplugin:
+ exitcode = 0
+ else:
+ newversion = data[0]
+ self.logInfo(_("*** New pyLoad Version %s available ***") % newversion)
+ self.logInfo(_("*** Get it here: https://github.com/pyload/pyload/releases ***"))
+ exitcode = 3
+ self.info['pyload'] = True
+ self.info['version'] = newversion
+ return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required; 3 = No plugins updated, new pyLoad version available
+
+ def _updatePlugins(self, updates):
+ """ check for plugin updates """
+
+ if self.info['plugins']:
+ return False #: plugins were already updated
+
+ updated = []
+
+ vre = re.compile(r'__version__.*=.*("|\')([0-9.]+)')
+ url = updates[0]
+ schema = updates[1].split('|')
+ if "BLACKLIST" in updates:
+ blacklist = updates[updates.index('BLACKLIST') + 1:]
+ updates = updates[2:updates.index('BLACKLIST')]
+ else:
+ blacklist = None
+ updates = updates[2:]
+
+ upgradable = sorted(map(lambda x: dict(zip(schema, x.split('|'))), updates), key=itemgetter("type", "name"))
+ for plugin in upgradable:
+ filename = plugin['name']
+ prefix = plugin['type']
+ version = plugin['version']
+
+ if filename.endswith(".pyc"):
+ name = filename[:filename.find("_")]
+ else:
+ name = filename.replace(".py", "")
+
+ #@TODO: obsolete after 0.4.10
+ if prefix.endswith("s"):
+ type = prefix[:-1]
+ else:
+ type = prefix
+
+ plugins = getattr(self.core.pluginManager, "%sPlugins" % type)
+
+ oldver = float(plugins[name]['v']) if name in plugins else None
+ newver = float(version)
+
+ if not oldver:
+ msg = "New [%(type)s] %(name)s (v%(newver)s)"
+ elif newver > oldver:
+ msg = "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)"
+ else:
+ continue
+
+ self.logInfo(_(msg) % {
+ 'type': type,
+ 'name': name,
+ 'oldver': oldver,
+ 'newver': newver,
+ })
+
+ try:
+ content = getURL(url % plugin)
+ m = vre.search(content)
+ if m and m.group(2) == version:
+ f = open(safe_join("userplugins", prefix, filename), "wb")
+ f.write(content)
+ f.close()
+ updated.append((prefix, name))
+ else:
+ raise Exception, _("Version mismatch")
+ except Exception, e:
+ self.logError(_("Error updating plugin %s") % filename, str(e))
+
+ if blacklist:
+ blacklisted = sorted(map(lambda x: (x.split('|')[0], x.split('|')[1].rsplit('.', 1)[0]), blacklist))
+
+ # Always protect UpdateManager from self-removing
+ try:
+ blacklisted.remove(("hook", "UpdateManager"))
+ except:
+ pass
+
+ removed = self.removePlugins(blacklisted)
+ for t, n in removed:
+ self.logInfo(_("Removed blacklisted plugin [%(type)s] %(name)s") % {
+ 'type': t,
+ 'name': n,
+ })
+
+ if updated:
+ reloaded = self.core.pluginManager.reloadPlugins(updated)
+ if reloaded:
+ self.logInfo(_("Plugins updated and reloaded"))
+ exitcode = 1
+ else:
+ self.logInfo(_("*** Plugins have been updated, but need a pyLoad restart to be reloaded ***"))
+ self.info['plugins'] = True
+ exitcode = 2
+ else:
+ self.logInfo(_("No plugin updates available"))
+ exitcode = 0
+
+ return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required
+
+ @Expose
+ def removePlugins(self, type_plugins):
+ """ delete plugins from disk """
+
+ if not type_plugins:
+ return
+
+ self.logDebug("Request deletion of plugins: %s" % type_plugins)
+
+ removed = []
+
+ for type, name in type_plugins:
+ err = False
+ file = name + ".py"
+
+ for root in ("userplugins", path.join(pypath, "pyload", "plugins")):
+
+ filename = safe_join(root, type, file)
+ try:
+ remove(filename)
+ except Exception, e:
+ self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e))
+ err = True
+
+ filename += "c"
+ if path.isfile(filename):
+ try:
+ if type == "hook":
+ self.manager.deactivateHook(name)
+ remove(filename)
+ except Exception, e:
+ self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e))
+ err = True
+
+ if not err:
+ id = (type, name)
+ removed.append(id)
+
+ return removed #: return a list of the plugins successfully removed
diff --git a/pyload/plugins/hooks/WindowsPhoneToastNotify.py b/pyload/plugins/hooks/WindowsPhoneToastNotify.py
new file mode 100644
index 000000000..79812cefa
--- /dev/null
+++ b/pyload/plugins/hooks/WindowsPhoneToastNotify.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+import httplib
+import time
+
+from pyload.plugins.Hook import Hook
+
+
+class WindowsPhoneToastNotify(Hook):
+ __name__ = "WindowsPhoneToastNotify"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("force", "bool", "Force even if client is connected", False),
+ ("pushId", "str", "pushId", ""),
+ ("pushUrl", "str", "pushUrl", ""),
+ ("pushTimeout", "int", "Timeout between notifications in seconds", 0)]
+
+ __description__ = """Send push notifications to Windows Phone"""
+ __author_name__ = "Andy Voigt"
+ __author_mail__ = "phone-support@hotmail.de"
+
+
+ def setup(self):
+ self.info = {}
+
+ def getXmlData(self):
+ myxml = ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> "
+ "<wp:Toast> <wp:Text1>Pyload Mobile</wp:Text1> <wp:Text2>Captcha waiting!</wp:Text2> "
+ "</wp:Toast> </wp:Notification>")
+ return myxml
+
+ def doRequest(self):
+ URL = self.getConfig("pushUrl")
+ request = self.getXmlData()
+ webservice = httplib.HTTP(URL)
+ webservice.putrequest("POST", self.getConfig("pushId"))
+ webservice.putheader("Host", URL)
+ webservice.putheader("Content-type", "text/xml")
+ webservice.putheader("X-NotificationClass", "2")
+ webservice.putheader("X-WindowsPhone-Target", "toast")
+ webservice.putheader("Content-length", "%d" % len(request))
+ webservice.endheaders()
+ webservice.send(request)
+ webservice.close()
+ self.setStorage("LAST_NOTIFY", time.time())
+
+ def newCaptchaTask(self, task):
+ if not self.getConfig("pushId") or not self.getConfig("pushUrl"):
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ if (time.time() - float(self.getStorage("LAST_NOTIFY", 0))) < self.getConf("pushTimeout"):
+ return False
+
+ self.doRequest()
diff --git a/pyload/plugins/hooks/XFileSharingPro.py b/pyload/plugins/hooks/XFileSharingPro.py
new file mode 100644
index 000000000..7478034c6
--- /dev/null
+++ b/pyload/plugins/hooks/XFileSharingPro.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hook import Hook
+
+
+class XFileSharingPro(Hook):
+ __name__ = "XFileSharingPro"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", True),
+ ("loadDefault", "bool", "Include default (built-in) hoster list", True),
+ ("includeList", "str", "Include hosters (comma separated)", ""),
+ ("excludeList", "str", "Exclude hosters (comma separated)", "")]
+
+ __description__ = """XFileSharingPro hook plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def coreReady(self):
+ self.loadPattern()
+
+ def loadPattern(self):
+ hosterList = self.getConfigSet('includeList')
+ excludeList = self.getConfigSet('excludeList')
+
+ if self.getConfig('loadDefault'):
+ hosterList |= set((
+ #WORKING HOSTERS:
+ "aieshare.com", "asixfiles.com", "banashare.com", "cyberlocker.ch", "eyesfile.co", "eyesfile.com",
+ "fileband.com", "filedwon.com", "filedownloads.org", "hipfile.com", "kingsupload.com", "mlfat4arab.com",
+ "netuploaded.com", "odsiebie.pl", "q4share.com", "ravishare.com", "uptobox.com", "verzend.be",
+ "xvidstage.com", "thefile.me", "sharesix.com", "hostingbulk.com",
+ #NOT TESTED:
+ "bebasupload.com", "boosterking.com", "divxme.com", "filevelocity.com", "glumbouploads.com",
+ "grupload.com", "heftyfile.com", "host4desi.com", "laoupload.com", "linkzhost.com", "movreel.com",
+ "rockdizfile.com", "limfile.com", "share76.com", "sharebeast.com", "sharehut.com", "sharerun.com",
+ "shareswift.com", "sharingonline.com", "6ybh-upload.com", "skipfile.com", "spaadyshare.com",
+ "space4file.com", "uploadbaz.com", "uploadc.com", "uploaddot.com", "uploadfloor.com", "uploadic.com",
+ "uploadville.com", "vidbull.com", "zalaa.com", "zomgupload.com", "kupload.org", "movbay.org",
+ "multishare.org", "omegave.org", "toucansharing.org", "uflinq.org", "banicrazy.info", "flowhot.info",
+ "upbrasil.info", "shareyourfilez.biz", "bzlink.us", "cloudcache.cc", "fileserver.cc", "farshare.to",
+ "filemaze.ws", "filehost.ws", "filestock.ru", "moidisk.ru", "4up.im", "100shared.com", "sharesix.com",
+ "thefile.me", "filenuke.com", "sharerepo.com", "mightyupload.com",
+ #WRONG FILE NAME:
+ "sendmyway.com", "upchi.co.il",
+ #NOT WORKING:
+ "amonshare.com", "imageporter.com", "file4safe.com",
+ #DOWN OR BROKEN:
+ "ddlanime.com", "fileforth.com", "loombo.com", "goldfile.eu", "putshare.com"
+ ))
+
+ hosterList -= (excludeList)
+ hosterList -= set(('', u''))
+
+ if not hosterList:
+ self.unload()
+ return
+
+ regexp = r"http://(?:[^/]*\.)?(%s)/\w{12}" % ("|".join(sorted(hosterList)).replace('.', '\.'))
+ #self.logDebug(regexp)
+
+ dict = self.core.pluginManager.hosterPlugins['XFileSharingPro']
+ dict['pattern'] = regexp
+ dict['re'] = re.compile(regexp)
+ self.logDebug("Pattern loaded - handling %d hosters" % len(hosterList))
+
+ def getConfigSet(self, option):
+ s = self.getConfig(option).lower().replace('|', ',').replace(';', ',')
+ return set([x.strip() for x in s.split(',')])
+
+ def unload(self):
+ dict = self.core.pluginManager.hosterPlugins['XFileSharingPro']
+ dict['pattern'] = r'^unmatchable$'
+ dict['re'] = re.compile(r'^unmatchable$')
diff --git a/pyload/plugins/hooks/XMPPInterface.py b/pyload/plugins/hooks/XMPPInterface.py
new file mode 100644
index 000000000..881e7f5dc
--- /dev/null
+++ b/pyload/plugins/hooks/XMPPInterface.py
@@ -0,0 +1,233 @@
+# -*- coding: utf-8 -*-
+
+from pyxmpp import streamtls
+from pyxmpp.all import JID, Message
+from pyxmpp.interface import implements
+from pyxmpp.interfaces import *
+from pyxmpp.jabber.client import JabberClient
+
+from pyload.plugins.hooks.IRCInterface import IRCInterface
+
+
+class XMPPInterface(IRCInterface, JabberClient):
+ __name__ = "XMPPInterface"
+ __type__ = "hook"
+ __version__ = "0.11"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("jid", "str", "Jabber ID", "user@exmaple-jabber-server.org"),
+ ("pw", "str", "Password", ""),
+ ("tls", "bool", "Use TLS", False),
+ ("owners", "str", "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"),
+ ("info_file", "bool", "Inform about every file finished", False),
+ ("info_pack", "bool", "Inform about every package finished", True),
+ ("captcha", "bool", "Send captcha requests", True)]
+
+ __description__ = """Connect to jabber and let owner perform different tasks"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ implements(IMessageHandlersProvider)
+
+ def __init__(self, core, manager):
+ IRCInterface.__init__(self, core, manager)
+
+ self.jid = JID(self.getConfig("jid"))
+ password = self.getConfig("pw")
+
+ # if bare JID is provided add a resource -- it is required
+ if not self.jid.resource:
+ self.jid = JID(self.jid.node, self.jid.domain, "pyLoad")
+
+ if self.getConfig("tls"):
+ tls_settings = streamtls.TLSSettings(require=True, verify_peer=False)
+ auth = ("sasl:PLAIN", "sasl:DIGEST-MD5")
+ else:
+ tls_settings = None
+ auth = ("sasl:DIGEST-MD5", "digest")
+
+ # setup client with provided connection information
+ # and identity data
+ JabberClient.__init__(self, self.jid, password,
+ disco_name="pyLoad XMPP Client", disco_type="bot",
+ tls_settings=tls_settings, auth_methods=auth)
+
+ self.interface_providers = [
+ VersionHandler(self),
+ self,
+ ]
+
+ def coreReady(self):
+ self.new_package = {}
+
+ self.start()
+
+ def packageFinished(self, pypack):
+ try:
+ if self.getConfig("info_pack"):
+ self.announce(_("Package finished: %s") % pypack.name)
+ except:
+ pass
+
+ def downloadFinished(self, pyfile):
+ try:
+ if self.getConfig("info_file"):
+ self.announce(
+ _("Download finished: %(name)s @ %(plugin)s") % {"name": pyfile.name, "plugin": pyfile.pluginname})
+ except:
+ pass
+
+ def run(self):
+ # connect to IRC etc.
+ self.connect()
+ try:
+ self.loop()
+ except Exception, ex:
+ self.logError("pyLoad XMPP: %s" % str(ex))
+
+ def stream_state_changed(self, state, arg):
+ """This one is called when the state of stream connecting the component
+ to a server changes. This will usually be used to let the user
+ know what is going on."""
+ self.logDebug("pyLoad XMPP: *** State changed: %s %r ***" % (state, arg))
+
+ def disconnected(self):
+ self.logDebug("pyLoad XMPP: Client was disconnected")
+
+ def stream_closed(self, stream):
+ self.logDebug("pyLoad XMPP: Stream was closed | %s" % stream)
+
+ def stream_error(self, err):
+ self.logDebug("pyLoad XMPP: Stream Error: %s" % err)
+
+ def get_message_handlers(self):
+ """Return list of (message_type, message_handler) tuples.
+
+ The handlers returned will be called when matching message is received
+ in a client session."""
+ return [("normal", self.message)]
+
+ def message(self, stanza):
+ """Message handler for the component."""
+ subject = stanza.get_subject()
+ body = stanza.get_body()
+ t = stanza.get_type()
+ self.logDebug(u'pyLoad XMPP: Message from %s received.' % (unicode(stanza.get_from(),)))
+ self.logDebug(u'pyLoad XMPP: Body: %s Subject: %s Type: %s' % (body, subject, t))
+
+ if t == "headline":
+ # 'headline' messages should never be replied to
+ return True
+ if subject:
+ subject = u"Re: " + subject
+
+ to_jid = stanza.get_from()
+ from_jid = stanza.get_to()
+
+ #j = JID()
+ to_name = to_jid.as_utf8()
+ from_name = from_jid.as_utf8()
+
+ names = self.getConfig("owners").split(";")
+
+ if to_name in names or to_jid.node + "@" + to_jid.domain in names:
+ messages = []
+
+ trigger = "pass"
+ args = None
+
+ try:
+ temp = body.split()
+ trigger = temp[0]
+ if len(temp) > 1:
+ args = temp[1:]
+ except:
+ pass
+
+ handler = getattr(self, "event_%s" % trigger, self.event_pass)
+ try:
+ res = handler(args)
+ for line in res:
+ m = Message(
+ to_jid=to_jid,
+ from_jid=from_jid,
+ stanza_type=stanza.get_type(),
+ subject=subject,
+ body=line)
+
+ messages.append(m)
+ except Exception, e:
+ self.logError("pyLoad XMPP: " + repr(e))
+
+ return messages
+
+ else:
+ return True
+
+ def response(self, msg, origin=""):
+ return self.announce(msg)
+
+ def announce(self, message):
+ """ send message to all owners"""
+ for user in self.getConfig("owners").split(";"):
+ self.logDebug("pyLoad XMPP: Send message to %s" % user)
+
+ to_jid = JID(user)
+
+ m = Message(from_jid=self.jid,
+ to_jid=to_jid,
+ stanza_type="chat",
+ body=message)
+
+ stream = self.get_stream()
+ if not stream:
+ self.connect()
+ stream = self.get_stream()
+
+ stream.send(m)
+
+ def beforeReconnecting(self, ip):
+ self.disconnect()
+
+ def afterReconnecting(self, ip):
+ self.connect()
+
+
+class VersionHandler(object):
+ """Provides handler for a version query.
+
+ This class will answer version query and announce 'jabber:iq:version' namespace
+ in the client's disco#info results."""
+
+ implements(IIqHandlersProvider, IFeaturesProvider)
+
+ def __init__(self, client):
+ """Just remember who created this."""
+ self.client = client
+
+ def get_features(self):
+ """Return namespace which should the client include in its reply to a
+ disco#info query."""
+ return ["jabber:iq:version"]
+
+ def get_iq_get_handlers(self):
+ """Return list of tuples (element_name, namespace, handler) describing
+ handlers of <iq type='get'/> stanzas"""
+ return [("query", "jabber:iq:version", self.get_version)]
+
+ def get_iq_set_handlers(self):
+ """Return empty list, as this class provides no <iq type='set'/> stanza handler."""
+ return []
+
+ def get_version(self, iq):
+ """Handler for jabber:iq:version queries.
+
+ jabber:iq:version queries are not supported directly by PyXMPP, so the
+ XML node is accessed directly through the libxml2 API. This should be
+ used very carefully!"""
+ iq = iq.make_result_response()
+ q = iq.new_query("jabber:iq:version")
+ q.newTextChild(q.ns(), "name", "Echo component")
+ q.newTextChild(q.ns(), "version", "1.0")
+ return iq
diff --git a/pyload/plugins/hooks/ZeveraCom.py b/pyload/plugins/hooks/ZeveraCom.py
new file mode 100644
index 000000000..155143f64
--- /dev/null
+++ b/pyload/plugins/hooks/ZeveraCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.MultiHoster import MultiHoster
+
+
+class ZeveraCom(MultiHoster):
+ __name__ = "ZeveraCom"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("activated", "bool", "Activated", False),
+ ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "")]
+
+ __description__ = """Real-Debrid.com hook plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def getHoster(self):
+ page = getURL("http://www.zevera.com/jDownloader.ashx?cmd=gethosters")
+ return [x.strip() for x in page.replace("\"", "").split(",")]
diff --git a/module/plugins/hooks/__init__.py b/pyload/plugins/hooks/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/hooks/__init__.py
+++ b/pyload/plugins/hooks/__init__.py
diff --git a/pyload/plugins/hoster/AlldebridCom.py b/pyload/plugins/hoster/AlldebridCom.py
new file mode 100644
index 000000000..1b115f19e
--- /dev/null
+++ b/pyload/plugins/hoster/AlldebridCom.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import randrange
+from urllib import unquote
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import parseFileSize
+
+
+class AlldebridCom(Hoster):
+ __name__ = "AlldebridCom"
+ __type__ = "hoster"
+ __version__ = "0.34"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?alldebrid\..*'
+
+ __description__ = """Alldebrid.com hoster plugin"""
+ __author_name__ = "Andy Voigt"
+ __author_mail__ = "spamsales@online.de"
+
+
+ def getFilename(self, url):
+ try:
+ name = unquote(url.rsplit("/", 1)[1])
+ except IndexError:
+ name = "Unknown_Filename..."
+ if name.endswith("..."): # incomplete filename, append random stuff
+ name += "%s.tmp" % randrange(100, 999)
+ return name
+
+ def setup(self):
+ self.chunkLimit = 16
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid")
+ self.fail("No AllDebrid account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ password = self.getPassword().splitlines()
+ password = "" if not password else password[0]
+
+ url = "http://www.alldebrid.com/service.php?link=%s&json=true&pw=%s" % (pyfile.url, password)
+ page = self.load(url)
+ data = json_loads(page)
+
+ self.logDebug("Json data: %s" % str(data))
+
+ if data['error']:
+ if data['error'] == "This link isn't available on the hoster website.":
+ self.offline()
+ else:
+ self.logWarning(data['error'])
+ self.tempOffline()
+ else:
+ if pyfile.name and not pyfile.name.endswith('.tmp'):
+ pyfile.name = data['filename']
+ pyfile.size = parseFileSize(data['filesize'])
+ new_url = data['link']
+
+ if self.getConfig("https"):
+ new_url = new_url.replace("http://", "https://")
+ else:
+ new_url = new_url.replace("https://", "http://")
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: %s" % new_url)
+
+ if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):
+ #only use when name wasnt already set
+ pyfile.name = self.getFilename(new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload({"error": "<title>An error occured while processing your request</title>",
+ "empty": re.compile(r"^$")})
+
+ if check == "error":
+ self.retry(wait_time=60, reason="An error occured while generating link.")
+ elif check == "empty":
+ self.retry(wait_time=60, reason="Downloaded File was empty.")
diff --git a/pyload/plugins/hoster/BasePlugin.py b/pyload/plugins/hoster/BasePlugin.py
new file mode 100644
index 000000000..55cdf5b88
--- /dev/null
+++ b/pyload/plugins/hoster/BasePlugin.py
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+
+from re import match, search
+from urllib import unquote
+from urlparse import urlparse
+
+from pyload.network.HTTPRequest import BadHeader
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import html_unescape, remove_chars
+
+
+class BasePlugin(Hoster):
+ __name__ = "BasePlugin"
+ __type__ = "hoster"
+ __version__ = "0.20"
+
+ __pattern__ = r'^unmatchable$'
+
+ __description__ = """Base Plugin when any other didnt fit"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ """main function"""
+
+ #debug part, for api exerciser
+ if pyfile.url.startswith("DEBUG_API"):
+ self.multiDL = False
+ return
+
+ # self.__name__ = "NetloadIn"
+ # pyfile.name = "test"
+ # self.html = self.load("http://localhost:9000/short")
+ # self.download("http://localhost:9000/short")
+ # self.api = self.load("http://localhost:9000/short")
+ # self.decryptCaptcha("http://localhost:9000/captcha")
+ #
+ # if pyfile.url == "79":
+ # self.core.api.addPackage("test", [str(i) for i in xrange(80)], 1)
+ #
+ # return
+ if pyfile.url.startswith("http"):
+
+ try:
+ self.downloadFile(pyfile)
+ except BadHeader, e:
+ if e.code in (401, 403):
+ self.logDebug("Auth required")
+
+ account = self.core.accountManager.getAccountPlugin('Http')
+ servers = [x['login'] for x in account.getAllAccounts()]
+ server = urlparse(pyfile.url).netloc
+
+ if server in servers:
+ self.logDebug("Logging on to %s" % server)
+ self.req.addAuth(account.accounts[server]['password'])
+ else:
+ for pwd in pyfile.package().password.splitlines():
+ if ":" in pwd:
+ self.req.addAuth(pwd.strip())
+ break
+ else:
+ self.fail(_("Authorization required (username:password)"))
+
+ self.downloadFile(pyfile)
+ else:
+ raise
+
+ else:
+ self.fail("No Plugin matched and not a downloadable url.")
+
+ def downloadFile(self, pyfile):
+ url = pyfile.url
+
+ for _ in xrange(5):
+ header = self.load(url, just_header=True)
+
+ # self.load does not raise a BadHeader on 404 responses, do it here
+ if 'code' in header and header['code'] == 404:
+ raise BadHeader(404)
+
+ if 'location' in header:
+ self.logDebug("Location: " + header['location'])
+ base = match(r'https?://[^/]+', url).group(0)
+ if header['location'].startswith("http"):
+ url = header['location']
+ elif header['location'].startswith("/"):
+ url = base + unquote(header['location'])
+ else:
+ url = '%s/%s' % (base, unquote(header['location']))
+ else:
+ break
+
+ name = html_unescape(unquote(urlparse(url).path.split("/")[-1]))
+
+ if 'content-disposition' in header:
+ self.logDebug("Content-Disposition: " + header['content-disposition'])
+ m = search("filename(?P<type>=|\*=(?P<enc>.+)'')(?P<name>.*)", header['content-disposition'])
+ if m:
+ disp = m.groupdict()
+ self.logDebug(disp)
+ if not disp['enc']:
+ disp['enc'] = 'utf-8'
+ name = remove_chars(disp['name'], "\"';").strip()
+ name = unicode(unquote(name), disp['enc'])
+
+ if not name:
+ name = url
+ pyfile.name = name
+ self.logDebug("Filename: %s" % pyfile.name)
+ self.download(url, disposition=True)
diff --git a/pyload/plugins/hoster/BayfilesCom.py b/pyload/plugins/hoster/BayfilesCom.py
new file mode 100644
index 000000000..ea4bd3ca5
--- /dev/null
+++ b/pyload/plugins/hoster/BayfilesCom.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import time
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class BayfilesCom(SimpleHoster):
+ __name__ = "BayfilesCom"
+ __type__ = "hoster"
+ __version__ = "0.07"
+
+ __pattern__ = r'https?://(?:www\.)?bayfiles\.(com|net)/file/(?P<ID>[a-zA-Z0-9]+/[a-zA-Z0-9]+/[^/]+)'
+
+ __description__ = """Bayfiles.com hoster plugin"""
+ __author_name__ = ("zoidberg", "Walter Purcaro")
+ __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com")
+
+ FILE_INFO_PATTERN = r'<p title="(?P<N>[^"]+)">[^<]*<strong>(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B</strong></p>'
+ OFFLINE_PATTERN = r'(<p>The requested file could not be found.</p>|<title>404 Not Found</title>)'
+
+ WAIT_PATTERN = r'>Your IP [0-9.]* has recently downloaded a file\. Upgrade to premium or wait (\d+) minutes\.<'
+ VARS_PATTERN = r'var vfid = (\d+);\s*var delay = (\d+);'
+ FREE_LINK_PATTERN = r"javascript:window.location.href = '([^']+)';"
+ PREMIUM_LINK_PATTERN = r'(?:<a class="highlighted-btn" href="|(?=http://s\d+\.baycdn\.com/dl/))(.*?)"'
+
+
+ def handleFree(self):
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ self.wait(int(m.group(1)) * 60)
+ self.retry()
+
+ # Get download token
+ m = re.search(self.VARS_PATTERN, self.html)
+ if m is None:
+ self.parseError('VARS')
+ vfid, delay = m.groups()
+
+ response = json_loads(self.load('http://bayfiles.com/ajax_download', get={
+ "_": time() * 1000,
+ "action": "startTimer",
+ "vfid": vfid}, decode=True))
+
+ if not "token" in response or not response['token']:
+ self.fail('No token')
+
+ self.wait(int(delay))
+
+ self.html = self.load('http://bayfiles.com/ajax_download', get={
+ "token": response['token'],
+ "action": "getLink",
+ "vfid": vfid})
+
+ # Get final link and download
+ m = re.search(self.FREE_LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("Free link")
+ self.startDownload(m.group(1))
+
+ def handlePremium(self):
+ m = re.search(self.PREMIUM_LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("Premium link")
+ self.startDownload(m.group(1))
+
+ def startDownload(self, url):
+ self.logDebug("%s URL: %s" % ("Premium" if self.premium else "Free", url))
+ self.download(url)
+ # check download
+ check = self.checkDownload({
+ "waitforfreeslots": re.compile(r"<title>BayFiles</title>"),
+ "notfound": re.compile(r"<title>404 Not Found</title>")
+ })
+ if check == "waitforfreeslots":
+ self.retry(30, 5 * 60, "Wait for free slot")
+ elif check == "notfound":
+ self.retry(30, 5 * 60, "404 Not found")
+
+
+getInfo = create_getInfo(BayfilesCom)
diff --git a/pyload/plugins/hoster/BezvadataCz.py b/pyload/plugins/hoster/BezvadataCz.py
new file mode 100644
index 000000000..8b989da67
--- /dev/null
+++ b/pyload/plugins/hoster/BezvadataCz.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class BezvadataCz(SimpleHoster):
+ __name__ = "BezvadataCz"
+ __type__ = "hoster"
+ __version__ = "0.24"
+
+ __pattern__ = r'http://(?:www\.)?bezvadata.cz/stahnout/.*'
+
+ __description__ = """BezvaData.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<p><b>Soubor: (?P<N>[^<]+)</b></p>'
+ FILE_SIZE_PATTERN = r'<li><strong>Velikost:</strong> (?P<S>[^<]+)</li>'
+ OFFLINE_PATTERN = r'<title>BezvaData \| Soubor nenalezen</title>'
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+
+ def handleFree(self):
+ #download button
+ m = re.search(r'<a class="stahnoutSoubor".*?href="(.*?)"', self.html)
+ if m is None:
+ self.parseError("page1 URL")
+ url = "http://bezvadata.cz%s" % m.group(1)
+
+ #captcha form
+ self.html = self.load(url)
+ self.checkErrors()
+ for _ in xrange(5):
+ action, inputs = self.parseHtmlForm('frm-stahnoutFreeForm')
+ if not inputs:
+ self.parseError("FreeForm")
+
+ m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html)
+ if m is None:
+ self.parseError("captcha img")
+
+ #captcha image is contained in html page as base64encoded data but decryptCaptcha() expects image url
+ self.load, proper_load = self.loadcaptcha, self.load
+ try:
+ inputs['captcha'] = self.decryptCaptcha(m.group(1), imgtype='png')
+ finally:
+ self.load = proper_load
+
+ if '<img src="data:image/png;base64' in self.html:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("No valid captcha code entered")
+
+ #download url
+ self.html = self.load("http://bezvadata.cz%s" % action, post=inputs)
+ self.checkErrors()
+ m = re.search(r'<a class="stahnoutSoubor2" href="(.*?)">', self.html)
+ if m is None:
+ self.parseError("page2 URL")
+ url = "http://bezvadata.cz%s" % m.group(1)
+ self.logDebug("DL URL %s" % url)
+
+ #countdown
+ m = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html)
+ wait_time = (int(m.group(1)) * 60 + int(m.group(2)) + 1) if m else 120
+ self.wait(wait_time, False)
+
+ self.download(url)
+
+ def checkErrors(self):
+ if 'images/button-download-disable.png' in self.html:
+ self.longWait(5 * 60, 24) # parallel dl limit
+ elif '<div class="infobox' in self.html:
+ self.tempOffline()
+
+ def loadcaptcha(self, data, *args, **kwargs):
+ return data.decode("base64")
+
+
+getInfo = create_getInfo(BezvadataCz)
diff --git a/pyload/plugins/hoster/BillionuploadsCom.py b/pyload/plugins/hoster/BillionuploadsCom.py
new file mode 100644
index 000000000..6c14d103d
--- /dev/null
+++ b/pyload/plugins/hoster/BillionuploadsCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class BillionuploadsCom(XFileSharingPro):
+ __name__ = "BillionuploadsCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?billionuploads.com/\w{12}'
+
+ __description__ = """Billionuploads.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "billionuploads.com"
+
+ FILE_NAME_PATTERN = r'<b>Filename:</b>(?P<N>.*?)<br>'
+ FILE_SIZE_PATTERN = r'<b>Size:</b>(?P<S>.*?)<br>'
+
+
+getInfo = create_getInfo(BillionuploadsCom)
diff --git a/pyload/plugins/hoster/BitshareCom.py b/pyload/plugins/hoster/BitshareCom.py
new file mode 100644
index 000000000..897206f87
--- /dev/null
+++ b/pyload/plugins/hoster/BitshareCom.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class BitshareCom(SimpleHoster):
+ __name__ = "BitshareCom"
+ __type__ = "hoster"
+ __version__ = "0.50"
+
+ __pattern__ = r'http://(?:www\.)?bitshare\.com/(files/(?P<id1>[a-zA-Z0-9]+)(/(?P<name>.*?)\.html)?|\?f=(?P<id2>[a-zA-Z0-9]+))'
+
+ __description__ = """Bitshare.com hoster plugin"""
+ __author_name__ = ("Paul King", "fragonib")
+ __author_mail__ = ("", "fragonib[AT]yahoo[DOT]es")
+
+ FILE_INFO_PATTERN = r'Downloading (?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)</h1>'
+ OFFLINE_PATTERN = r'(>We are sorry, but the requested file was not found in our database|>Error - File not available<|The file was deleted either by the uploader, inactivity or due to copyright claim)'
+
+ FILE_AJAXID_PATTERN = r'var ajaxdl = "(.*?)";'
+ CAPTCHA_KEY_PATTERN = r'http://api\.recaptcha\.net/challenge\?k=(.*?) '
+ TRAFFIC_USED_UP = r'Your Traffic is used up for today. Upgrade to premium to continue!'
+
+
+ def setup(self):
+ self.req.cj.setCookie(".bitshare.com", "language_selection", "EN")
+ self.multiDL = self.premium
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ if self.premium:
+ self.account.relogin(self.user)
+
+ self.pyfile = pyfile
+
+ # File id
+ m = re.match(self.__pattern__, pyfile.url)
+ self.file_id = max(m.group('id1'), m.group('id2'))
+ self.logDebug("File id is [%s]" % self.file_id)
+
+ # Load main page
+ self.html = self.load(pyfile.url, ref=False, decode=True)
+
+ # Check offline
+ if re.search(self.OFFLINE_PATTERN, self.html):
+ self.offline()
+
+ # Check Traffic used up
+ if re.search(self.TRAFFIC_USED_UP, self.html):
+ self.logInfo("Your Traffic is used up for today")
+ self.wait(30 * 60, True)
+ self.retry()
+
+ # File name
+ m = re.match(self.__pattern__, pyfile.url)
+ name1 = m.group('name') if m else None
+ m = re.search(self.FILE_INFO_PATTERN, self.html)
+ name2 = m.group('N') if m else None
+ pyfile.name = max(name1, name2)
+
+ # Ajax file id
+ self.ajaxid = re.search(self.FILE_AJAXID_PATTERN, self.html).group(1)
+ self.logDebug("File ajax id is [%s]" % self.ajaxid)
+
+ # This may either download our file or forward us to an error page
+ url = self.getDownloadUrl()
+ self.logDebug("Downloading file with url [%s]" % url)
+ self.download(url)
+
+ check = self.checkDownload({"404": ">404 Not Found<", "Error": ">Error occured<"})
+ if check == "404":
+ self.retry(3, 60, 'Error 404')
+ elif check == "error":
+ self.retry(5, 5 * 60, "Bitshare host : Error occured")
+
+ def getDownloadUrl(self):
+ # Return location if direct download is active
+ if self.premium:
+ header = self.load(self.pyfile.url, cookies=True, just_header=True)
+ if 'location' in header:
+ return header['location']
+
+ # Get download info
+ self.logDebug("Getting download info")
+ response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
+ post={"request": "generateID", "ajaxid": self.ajaxid})
+ self.handleErrors(response, ':')
+ parts = response.split(":")
+ filetype = parts[0]
+ wait = int(parts[1])
+ captcha = int(parts[2])
+ self.logDebug("Download info [type: '%s', waiting: %d, captcha: %d]" % (filetype, wait, captcha))
+
+ # Waiting
+ if wait > 0:
+ self.logDebug("Waiting %d seconds." % wait)
+ if wait < 120:
+ self.wait(wait, False)
+ else:
+ self.wait(wait - 55, True)
+ self.retry()
+
+ # Resolve captcha
+ if captcha == 1:
+ self.logDebug("File is captcha protected")
+ id = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1)
+ # Try up to 3 times
+ for i in xrange(3):
+ self.logDebug("Resolving ReCaptcha with key [%s], round %d" % (id, i + 1))
+ recaptcha = ReCaptcha(self)
+ challenge, code = recaptcha.challenge(id)
+ response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
+ post={"request": "validateCaptcha", "ajaxid": self.ajaxid,
+ "recaptcha_challenge_field": challenge, "recaptcha_response_field": code})
+ if self.handleCaptchaErrors(response):
+ break
+
+ # Get download URL
+ self.logDebug("Getting download url")
+ response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
+ post={"request": "getDownloadURL", "ajaxid": self.ajaxid})
+ self.handleErrors(response, '#')
+ url = response.split("#")[-1]
+
+ return url
+
+ def handleErrors(self, response, separator):
+ self.logDebug("Checking response [%s]" % response)
+ if "ERROR:Session timed out" in response:
+ self.retry()
+ elif "ERROR" in response:
+ msg = response.split(separator)[-1]
+ self.fail(msg)
+
+ def handleCaptchaErrors(self, response):
+ self.logDebug("Result of captcha resolving [%s]" % response)
+ if "SUCCESS" in response:
+ self.correctCaptcha()
+ return True
+ elif "ERROR:SESSION ERROR" in response:
+ self.retry()
+ self.logDebug("Wrong captcha")
+ self.invalidCaptcha()
+
+
+getInfo = create_getInfo(BitshareCom)
diff --git a/pyload/plugins/hoster/BoltsharingCom.py b/pyload/plugins/hoster/BoltsharingCom.py
new file mode 100644
index 000000000..196e801e4
--- /dev/null
+++ b/pyload/plugins/hoster/BoltsharingCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class BoltsharingCom(DeadHoster):
+ __name__ = "BoltsharingCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?boltsharing.com/\w{12}'
+
+ __description__ = """Boltsharing.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(BoltsharingCom)
diff --git a/pyload/plugins/hoster/CatShareNet.py b/pyload/plugins/hoster/CatShareNet.py
new file mode 100644
index 000000000..415ec2379
--- /dev/null
+++ b/pyload/plugins/hoster/CatShareNet.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class CatShareNet(SimpleHoster):
+ __name__ = "CatShareNet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?catshare.net/\w{16}.*'
+
+ __description__ = """CatShare.net hoster plugin"""
+ __author_name__ = "z00nx"
+ __author_mail__ = "z00nx0@gmail.com"
+
+ FILE_INFO_PATTERN = r'<h3 class="pull-left"[^>]+>(?P<N>.*)</h3>\s+<h3 class="pull-right"[^>]+>(?P<S>.*)</h3>'
+ OFFLINE_PATTERN = r'Podany plik zosta'
+
+ SECONDS_PATTERN = r'var\s+count\s+=\s+(\d+);'
+
+ RECAPTCHA_KEY = "6Lfln9kSAAAAANZ9JtHSOgxUPB9qfDFeLUI_QMEy"
+
+
+ def handleFree(self):
+ m = re.search(self.SECONDS_PATTERN, self.html)
+ seconds = int(m.group(1))
+ self.logDebug("Seconds found", seconds)
+ self.wait(seconds + 1)
+ recaptcha = ReCaptcha(self)
+ challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code}
+ self.download(self.pyfile.url, post=post_data)
+ check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")})
+ if check == "html":
+ self.logDebug("Wrong captcha entered")
+ self.invalidCaptcha()
+ self.retry()
+
+
+getInfo = create_getInfo(CatShareNet)
diff --git a/pyload/plugins/hoster/CloudzerNet.py b/pyload/plugins/hoster/CloudzerNet.py
new file mode 100644
index 000000000..88313acee
--- /dev/null
+++ b/pyload/plugins/hoster/CloudzerNet.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class CloudzerNet(DeadHoster):
+ __name__ = "CloudzerNet"
+ __type__ = "hoster"
+ __version__ = "0.05"
+
+ __pattern__ = r'https?://(?:www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)\w+'
+
+ __description__ = """Cloudzer.net hoster plugin"""
+ __author_name__ = ("gs", "z00nx", "stickell")
+ __author_mail__ = ("I-_-I-_-I@web.de", "z00nx0@gmail.com", "l.stickell@yahoo.it")
+
+
+getInfo = create_getInfo(CloudzerNet)
diff --git a/pyload/plugins/hoster/CramitIn.py b/pyload/plugins/hoster/CramitIn.py
new file mode 100644
index 000000000..6c5142d96
--- /dev/null
+++ b/pyload/plugins/hoster/CramitIn.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class CramitIn(XFileSharingPro):
+ __name__ = "CramitIn"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?cramit.in/\w{12}'
+
+ __description__ = """Cramit.in hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "cramit.in"
+
+ FILE_INFO_PATTERN = r'<span class=t2>\s*(?P<N>.*?)</span>.*?<small>\s*\((?P<S>.*?)\)'
+ LINK_PATTERN = r'href="(http://cramit.in/file_download/.*?)"'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+
+
+getInfo = create_getInfo(CramitIn)
diff --git a/pyload/plugins/hoster/CrockoCom.py b/pyload/plugins/hoster/CrockoCom.py
new file mode 100644
index 000000000..c1e941553
--- /dev/null
+++ b/pyload/plugins/hoster/CrockoCom.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class CrockoCom(SimpleHoster):
+ __name__ = "CrockoCom"
+ __type__ = "hoster"
+ __version__ = "0.16"
+
+ __pattern__ = r'http://(?:www\.)?(crocko|easy-share).com/\w+'
+
+ __description__ = """Crocko hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<span class="fz24">Download:\s*<strong>(?P<N>.*)'
+ FILE_SIZE_PATTERN = r'<span class="tip1"><span class="inner">(?P<S>[^<]+)</span></span>'
+ OFFLINE_PATTERN = r"<h1>Sorry,<br />the page you're looking for <br />isn't here.</h1>|File not found"
+
+ CAPTCHA_URL_PATTERN = re.compile(r"u='(/file_contents/captcha/\w+)';\s*w='(\d+)';")
+ CAPTCHA_KEY_PATTERN = re.compile(r'Recaptcha.create\("([^"]+)"')
+
+ FORM_PATTERN = r'<form method="post" action="([^"]+)">(.*?)</form>'
+ FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>'
+
+ FILE_NAME_REPLACEMENTS = [(r'<[^>]*>', '')]
+
+
+ def handleFree(self):
+ if "You need Premium membership to download this file." in self.html:
+ self.fail("You need Premium membership to download this file.")
+
+ for _ in xrange(5):
+ m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
+ if m:
+ url, wait_time = 'http://crocko.com' + m.group(1), m.group(2)
+ self.wait(wait_time)
+ self.html = self.load(url)
+ else:
+ break
+
+ m = re.search(self.CAPTCHA_KEY_PATTERN, self.html)
+ if m is None:
+ self.parseError('Captcha KEY')
+ captcha_key = m.group(1)
+
+ m = re.search(self.FORM_PATTERN, self.html, re.DOTALL)
+ if m is None:
+ self.parseError('ACTION')
+ action, form = m.groups()
+ inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
+
+ recaptcha = ReCaptcha(self)
+
+ for _ in xrange(5):
+ inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key)
+ self.download(action, post=inputs)
+
+ check = self.checkDownload({
+ "captcha_err": self.CAPTCHA_KEY_PATTERN
+ })
+
+ if check == "captcha_err":
+ self.invalidCaptcha()
+ else:
+ break
+ else:
+ self.fail('No valid captcha solution received')
+
+
+getInfo = create_getInfo(CrockoCom)
diff --git a/pyload/plugins/hoster/CyberlockerCh.py b/pyload/plugins/hoster/CyberlockerCh.py
new file mode 100644
index 000000000..7c97deedb
--- /dev/null
+++ b/pyload/plugins/hoster/CyberlockerCh.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class CyberlockerCh(DeadHoster):
+ __name__ = "CyberlockerCh"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?cyberlocker\.ch/\w+'
+
+ __description__ = """Cyberlocker.ch hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+getInfo = create_getInfo(CyberlockerCh)
diff --git a/pyload/plugins/hoster/CzshareCom.py b/pyload/plugins/hoster/CzshareCom.py
new file mode 100644
index 000000000..0e6fab15a
--- /dev/null
+++ b/pyload/plugins/hoster/CzshareCom.py
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://czshare.com/5278880/random.bin
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from pyload.utils import parseFileSize
+
+
+class CzshareCom(SimpleHoster):
+ __name__ = "CzshareCom"
+ __type__ = "hoster"
+ __version__ = "0.94"
+
+ __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download.php\?).*'
+
+ __description__ = """CZshare.com hoster plugin, now Sdilej.cz"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>'
+ FILE_SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B\s*</div>'
+ OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">'
+
+ FILE_SIZE_REPLACEMENTS = [(' ', '')]
+ FILE_URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://sdilej.cz/\1/x/')]
+
+ SH_CHECK_TRAFFIC = True
+
+ FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>'
+ FREE_FORM_PATTERN = r'<form action="download.php" method="post">\s*<img src="captcha.php" id="captcha" />(.*?)</form>'
+ PREMIUM_FORM_PATTERN = r'<form action="/profi_down.php" method="post">(.*?)</form>'
+ FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]+)"[^>]*/>'
+ MULTIDL_PATTERN = r"<p><font color='red'>Z[^<]*PROFI.</font></p>"
+ USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([0-9., ]+)([kKMG]i?B)</strong>\s*</div><!-- .credit -->'
+
+
+ def checkTrafficLeft(self):
+ # check if user logged in
+ m = re.search(self.USER_CREDIT_PATTERN, self.html)
+ if m is None:
+ self.account.relogin(self.user)
+ self.html = self.load(self.pyfile.url, cookies=True, decode=True)
+ m = re.search(self.USER_CREDIT_PATTERN, self.html)
+ if m is None:
+ return False
+
+ # check user credit
+ try:
+ credit = parseFileSize(m.group(1).replace(' ', ''), m.group(2))
+ self.logInfo("Premium download for %i KiB of Credit" % (self.pyfile.size / 1024))
+ self.logInfo("User %s has %i KiB left" % (self.user, credit / 1024))
+ if credit < self.pyfile.size:
+ self.logInfo("Not enough credit to download file %s" % self.pyfile.name)
+ return False
+ except Exception, e:
+ # let's continue and see what happens...
+ self.logError('Parse error (CREDIT): %s' % e)
+
+ return True
+
+ def handlePremium(self):
+ # parse download link
+ try:
+ form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.DOTALL).group(1)
+ inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
+ except Exception, e:
+ self.logError("Parse error (FORM): %s" % e)
+ self.resetAccount()
+
+ # download the file, destination is determined by pyLoad
+ self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True)
+ self.checkDownloadedFile()
+
+ def handleFree(self):
+ # get free url
+ m = re.search(self.FREE_URL_PATTERN, self.html)
+ if m is None:
+ self.parseError('Free URL')
+ parsed_url = "http://sdilej.cz" + m.group(1)
+ self.logDebug("PARSED_URL:" + parsed_url)
+
+ # get download ticket and parse html
+ self.html = self.load(parsed_url, cookies=True, decode=True)
+ if re.search(self.MULTIDL_PATTERN, self.html):
+ self.longWait(5 * 60, 12)
+
+ try:
+ form = re.search(self.FREE_FORM_PATTERN, self.html, re.DOTALL).group(1)
+ inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
+ self.pyfile.size = int(inputs['size'])
+ except Exception, e:
+ self.logError(e)
+ self.parseError('Form')
+
+ # get and decrypt captcha
+ captcha_url = 'http://sdilej.cz/captcha.php'
+ for _ in xrange(5):
+ inputs['captchastring2'] = self.decryptCaptcha(captcha_url)
+ self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True)
+ if u"<li>ZadanÜ ověřovací kód nesouhlasí!</li>" in self.html:
+ self.invalidCaptcha()
+ elif re.search(self.MULTIDL_PATTERN, self.html):
+ self.longWait(5 * 60, 12)
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("No valid captcha code entered")
+
+ m = re.search("countdown_number = (\d+);", self.html)
+ self.setWait(int(m.group(1)) if m else 50)
+
+ # download the file, destination is determined by pyLoad
+ self.logDebug("WAIT URL", self.req.lastEffectiveURL)
+ m = re.search("free_wait.php\?server=(.*?)&(.*)", self.req.lastEffectiveURL)
+ if m is None:
+ self.parseError('Download URL')
+
+ url = "http://%s/download.php?%s" % (m.group(1), m.group(2))
+
+ self.wait()
+ self.download(url)
+ self.checkDownloadedFile()
+
+ def checkDownloadedFile(self):
+ # check download
+ check = self.checkDownload({
+ "tempoffline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"),
+ "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"),
+ "multi_dl": re.compile(self.MULTIDL_PATTERN),
+ "captcha_err": "<li>ZadanÜ ověřovací kód nesouhlasí!</li>"
+ })
+
+ if check == "tempoffline":
+ self.fail("File not available - try later")
+ if check == "credit":
+ self.resetAccount()
+ elif check == "multi_dl":
+ self.longWait(5 * 60, 12)
+ elif check == "captcha_err":
+ self.invalidCaptcha()
+ self.retry()
+
+
+getInfo = create_getInfo(CzshareCom)
diff --git a/pyload/plugins/hoster/DailymotionCom.py b/pyload/plugins/hoster/DailymotionCom.py
new file mode 100644
index 000000000..0ae4c697b
--- /dev/null
+++ b/pyload/plugins/hoster/DailymotionCom.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.PyFile import statusMap
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+
+
+def getInfo(urls):
+ result = [] #: [ .. (name, size, status, url) .. ]
+ regex = re.compile(DailymotionCom.__pattern__)
+ apiurl = "https://api.dailymotion.com/video/"
+ request = {"fields": "access_error,status,title"}
+ for url in urls:
+ id = regex.search(url).group("ID")
+ page = getURL(apiurl + id, get=request)
+ info = json_loads(page)
+
+ if "title" in info:
+ name = info['title'] + ".mp4"
+ else:
+ name = url
+
+ if "error" in info or info['access_error']:
+ status = "offline"
+ else:
+ status = info['status']
+ if status in ("ready", "published"):
+ status = "online"
+ elif status in ("waiting", "processing"):
+ status = "temp. offline"
+ else:
+ status = "offline"
+
+ result.append((name, 0, statusMap[status], url))
+ return result
+
+
+class DailymotionCom(Hoster):
+ __name__ = "DailymotionCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'https?://(?:www\.)?dailymotion\.com/.*?video/(?P<ID>[\w^_]+)'
+ __config__ = [("quality", "Lowest;LD 144p;LD 240p;SD 384p;HQ 480p;HD 720p;HD 1080p;Highest", "Quality", "Highest")]
+
+ __description__ = """Dailymotion.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def getStreams(self):
+ streams = []
+ for result in re.finditer(r"\"(?P<URL>http:\\/\\/www.dailymotion.com\\/cdn\\/H264-(?P<QF>.*?)\\.*?)\"",
+ self.html):
+ url = result.group("URL")
+ qf = result.group("QF")
+ link = url.replace("\\", "")
+ quality = tuple(int(x) for x in qf.split("x"))
+ streams.append((quality, link))
+ return sorted(streams, key=lambda x: x[0][::-1])
+
+ def getQuality(self):
+ q = self.getConfig("quality")
+ if q == "Lowest":
+ quality = 0
+ elif q == "Highest":
+ quality = -1
+ else:
+ quality = int(q.rsplit(" ")[1][:-1])
+ return quality
+
+ def getLink(self, streams, quality):
+ if quality > 0:
+ for x, s in reversed([item for item in enumerate(streams)]):
+ qf = s[0][1]
+ if qf <= quality:
+ idx = x
+ break
+ else:
+ idx = 0
+ else:
+ idx = quality
+
+ s = streams[idx]
+ self.logInfo("Download video quality %sx%s" % s[0])
+ return s[1]
+
+ def checkInfo(self, pyfile):
+ pyfile.name, pyfile.size, pyfile.status, pyfile.url = getInfo([pyfile.url])[0]
+ if pyfile.status == 1:
+ self.offline()
+ elif pyfile.status == 6:
+ self.tempOffline()
+
+ def process(self, pyfile):
+ self.checkInfo(pyfile)
+
+ id = re.match(self.__pattern__, pyfile.url).group("ID")
+ self.html = self.load("http://www.dailymotion.com/embed/video/" + id, decode=True)
+
+ streams = self.getStreams()
+ quality = self.getQuality()
+ link = self.getLink(streams, quality)
+
+ self.download(link)
diff --git a/pyload/plugins/hoster/DataHu.py b/pyload/plugins/hoster/DataHu.py
new file mode 100644
index 000000000..68162c203
--- /dev/null
+++ b/pyload/plugins/hoster/DataHu.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://data.hu/get/6381232/random.bin
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class DataHu(SimpleHoster):
+ __name__ = "DataHu"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?data.hu/get/\w+'
+
+ __description__ = """Data.hu hoster plugin"""
+ __author_name__ = ("crash", "stickell")
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_INFO_PATTERN = ur'<title>(?P<N>.*) \((?P<S>[^)]+)\) let\xf6lt\xe9se</title>'
+ OFFLINE_PATTERN = ur'Az adott f\xe1jl nem l\xe9tezik'
+ LINK_PATTERN = r'<div class="download_box_button"><a href="([^"]+)">'
+
+
+ def handleFree(self):
+ self.resumeDownload = True
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ url = m.group(1)
+ self.logDebug('Direct link: ' + url)
+ else:
+ self.parseError('Unable to get direct link')
+
+ self.download(url, disposition=True)
+
+
+getInfo = create_getInfo(DataHu)
diff --git a/pyload/plugins/hoster/DataportCz.py b/pyload/plugins/hoster/DataportCz.py
new file mode 100644
index 000000000..2d87397df
--- /dev/null
+++ b/pyload/plugins/hoster/DataportCz.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class DataportCz(SimpleHoster):
+ __name__ = "DataportCz"
+ __type__ = "hoster"
+ __version__ = "0.37"
+
+ __pattern__ = r'http://(?:www\.)?dataport.cz/file/(.*)'
+
+ __description__ = """Dataport.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<span itemprop="name">(?P<N>[^<]+)</span>'
+ FILE_SIZE_PATTERN = r'<td class="fil">Velikost</td>\s*<td>(?P<S>[^<]+)</td>'
+ OFFLINE_PATTERN = r'<h2>Soubor nebyl nalezen</h2>'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.dataport.cz/file/\1')]
+
+ CAPTCHA_URL_PATTERN = r'<section id="captcha_bg">\s*<img src="(.*?)"'
+ FREE_SLOTS_PATTERN = ur'Počet volnÜch slotů: <span class="darkblue">(\d+)</span><br />'
+
+
+ def handleFree(self):
+ captchas = {"1": "jkeG", "2": "hMJQ", "3": "vmEK", "4": "ePQM", "5": "blBd"}
+
+ for _ in xrange(60):
+ action, inputs = self.parseHtmlForm('free_download_form')
+ self.logDebug(action, inputs)
+ if not action or not inputs:
+ self.parseError('free_download_form')
+
+ if "captchaId" in inputs and inputs['captchaId'] in captchas:
+ inputs['captchaCode'] = captchas[inputs['captchaId']]
+ else:
+ self.parseError('captcha')
+
+ self.html = self.download("http://www.dataport.cz%s" % action, post=inputs)
+
+ check = self.checkDownload({"captcha": 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");',
+ "slot": 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'})
+ if check == "captcha":
+ self.parseError('invalid captcha')
+ elif check == "slot":
+ self.logDebug("No free slots - wait 60s and retry")
+ self.wait(60, False)
+ self.html = self.load(self.pyfile.url, decode=True)
+ continue
+ else:
+ break
+
+
+create_getInfo(DataportCz)
diff --git a/pyload/plugins/hoster/DateiTo.py b/pyload/plugins/hoster/DateiTo.py
new file mode 100644
index 000000000..1e8ca3614
--- /dev/null
+++ b/pyload/plugins/hoster/DateiTo.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class DateiTo(SimpleHoster):
+ __name__ = "DateiTo"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P<ID>\w+)\.html'
+
+ __description__ = """Datei.to hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'Dateiname:</td>\s*<td colspan="2"><strong>(?P<N>.*?)</'
+ FILE_SIZE_PATTERN = r'Dateigr&ouml;&szlig;e:</td>\s*<td colspan="2">(?P<S>.*?)</'
+ OFFLINE_PATTERN = r'>Datei wurde nicht gefunden<|>Bitte wÀhle deine Datei aus... <'
+ PARALELL_PATTERN = r'>Du lÀdst bereits eine Datei herunter<'
+
+ WAIT_PATTERN = r'countdown\({seconds: (\d+)'
+ DATA_PATTERN = r'url: "(.*?)", data: "(.*?)",'
+ RECAPTCHA_KEY_PATTERN = r'Recaptcha.create\("(.*?)"'
+
+
+ def handleFree(self):
+ url = 'http://datei.to/ajax/download.php'
+ data = {'P': 'I', 'ID': self.file_info['ID']}
+
+ recaptcha = ReCaptcha(self)
+
+ for _ in xrange(10):
+ self.logDebug("URL", url, "POST", data)
+ self.html = self.load(url, post=data)
+ self.checkErrors()
+
+ if url.endswith('download.php') and 'P' in data:
+ if data['P'] == 'I':
+ self.doWait()
+
+ elif data['P'] == 'IV':
+ break
+
+ m = re.search(self.DATA_PATTERN, self.html)
+ if m is None:
+ self.parseError('data')
+ url = 'http://datei.to/' + m.group(1)
+ data = dict(x.split('=') for x in m.group(2).split('&'))
+
+ if url.endswith('recaptcha.php'):
+ m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
+ recaptcha_key = m.group(1) if m else "6LdBbL8SAAAAAI0vKUo58XRwDd5Tu_Ze1DA7qTao"
+
+ data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key)
+
+ else:
+ self.fail('Too bad...')
+
+ download_url = self.html
+ self.logDebug('Download URL', download_url)
+ self.download(download_url)
+
+ def checkErrors(self):
+ m = re.search(self.PARALELL_PATTERN, self.html)
+ if m:
+ m = re.search(self.WAIT_PATTERN, self.html)
+ wait_time = int(m.group(1)) if m else 30
+ self.wait(wait_time + 1, False)
+ self.retry()
+
+ def doWait(self):
+ m = re.search(self.WAIT_PATTERN, self.html)
+ wait_time = int(m.group(1)) if m else 30
+
+ self.load('http://datei.to/ajax/download.php', post={'P': 'Ads'})
+ self.wait(wait_time + 1, False)
+
+
+getInfo = create_getInfo(DateiTo)
diff --git a/pyload/plugins/hoster/DdlstorageCom.py b/pyload/plugins/hoster/DdlstorageCom.py
new file mode 100644
index 000000000..8b477ade6
--- /dev/null
+++ b/pyload/plugins/hoster/DdlstorageCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class DdlstorageCom(DeadHoster):
+ __name__ = "DdlstorageCom"
+ __type__ = "hoster"
+ __version__ = "1.02"
+
+ __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/\w+'
+
+ __description__ = """DDLStorage.com hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+getInfo = create_getInfo(DdlstorageCom)
diff --git a/pyload/plugins/hoster/DebridItaliaCom.py b/pyload/plugins/hoster/DebridItaliaCom.py
new file mode 100644
index 000000000..74879e6e5
--- /dev/null
+++ b/pyload/plugins/hoster/DebridItaliaCom.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class DebridItaliaCom(Hoster):
+ __name__ = "DebridItaliaCom"
+ __type__ = "hoster"
+ __version__ = "0.05"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?debriditalia\.com'
+
+ __description__ = """Debriditalia.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia")
+ self.fail("No DebridItalia account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ url = "http://debriditalia.com/linkgen2.php?xjxfun=convertiLink&xjxargs[]=S<![CDATA[%s]]>" % pyfile.url
+ page = self.load(url)
+ self.logDebug("XML data: %s" % page)
+
+ if 'File not available' in page:
+ self.fail('File not available')
+ else:
+ new_url = re.search(r'<a href="(?:[^"]+)">(?P<direct>[^<]+)</a>', page).group('direct')
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: %s" % new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload({"empty": re.compile(r"^$")})
+
+ if check == "empty":
+ self.retry(5, 2 * 60, "Empty file downloaded")
diff --git a/pyload/plugins/hoster/DepositfilesCom.py b/pyload/plugins/hoster/DepositfilesCom.py
new file mode 100644
index 000000000..9c0348cbd
--- /dev/null
+++ b/pyload/plugins/hoster/DepositfilesCom.py
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class DepositfilesCom(SimpleHoster):
+ __name__ = "DepositfilesCom"
+ __type__ = "hoster"
+ __version__ = "0.48"
+
+ __pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)'
+
+ __description__ = """Depositfiles.com hoster plugin"""
+ __author_name__ = ("spoob", "zoidberg", "Walter Purcaro")
+ __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "vuolter@gmail.com")
+
+ FILE_NAME_PATTERN = r'<script type="text/javascript">eval\( unescape\(\'(?P<N>.*?)\''
+ FILE_SIZE_PATTERN = r': <b>(?P<S>[0-9.]+)&nbsp;(?P<U>[kKMG])i?B</b>'
+ OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>'
+
+ FILE_NAME_REPLACEMENTS = [(r'\%u([0-9A-Fa-f]{4})', lambda m: unichr(int(m.group(1), 16))),
+ (r'.*<b title="(?P<N>[^"]+).*', "\g<N>")]
+ FILE_URL_REPLACEMENTS = [(__pattern__, "https://dfiles.eu/files/\g<ID>")]
+
+ SH_COOKIES = [(".dfiles.eu", "lang_current", "en")]
+
+ RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)'"
+
+ FREE_LINK_PATTERN = r'<form id="downloader_file_form" action="(http://.+?\.(dfiles\.eu|depositfiles\.com)/.+?)" method="post"'
+ PREMIUM_LINK_PATTERN = r'class="repeat"><a href="(.+?)"'
+ PREMIUM_MIRROR_PATTERN = r'class="repeat_mirror"><a href="(.+?)"'
+
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, post={"gateway_result": "1"}, cookies=True)
+
+ if re.search(r'File is checked, please try again in a minute.', self.html) is not None:
+ self.logInfo("DepositFiles.com: The file is being checked. Waiting 1 minute.")
+ self.wait(61)
+ self.retry()
+
+ wait = re.search(r'html_download_api-limit_interval\">(\d+)</span>', self.html)
+ if wait:
+ wait_time = int(wait.group(1))
+ self.logInfo("%s: Traffic used up. Waiting %d seconds." % (self.__name__, wait_time))
+ self.wait(wait_time, True)
+ self.retry()
+
+ wait = re.search(r'>Try in (\d+) minutes or use GOLD account', self.html)
+ if wait:
+ wait_time = int(wait.group(1))
+ self.logInfo("%s: All free slots occupied. Waiting %d minutes." % (self.__name__, wait_time))
+ self.setWait(wait_time * 60, False)
+
+ wait = re.search(r'Please wait (\d+) sec', self.html)
+ if wait:
+ self.setWait(int(wait.group(1)))
+
+ m = re.search(r"var fid = '(\w+)';", self.html)
+ if m is None:
+ self.retry(wait_time=5)
+ params = {'fid': m.group(1)}
+ self.logDebug("FID: %s" % params['fid'])
+
+ captcha_key = '6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m'
+ m = re.search(self.RECAPTCHA_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ self.logDebug("CAPTCHA_KEY: %s" % captcha_key)
+
+ self.wait()
+ recaptcha = ReCaptcha(self)
+
+ for _ in xrange(5):
+ self.html = self.load("https://dfiles.eu/get_file.php", get=params)
+
+ if '<input type=button value="Continue" onclick="check_recaptcha' in self.html:
+ if not captcha_key:
+ self.parseError('Captcha key')
+ if 'response' in params:
+ self.invalidCaptcha()
+ params['challenge'], params['response'] = recaptcha.challenge(captcha_key)
+ self.logDebug(params)
+ continue
+
+ m = re.search(self.FREE_LINK_PATTERN, self.html)
+ if m:
+ if 'response' in params:
+ self.correctCaptcha()
+ link = unquote(m.group(1))
+ self.logDebug("LINK: %s" % link)
+ break
+ else:
+ self.parseError('Download link')
+ else:
+ self.fail('No valid captcha response received')
+
+ try:
+ self.download(link, disposition=True)
+ except:
+ self.retry(wait_time=60)
+
+ def handlePremium(self):
+ self.html = self.load(self.pyfile.url, cookies=self.SH_COOKIES)
+
+ if '<span class="html_download_api-gold_traffic_limit">' in self.html:
+ self.logWarning("Download limit reached")
+ self.retry(25, 60 * 60, "Download limit reached")
+ elif 'onClick="show_gold_offer' in self.html:
+ self.account.relogin(self.user)
+ self.retry()
+ else:
+ link = re.search(self.PREMIUM_LINK_PATTERN, self.html)
+ mirror = re.search(self.PREMIUM_MIRROR_PATTERN, self.html)
+ if link:
+ dlink = link.group(1)
+ elif mirror:
+ dlink = mirror.group(1)
+ else:
+ self.parseError("No direct download link or mirror found")
+ self.download(dlink, disposition=True)
+
+
+getInfo = create_getInfo(DepositfilesCom)
diff --git a/pyload/plugins/hoster/DlFreeFr.py b/pyload/plugins/hoster/DlFreeFr.py
new file mode 100644
index 000000000..387e11efc
--- /dev/null
+++ b/pyload/plugins/hoster/DlFreeFr.py
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+
+import pycurl
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.network.Browser import Browser
+from pyload.network.CookieJar import CookieJar
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns
+
+
+class CustomBrowser(Browser):
+
+ def __init__(self, bucket=None, options={}):
+ Browser.__init__(self, bucket, options)
+
+ def load(self, *args, **kwargs):
+ post = kwargs.get("post")
+
+ if post is None and len(args) > 2:
+ post = args[2]
+
+ if post:
+ self.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
+ self.http.c.setopt(pycurl.POST, 1)
+ self.http.c.setopt(pycurl.CUSTOMREQUEST, "POST")
+ else:
+ self.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
+ self.http.c.setopt(pycurl.POST, 0)
+ self.http.c.setopt(pycurl.CUSTOMREQUEST, "GET")
+
+ return Browser.load(self, *args, **kwargs)
+
+
+class AdYouLike:
+ """
+ Class to support adyoulike captcha service
+ """
+ ADYOULIKE_INPUT_PATTERN = r'Adyoulike.create\((.*?)\);'
+ ADYOULIKE_CALLBACK = r'Adyoulike.g._jsonp_5579316662423138'
+ ADYOULIKE_CHALLENGE_PATTERN = ADYOULIKE_CALLBACK + r'\((.*?)\)'
+
+ def __init__(self, plugin, engine="adyoulike"):
+ self.plugin = plugin
+ self.engine = engine
+
+ def challenge(self, html):
+ adyoulike_data_string = None
+ m = re.search(self.ADYOULIKE_INPUT_PATTERN, html)
+ if m:
+ adyoulike_data_string = m.group(1)
+ else:
+ self.plugin.fail("Can't read AdYouLike input data")
+
+ # {"adyoulike":{"key":"P~zQ~O0zV0WTiAzC-iw0navWQpCLoYEP"},
+ # "all":{"element_id":"ayl_private_cap_92300","lang":"fr","env":"prod"}}
+ ayl_data = json_loads(adyoulike_data_string)
+
+ res = self.plugin.load(
+ r'http://api-ayl.appspot.com/challenge?key=%(ayl_key)s&env=%(ayl_env)s&callback=%(callback)s' % {
+ "ayl_key": ayl_data[self.engine]['key'], "ayl_env": ayl_data['all']['env'],
+ "callback": self.ADYOULIKE_CALLBACK})
+
+ m = re.search(self.ADYOULIKE_CHALLENGE_PATTERN, res)
+ challenge_string = None
+ if m:
+ challenge_string = m.group(1)
+ else:
+ self.plugin.fail("Invalid AdYouLike challenge")
+ challenge_data = json_loads(challenge_string)
+
+ return ayl_data, challenge_data
+
+ def result(self, ayl, challenge):
+ """
+ Adyoulike.g._jsonp_5579316662423138
+ ({"translations":{"fr":{"instructions_visual":"Recopiez « Soonnight » ci-dessous :"}},
+ "site_under":true,"clickable":true,"pixels":{"VIDEO_050":[],"DISPLAY":[],"VIDEO_000":[],"VIDEO_100":[],
+ "VIDEO_025":[],"VIDEO_075":[]},"medium_type":"image/adyoulike",
+ "iframes":{"big":"<iframe src=\"http://www.soonnight.com/campagn.html\" scrolling=\"no\"
+ height=\"250\" width=\"300\" frameborder=\"0\"></iframe>"},"shares":{},"id":256,
+ "token":"e6QuI4aRSnbIZJg02IsV6cp4JQ9~MjA1","formats":{"small":{"y":300,"x":0,"w":300,"h":60},
+ "big":{"y":0,"x":0,"w":300,"h":250},"hover":{"y":440,"x":0,"w":300,"h":60}},
+ "tid":"SqwuAdxT1EZoi4B5q0T63LN2AkiCJBg5"})
+ """
+ response = None
+ try:
+ instructions_visual = challenge['translations'][ayl['all']['lang']]['instructions_visual']
+ m = re.search(u".*«(.*)».*", instructions_visual)
+ if m:
+ response = m.group(1).strip()
+ else:
+ self.plugin.fail("Can't parse instructions visual")
+ except KeyError:
+ self.plugin.fail("No instructions visual")
+
+ #TODO: Supports captcha
+
+ if not response:
+ self.plugin.fail("AdYouLike result failed")
+
+ return {"_ayl_captcha_engine": self.engine,
+ "_ayl_env": ayl['all']['env'],
+ "_ayl_tid": challenge['tid'],
+ "_ayl_token_challenge": challenge['token'],
+ "_ayl_response": response}
+
+
+class DlFreeFr(SimpleHoster):
+ __name__ = "DlFreeFr"
+ __type__ = "hoster"
+ __version__ = "0.25"
+
+ __pattern__ = r'http://(?:www\.)?dl\.free\.fr/([a-zA-Z0-9]+|getfile\.pl\?file=/[a-zA-Z0-9]+)'
+
+ __description__ = """Dl.free.fr hoster plugin"""
+ __author_name__ = ("the-razer", "zoidberg", "Toilal")
+ __author_mail__ = ("daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", "toilal.dev@gmail.com")
+
+ FILE_NAME_PATTERN = r'Fichier:</td>\s*<td[^>]*>(?P<N>[^>]*)</td>'
+ FILE_SIZE_PATTERN = r'Taille:</td>\s*<td[^>]*>(?P<S>[\d.]+[KMG])o'
+ OFFLINE_PATTERN = r"Erreur 404 - Document non trouv|Fichier inexistant|Le fichier demand&eacute; n'a pas &eacute;t&eacute; trouv&eacute;"
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+ self.limitDL = 5
+ self.chunkLimit = 1
+
+ def init(self):
+ factory = self.core.requestFactory
+ self.req = CustomBrowser(factory.bucket, factory.getOptions())
+
+ def process(self, pyfile):
+ self.req.setCookieJar(None)
+
+ pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
+ valid_url = pyfile.url
+ headers = self.load(valid_url, just_header=True)
+
+ self.html = None
+ if headers.get('code') == 302:
+ valid_url = headers.get('location')
+ headers = self.load(valid_url, just_header=True)
+
+ if headers.get('code') == 200:
+ content_type = headers.get('content-type')
+ if content_type and content_type.startswith("text/html"):
+ # Undirect acces to requested file, with a web page providing it (captcha)
+ self.html = self.load(valid_url)
+ self.handleFree()
+ else:
+ # Direct access to requested file for users using free.fr as Internet Service Provider.
+ self.download(valid_url, disposition=True)
+ elif headers.get('code') == 404:
+ self.offline()
+ else:
+ self.fail("Invalid return code: " + str(headers.get('code')))
+
+ def handleFree(self):
+ action, inputs = self.parseHtmlForm('action="getfile.pl"')
+
+ adyoulike = AdYouLike(self)
+ ayl, challenge = adyoulike.challenge(self.html)
+ result = adyoulike.result(ayl, challenge)
+ inputs.update(result)
+
+ self.load("http://dl.free.fr/getfile.pl", post=inputs)
+ headers = self.getLastHeaders()
+ if headers.get("code") == 302 and "set-cookie" in headers and "location" in headers:
+ m = re.search("(.*?)=(.*?); path=(.*?); domain=(.*?)", headers.get("set-cookie"))
+ cj = CookieJar(__name__)
+ if m:
+ cj.setCookie(m.group(4), m.group(1), m.group(2), m.group(3))
+ else:
+ self.fail("Cookie error")
+ location = headers.get("location")
+ self.req.setCookieJar(cj)
+ self.download(location, disposition=True)
+ else:
+ self.fail("Invalid response")
+
+ def getLastHeaders(self):
+ #parse header
+ header = {"code": self.req.code}
+ for line in self.req.http.header.splitlines():
+ line = line.strip()
+ if not line or ":" not in line:
+ continue
+
+ key, none, value = line.partition(":")
+ key = key.lower().strip()
+ value = value.strip()
+
+ if key in header:
+ if type(header[key]) == list:
+ header[key].append(value)
+ else:
+ header[key] = [header[key], value]
+ else:
+ header[key] = value
+ return header
+
+
+getInfo = create_getInfo(DlFreeFr)
diff --git a/pyload/plugins/hoster/DuploadOrg.py b/pyload/plugins/hoster/DuploadOrg.py
new file mode 100644
index 000000000..8c2430c87
--- /dev/null
+++ b/pyload/plugins/hoster/DuploadOrg.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class DuploadOrg(XFileSharingPro):
+ __name__ = "DuploadOrg"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?dupload\.org/\w{12}'
+
+ __description__ = """Dupload.grg hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ HOSTER_NAME = "dupload.org"
+
+ FILE_INFO_PATTERN = r'<h3[^>]*>(?P<N>.+) \((?P<S>[\d.]+) (?P<U>\w+)\)</h3>'
+
+
+getInfo = create_getInfo(DuploadOrg)
diff --git a/pyload/plugins/hoster/EasybytezCom.py b/pyload/plugins/hoster/EasybytezCom.py
new file mode 100644
index 000000000..7b1d8881f
--- /dev/null
+++ b/pyload/plugins/hoster/EasybytezCom.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class EasybytezCom(XFileSharingPro):
+ __name__ = "EasybytezCom"
+ __type__ = "hoster"
+ __version__ = "0.18"
+
+ __pattern__ = r'http://(?:www\.)?easybytez.com/(\w+).*'
+
+ __description__ = """Easybytez.com hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ HOSTER_NAME = "easybytez.com"
+
+ FILE_INFO_PATTERN = r'<span class="name">(?P<N>.+)</span><br>\s*<span class="size">(?P<S>[^<]+)</span>'
+ OFFLINE_PATTERN = r'<h1>File not available</h1>'
+
+ LINK_PATTERN = r'(http://(\w+\.(easyload|easybytez|zingload)\.(com|to)|\d+\.\d+\.\d+\.\d+)/files/\d+/\w+/[^"<]+)'
+ OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)'
+ ERROR_PATTERN = r'(?:class=["\']err["\'][^>]*>|<Center><b>)(.*?)</'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+
+
+getInfo = create_getInfo(EasybytezCom)
diff --git a/pyload/plugins/hoster/EdiskCz.py b/pyload/plugins/hoster/EdiskCz.py
new file mode 100644
index 000000000..4c532b33f
--- /dev/null
+++ b/pyload/plugins/hoster/EdiskCz.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class EdiskCz(SimpleHoster):
+ __name__ = "EdiskCz"
+ __type__ = "hoster"
+ __version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?edisk.(cz|sk|eu)/(stahni|sk/stahni|en/download)/.*'
+
+ __description__ = """Edisk.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<span class="fl" title="(?P<N>[^"]+)">\s*.*?\((?P<S>[0-9.]*) (?P<U>[kKMG])i?B\)</h1></span>'
+ OFFLINE_PATTERN = r'<h3>This file does not exist due to one of the following:</h3><ul><li>'
+
+ ACTION_PATTERN = r'/en/download/(\d+/.*\.html)'
+ LINK_PATTERN = r'http://.*edisk.cz.*\.html'
+
+
+ def setup(self):
+ self.multiDL = False
+
+ def process(self, pyfile):
+ url = re.sub("/(stahni|sk/stahni)/", "/en/download/", pyfile.url)
+
+ self.logDebug('URL:' + url)
+
+ m = re.search(self.ACTION_PATTERN, url)
+ if m is None:
+ self.parseError("ACTION")
+ action = m.group(1)
+
+ self.html = self.load(url, decode=True)
+ self.getFileInfo()
+
+ self.html = self.load(re.sub("/en/download/", "/en/download-slow/", url))
+
+ url = self.load(re.sub("/en/download/", "/x-download/", url), post={
+ "action": action
+ })
+
+ if not re.match(self.LINK_PATTERN, url):
+ self.fail("Unexpected server response")
+
+ self.download(url)
+
+
+getInfo = create_getInfo(EdiskCz)
diff --git a/pyload/plugins/hoster/EgoFilesCom.py b/pyload/plugins/hoster/EgoFilesCom.py
new file mode 100644
index 000000000..7d59b274c
--- /dev/null
+++ b/pyload/plugins/hoster/EgoFilesCom.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class EgoFilesCom(SimpleHoster):
+ __name__ = "EgoFilesCom"
+ __type__ = "hoster"
+ __version__ = "0.15"
+
+ __pattern__ = r'https?://(?:www\.)?egofiles.com/(\w+)'
+
+ __description__ = """Egofiles.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_INFO_PATTERN = r'<div class="down-file">\s+(?P<N>[^\t]+)\s+<div class="file-properties">\s+(File size|Rozmiar): (?P<S>[\w.]+) (?P<U>\w+) \|'
+ OFFLINE_PATTERN = r'(File size|Rozmiar): 0 KB'
+ WAIT_TIME_PATTERN = r'For next free download you have to wait <strong>((?P<m>\d*)m)? ?((?P<s>\d+)s)?</strong>'
+ LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>'
+ RECAPTCHA_KEY = "6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX"
+
+
+ def setup(self):
+ # Set English language
+ self.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True)
+
+ def process(self, pyfile):
+ if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+ self.getFileInfo()
+
+ # Wait time between free downloads
+ if 'For next free download you have to wait' in self.html:
+ m = re.search(self.WAIT_TIME_PATTERN, self.html).groupdict('0')
+ waittime = int(m['m']) * 60 + int(m['s'])
+ self.wait(waittime, True)
+
+ downloadURL = r''
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response}
+ self.html = self.load(self.pyfile.url, post=post_data, decode=True)
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.logInfo('Wrong captcha')
+ self.invalidCaptcha()
+ elif hasattr(m, 'group'):
+ downloadURL = m.group('link')
+ self.correctCaptcha()
+ break
+ else:
+ self.fail('Unknown error - Plugin may be out of date')
+
+ if not downloadURL:
+ self.fail("No Download url retrieved/all captcha attempts failed")
+
+ self.download(downloadURL, disposition=True)
+
+ def handlePremium(self):
+ header = self.load(self.pyfile.url, just_header=True)
+ if 'location' in header:
+ self.logDebug('DIRECT LINK from header: ' + header['location'])
+ self.download(header['location'])
+ else:
+ self.html = self.load(self.pyfile.url, decode=True)
+ self.getFileInfo()
+ m = re.search(r'<a href="(?P<link>[^"]+)">Download ></a>', self.html)
+ if m is None:
+ self.parseError('Unable to detect direct download url')
+ else:
+ self.logDebug('DIRECT URL from html: ' + m.group('link'))
+ self.download(m.group('link'), disposition=True)
+
+
+getInfo = create_getInfo(EgoFilesCom)
diff --git a/pyload/plugins/hoster/EpicShareNet.py b/pyload/plugins/hoster/EpicShareNet.py
new file mode 100644
index 000000000..a4a6008ae
--- /dev/null
+++ b/pyload/plugins/hoster/EpicShareNet.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://epicshare.net/fch3m2bk6ihp/BigBuckBunny_320x180.mp4.html
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class EpicShareNet(XFileSharingPro):
+ __name__ = "EpicShareNet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?epicshare\.net/\w{12}'
+
+ __description__ = """EpicShare.net hoster plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ HOSTER_NAME = "epicshare.net"
+
+ OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
+ FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>'
+
+
+getInfo = create_getInfo(EpicShareNet)
diff --git a/pyload/plugins/hoster/EuroshareEu.py b/pyload/plugins/hoster/EuroshareEu.py
new file mode 100644
index 000000000..d7c172594
--- /dev/null
+++ b/pyload/plugins/hoster/EuroshareEu.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class EuroshareEu(SimpleHoster):
+ __name__ = "EuroshareEu"
+ __type__ = "hoster"
+ __version__ = "0.25"
+
+ __pattern__ = r'http://(?:www\.)?euroshare.(eu|sk|cz|hu|pl)/file/.*'
+
+ __description__ = """Euroshare.eu hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<span style="float: left;"><strong>(?P<N>.+?)</strong> \((?P<S>.+?)\)</span>'
+ OFFLINE_PATTERN = ur'<h2>S.bor sa nena.iel</h2>|Poşadovaná stránka neexistuje!'
+
+ FREE_URL_PATTERN = r'<a href="(/file/\d+/[^/]*/download/)"><div class="downloadButton"'
+ ERR_PARDL_PATTERN = r'<h2>Prebieha s.ahovanie</h2>|<p>Naraz je z jednej IP adresy mo.n. s.ahova. iba jeden s.bor'
+ ERR_NOT_LOGGED_IN_PATTERN = r'href="/customer-zone/login/"'
+
+ FILE_URL_REPLACEMENTS = [(r"(http://[^/]*\.)(sk|cz|hu|pl)/", r"\1eu/")]
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = self.premium
+ self.req.setOption("timeout", 120)
+
+ def handlePremium(self):
+ if self.ERR_NOT_LOGGED_IN_PATTERN in self.html:
+ self.account.relogin(self.user)
+ self.retry(reason="User not logged in")
+
+ self.download(self.pyfile.url.rstrip('/') + "/download/")
+
+ check = self.checkDownload({"login": re.compile(self.ERR_NOT_LOGGED_IN_PATTERN),
+ "json": re.compile(r'\{"status":"error".*?"message":"(.*?)"')})
+ if check == "login" or (check == "json" and self.lastCheck.group(1) == "Access token expired"):
+ self.account.relogin(self.user)
+ self.retry(reason="Access token expired")
+ elif check == "json":
+ self.fail(self.lastCheck.group(1))
+
+ def handleFree(self):
+ if re.search(self.ERR_PARDL_PATTERN, self.html) is not None:
+ self.longWait(5 * 60, 12)
+
+ m = re.search(self.FREE_URL_PATTERN, self.html)
+ if m is None:
+ self.parseError("Parse error (URL)")
+ parsed_url = "http://euroshare.eu%s" % m.group(1)
+ self.logDebug("URL", parsed_url)
+ self.download(parsed_url, disposition=True)
+
+ check = self.checkDownload({"multi_dl": re.compile(self.ERR_PARDL_PATTERN)})
+ if check == "multi_dl":
+ self.longWait(5 * 60, 12)
+
+
+getInfo = create_getInfo(EuroshareEu)
diff --git a/pyload/plugins/hoster/ExtabitCom.py b/pyload/plugins/hoster/ExtabitCom.py
new file mode 100644
index 000000000..38479410e
--- /dev/null
+++ b/pyload/plugins/hoster/ExtabitCom.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class ExtabitCom(SimpleHoster):
+ __name__ = "ExtabitCom"
+ __type__ = "hoster"
+ __version__ = "0.6"
+
+ __pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)'
+
+ __description__ = """Extabit.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<th>File:</th>\s*<td class="col-fileinfo">\s*<div title="(?P<N>[^"]+)">'
+ FILE_SIZE_PATTERN = r'<th>Size:</th>\s*<td class="col-fileinfo">(?P<S>[^<]+)</td>'
+ OFFLINE_PATTERN = r'>File not found<'
+ TEMP_OFFLINE_PATTERN = r'>(File is temporary unavailable|No download mirror)<'
+
+ LINK_PATTERN = r'[\'"](http://guest\d+\.extabit\.com/[a-z0-9]+/.*?)[\'"]'
+
+
+ def handleFree(self):
+ if r">Only premium users can download this file" in self.html:
+ self.fail("Only premium users can download this file")
+
+ m = re.search(r"Next free download from your ip will be available in <b>(\d+)\s*minutes", self.html)
+ if m:
+ self.wait(int(m.group(1)) * 60, True)
+ elif "The daily downloads limit from your IP is exceeded" in self.html:
+ self.logWarning("You have reached your daily downloads limit for today")
+ self.wait(secondsToMidnight(gmt=2), True)
+
+ self.logDebug("URL: " + self.req.http.lastEffectiveURL)
+ m = re.match(self.__pattern__, self.req.http.lastEffectiveURL)
+ fileID = m.group('ID') if m else self.file_info('ID')
+
+ m = re.search(r'recaptcha/api/challenge\?k=(\w+)', self.html)
+ if m:
+ recaptcha = ReCaptcha(self)
+ captcha_key = m.group(1)
+
+ for _ in xrange(5):
+ get_data = {"type": "recaptcha"}
+ get_data['challenge'], get_data['capture'] = recaptcha.challenge(captcha_key)
+ response = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data))
+ if "ok" in response:
+ self.correctCaptcha()
+ break
+ else:
+ self.invalidCaptcha()
+ else:
+ self.fail("Invalid captcha")
+ else:
+ self.parseError('Captcha')
+
+ if not "href" in response:
+ self.parseError('JSON')
+
+ self.html = self.load("http://extabit.com/file/%s%s" % (fileID, response['href']))
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('Download URL')
+ url = m.group(1)
+ self.logDebug("Download URL: " + url)
+ self.download(url)
+
+
+getInfo = create_getInfo(ExtabitCom)
diff --git a/pyload/plugins/hoster/FastixRu.py b/pyload/plugins/hoster/FastixRu.py
new file mode 100644
index 000000000..e031e3e55
--- /dev/null
+++ b/pyload/plugins/hoster/FastixRu.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import randrange
+from urllib import unquote
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+class FastixRu(Hoster):
+ __name__ = "FastixRu"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?fastix\.(ru|it)/file/(?P<ID>[a-zA-Z0-9]{24})'
+
+ __description__ = """Fastix hoster plugin"""
+ __author_name__ = "Massimo Rosamilia"
+ __author_mail__ = "max@spiritix.eu"
+
+
+ def getFilename(self, url):
+ try:
+ name = unquote(url.rsplit("/", 1)[1])
+ except IndexError:
+ name = "Unknown_Filename..."
+ if name.endswith("..."): # incomplete filename, append random stuff
+ name += "%s.tmp" % randrange(100, 999)
+ return name
+
+ def setup(self):
+ self.chunkLimit = 3
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix")
+ self.fail("No Fastix account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ api_key = self.account.getAccountData(self.user)
+ api_key = api_key['api']
+ url = "http://fastix.ru/api_v2/?apikey=%s&sub=getdirectlink&link=%s" % (api_key, pyfile.url)
+ page = self.load(url)
+ data = json_loads(page)
+ self.logDebug("Json data: %s" % str(data))
+ if "error\":true" in page:
+ self.offline()
+ else:
+ new_url = data['downloadlink']
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: %s" % new_url)
+
+ if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):
+ #only use when name wasnt already set
+ pyfile.name = self.getFilename(new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload({"error": "<title>An error occurred while processing your request</title>",
+ "empty": re.compile(r"^$")})
+
+ if check == "error":
+ self.retry(wait_time=60, reason="An error occurred while generating link.")
+ elif check == "empty":
+ self.retry(wait_time=60, reason="Downloaded File was empty.")
diff --git a/pyload/plugins/hoster/FastshareCz.py b/pyload/plugins/hoster/FastshareCz.py
new file mode 100644
index 000000000..3897a1c23
--- /dev/null
+++ b/pyload/plugins/hoster/FastshareCz.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://www.fastshare.cz/2141189/random.bin
+
+import re
+
+from urlparse import urljoin
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FastshareCz(SimpleHoster):
+ __name__ = "FastshareCz"
+ __type__ = "hoster"
+ __version__ = "0.22"
+
+ __pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+'
+
+ __description__ = """FastShare.cz hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell", "Walter Purcaro")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com")
+
+ FILE_INFO_PATTERN = r'<h1 class="dwp">(?P<N>[^<]+)</h1>\s*<div class="fileinfo">\s*Size\s*: (?P<S>\d+) (?P<U>\w+),'
+ OFFLINE_PATTERN = r'>(The file has been deleted|Requested page not found)'
+
+ FILE_URL_REPLACEMENTS = [("#.*", "")]
+
+ SH_COOKIES = [(".fastshare.cz", "lang", "en")]
+
+ FREE_URL_PATTERN = r'action=(/free/.*?)>\s*<img src="([^"]*)"><br'
+ PREMIUM_URL_PATTERN = r'(http://data\d+\.fastshare\.cz/download\.php\?id=\d+&)'
+ CREDIT_PATTERN = r' credit for '
+
+
+ def handleFree(self):
+ if "> 100% of FREE slots are full" in self.html:
+ self.retry(120, 60, "No free slots")
+
+ m = re.search(self.FREE_URL_PATTERN, self.html)
+ if m:
+ action, captcha_src = m.groups()
+ else:
+ self.parseError("Free URL")
+
+ baseurl = "http://www.fastshare.cz"
+ captcha = self.decryptCaptcha(urljoin(baseurl, captcha_src))
+ self.download(urljoin(baseurl, action), post={"code": captcha, "btn.x": 77, "btn.y": 18})
+
+ check = self.checkDownload({
+ "paralell_dl":
+ "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)",
+ "wrong_captcha": "Download for FREE"
+ })
+
+ if check == "paralell_dl":
+ self.retry(6, 10 * 60, "Paralell download")
+ elif check == "wrong_captcha":
+ self.retry(max_tries=5, reason="Wrong captcha")
+
+ def handlePremium(self):
+ header = self.load(self.pyfile.url, just_header=True)
+ if "location" in header:
+ url = header['location']
+ else:
+ self.html = self.load(self.pyfile.url)
+
+ self.getFileInfo() #
+
+ if self.CREDIT_PATTERN in self.html:
+ self.logWarning("Not enough traffic left")
+ self.resetAccount()
+ else:
+ m = re.search(self.PREMIUM_URL_PATTERN, self.html)
+ if m:
+ url = m.group(1)
+ else:
+ self.parseError("Premium URL")
+
+ self.logDebug("PREMIUM URL: " + url)
+ self.download(url, disposition=True)
+
+ check = self.checkDownload({"credit": re.compile(self.CREDIT_PATTERN)})
+ if check == "credit":
+ self.resetAccount()
+
+
+getInfo = create_getInfo(FastshareCz)
diff --git a/pyload/plugins/hoster/File4safeCom.py b/pyload/plugins/hoster/File4safeCom.py
new file mode 100644
index 000000000..4aa0e26a4
--- /dev/null
+++ b/pyload/plugins/hoster/File4safeCom.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class File4safeCom(XFileSharingPro):
+ __name__ = "File4safeCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?file4safe\.com/\w+'
+
+ __description__ = """File4safe.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ HOSTER_NAME = "file4safe.com"
+
+
+ def handlePremium(self):
+ self.req.http.lastURL = self.pyfile.url
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+ self.load(self.pyfile.url, post=self.getPostParameters(), decode=True)
+ self.header = self.req.http.header
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+
+ m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
+ if m and re.match(self.LINK_PATTERN, m.group(1)):
+ location = m.group(1).strip()
+ self.startDownload(location)
+ else:
+ self.parseError("Unable to detect premium download link")
+
+
+getInfo = create_getInfo(File4safeCom)
diff --git a/pyload/plugins/hoster/FileApeCom.py b/pyload/plugins/hoster/FileApeCom.py
new file mode 100644
index 000000000..8c6305631
--- /dev/null
+++ b/pyload/plugins/hoster/FileApeCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class FileApeCom(DeadHoster):
+ __name__ = "FileApeCom"
+ __type__ = "hoster"
+ __version__ = "0.12"
+
+ __pattern__ = r'http://(?:www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+'
+
+ __description__ = """FileApe.com hoster plugin"""
+ __author_name__ = "espes"
+ __author_mail__ = None
+
+
+getInfo = create_getInfo(FileApeCom)
diff --git a/pyload/plugins/hoster/FileParadoxIn.py b/pyload/plugins/hoster/FileParadoxIn.py
new file mode 100644
index 000000000..955a9726b
--- /dev/null
+++ b/pyload/plugins/hoster/FileParadoxIn.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class FileParadoxIn(XFileSharingPro):
+ __name__ = "FileParadoxIn"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?fileparadox\.in/\w+'
+
+ __description__ = """FileParadox.in hoster plugin"""
+ __author_name__ = "RazorWing"
+ __author_mail__ = "muppetuk1@hotmail.com"
+
+ HOSTER_NAME = "fileparadox.in"
+
+ FILE_SIZE_PATTERN = r'</font>\s*\(\s*(?P<S>[^)]+)\s*\)</font>'
+ LINK_PATTERN = r'(http://([^/]*?fileparadox.in|\d+\.\d+\.\d+\.\d+)(:\d+/d/|/files/\w+/\w+/)[^"\'<]+)'
+
+
+getInfo = create_getInfo(FileParadoxIn)
diff --git a/pyload/plugins/hoster/FileStoreTo.py b/pyload/plugins/hoster/FileStoreTo.py
new file mode 100644
index 000000000..6a2963ec2
--- /dev/null
+++ b/pyload/plugins/hoster/FileStoreTo.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FileStoreTo(SimpleHoster):
+ __name__ = "FileStoreTo"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?filestore\.to/\?d=(?P<ID>\w+)'
+
+ __description__ = """FileStore.to hoster plugin"""
+ __author_name__ = ("Walter Purcaro", "stickell")
+ __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it")
+
+ FILE_INFO_PATTERN = r'File: <span[^>]*>(?P<N>.+)</span><br />Size: (?P<S>[\d,.]+) (?P<U>\w+)'
+ OFFLINE_PATTERN = r'>Download-Datei wurde nicht gefunden<'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def handleFree(self):
+ self.wait(10)
+ ldc = re.search(r'wert="(\w+)"', self.html).group(1)
+ link = self.load("http://filestore.to/ajax/download.php", get={"LDC": ldc})
+ self.logDebug("Download link = " + link)
+ self.download(link)
+
+
+getInfo = create_getInfo(FileStoreTo)
diff --git a/pyload/plugins/hoster/FilebeerInfo.py b/pyload/plugins/hoster/FilebeerInfo.py
new file mode 100644
index 000000000..561660148
--- /dev/null
+++ b/pyload/plugins/hoster/FilebeerInfo.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class FilebeerInfo(DeadHoster):
+ __name__ = "FilebeerInfo"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?filebeer\.info/(?!\d*~f)(?P<ID>\w+).*'
+
+ __description__ = """Filebeer.info plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(FilebeerInfo)
diff --git a/pyload/plugins/hoster/FilecloudIo.py b/pyload/plugins/hoster/FilecloudIo.py
new file mode 100644
index 000000000..05753a67e
--- /dev/null
+++ b/pyload/plugins/hoster/FilecloudIo.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FilecloudIo(SimpleHoster):
+ __name__ = "FilecloudIo"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+).*'
+
+ __description__ = """Filecloud.io hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ FILE_SIZE_PATTERN = r'{var __ab1 = (?P<S>\d+);}'
+ FILE_NAME_PATTERN = r'id="aliasSpan">(?P<N>.*?)&nbsp;&nbsp;<'
+ OFFLINE_PATTERN = r'l10n.(FILES__DOESNT_EXIST|REMOVED)'
+ TEMP_OFFLINE_PATTERN = r'l10n.FILES__WARNING'
+
+ UKEY_PATTERN = r"'ukey'\s*:'(\w+)',"
+ AB1_PATTERN = r"if\( __ab1 == '(\w+)' \)"
+ ERROR_MSG_PATTERN = r'var __error_msg\s*=\s*l10n\.(.*?);'
+ LINK_PATTERN = r'"(http://s\d+.filecloud.io/%s/\d+/.*?)"'
+ RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';"
+ RECAPTCHA_KEY = "6Lf5OdISAAAAAEZObLcx5Wlv4daMaASRov1ysDB1"
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = 1
+
+ def handleFree(self):
+ data = {"ukey": self.file_info['ID']}
+
+ m = re.search(self.AB1_PATTERN, self.html)
+ if m is None:
+ self.parseError("__AB1")
+ data['__ab1'] = m.group(1)
+
+ if not self.account:
+ self.fail("User not logged in")
+ elif not self.account.logged_in:
+ recaptcha = ReCaptcha(self)
+ captcha_challenge, captcha_response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ self.account.form_data = {"recaptcha_challenge_field": captcha_challenge,
+ "recaptcha_response_field": captcha_response}
+ self.account.relogin(self.user)
+ self.retry(2)
+
+ json_url = "http://filecloud.io/download-request.json"
+ response = self.load(json_url, post=data)
+ self.logDebug(response)
+ response = json_loads(response)
+
+ if "error" in response and response['error']:
+ self.fail(response)
+
+ self.logDebug(response)
+ if response['captcha']:
+ recaptcha = ReCaptcha(self)
+ m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
+ captcha_key = m.group(1) if m else self.RECAPTCHA_KEY
+ data['ctype'] = "recaptcha"
+
+ for _ in xrange(5):
+ data['recaptcha_challenge'], data['recaptcha_response'] = recaptcha.challenge(captcha_key)
+
+ json_url = "http://filecloud.io/download-request.json"
+ response = self.load(json_url, post=data)
+ self.logDebug(response)
+ response = json_loads(response)
+
+ if "retry" in response and response['retry']:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("Incorrect captcha")
+
+ if response['dl']:
+ self.html = self.load('http://filecloud.io/download.html')
+ m = re.search(self.LINK_PATTERN % self.file_info['ID'], self.html)
+ if m is None:
+ self.parseError("Download URL")
+ download_url = m.group(1)
+ self.logDebug("Download URL: %s" % download_url)
+
+ if "size" in self.file_info and self.file_info['size']:
+ self.check_data = {"size": int(self.file_info['size'])}
+ self.download(download_url)
+ else:
+ self.fail("Unexpected server response")
+
+ def handlePremium(self):
+ akey = self.account.getAccountData(self.user)['akey']
+ ukey = self.file_info['ID']
+ self.logDebug("Akey: %s | Ukey: %s" % (akey, ukey))
+ rep = self.load("http://api.filecloud.io/api-fetch_download_url.api",
+ post={"akey": akey, "ukey": ukey})
+ self.logDebug("FetchDownloadUrl: " + rep)
+ rep = json_loads(rep)
+ if rep['status'] == 'ok':
+ self.download(rep['download_url'], disposition=True)
+ else:
+ self.fail(rep['message'])
+
+
+getInfo = create_getInfo(FilecloudIo)
diff --git a/pyload/plugins/hoster/FilefactoryCom.py b/pyload/plugins/hoster/FilefactoryCom.py
new file mode 100644
index 000000000..fafe96477
--- /dev/null
+++ b/pyload/plugins/hoster/FilefactoryCom.py
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+
+
+def getInfo(urls):
+ for url in urls:
+ h = getURL(url, just_header=True)
+ m = re.search(r'Location: (.+)\r\n', h)
+ if m and not re.match(m.group(1), FilefactoryCom.__pattern__): # It's a direct link! Skipping
+ yield (url, 0, 3, url)
+ else: # It's a standard html page
+ file_info = parseFileInfo(FilefactoryCom, url, getURL(url))
+ yield file_info
+
+
+class FilefactoryCom(SimpleHoster):
+ __name__ = "FilefactoryCom"
+ __type__ = "hoster"
+ __version__ = "0.50"
+
+ __pattern__ = r'https?://(?:www\.)?filefactory\.com/file/(?P<id>[a-zA-Z0-9]+)'
+
+ __description__ = """Filefactory.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_INFO_PATTERN = r'<div id="file_name"[^>]*>\s*<h2>(?P<N>[^<]+)</h2>\s*<div id="file_info">\s*(?P<S>[\d.]+) (?P<U>\w+) uploaded'
+ LINK_PATTERN = r'<a href="(https?://[^"]+)"[^>]*><i[^>]*></i> Download with FileFactory Premium</a>'
+ OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available'
+ PREMIUM_ONLY_PATTERN = r'>Premium Account Required<'
+
+ SH_COOKIES = [(".filefactory.com", "locale", "en_US.utf8")]
+
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+ if "Currently only Premium Members can download files larger than" in self.html:
+ self.fail("File too large for free download")
+ elif "All free download slots on this server are currently in use" in self.html:
+ self.retry(50, 15 * 60, "All free slots are busy")
+
+ m = re.search(r'data-href(?:-direct)?="(http://[^"]+)"', self.html)
+ if m:
+ t = re.search(r'<div id="countdown_clock" data-delay="(\d+)">', self.html)
+ if t:
+ t = t.group(1)
+ else:
+ self.logDebug("Unable to detect countdown duration. Guessing 60 seconds")
+ t = 60
+ self.wait(t)
+ direct = m.group(1)
+ else: # This section could be completely useless now
+ # Load the page that contains the direct link
+ url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html)
+ if url is None:
+ self.parseError('Unable to detect free link')
+ url = 'http://www.filefactory.com' + url.group(1)
+ self.html = self.load(url, decode=True)
+
+ # Free downloads wait time
+ waittime = re.search(r'id="startWait" value="(\d+)"', self.html)
+ if not waittime:
+ self.parseError('Unable to detect wait time')
+ self.wait(int(waittime.group(1)))
+
+ # Parse the direct link and download it
+ direct = re.search(r'data-href(?:-direct)?="(.*)" class="button', self.html)
+ if not direct:
+ self.parseError('Unable to detect free direct link')
+ direct = direct.group(1)
+
+ self.logDebug('DIRECT LINK: ' + direct)
+ self.download(direct, disposition=True)
+
+ check = self.checkDownload({"multiple": "You are currently downloading too many files at once.",
+ "error": '<div id="errorMessage">'})
+
+ if check == "multiple":
+ self.logDebug("Parallel downloads detected; waiting 15 minutes")
+ self.retry(wait_time=15 * 60, reason="Parallel downloads")
+ elif check == "error":
+ self.fail("Unknown error")
+
+ def handlePremium(self):
+ header = self.load(self.pyfile.url, just_header=True)
+ if 'location' in header:
+ url = header['location'].strip()
+ if not url.startswith("http://"):
+ url = "http://www.filefactory.com" + url
+ elif 'content-disposition' in header:
+ url = self.pyfile.url
+ else:
+ self.logInfo('You could enable "Direct Downloads" on http://filefactory.com/account/')
+ html = self.load(self.pyfile.url)
+ m = re.search(self.LINK_PATTERN, html)
+ if m:
+ url = m.group(1)
+ else:
+ self.parseError('Unable to detect premium direct link')
+
+ self.logDebug('DIRECT PREMIUM LINK: ' + url)
+ self.download(url, disposition=True)
diff --git a/pyload/plugins/hoster/FilejungleCom.py b/pyload/plugins/hoster/FilejungleCom.py
new file mode 100644
index 000000000..0bbc7502e
--- /dev/null
+++ b/pyload/plugins/hoster/FilejungleCom.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.FileserveCom import FileserveCom, checkFile
+from pyload.plugins.Plugin import chunks
+
+
+class FilejungleCom(FileserveCom):
+ __name__ = "FilejungleCom"
+ __type__ = "hoster"
+ __version__ = "0.51"
+
+ __pattern__ = r'http://(?:www\.)?filejungle\.com/f/(?P<id>[^/]+).*'
+
+ __description__ = """Filejungle.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ URLS = ["http://www.filejungle.com/f/", "http://www.filejungle.com/check_links.php",
+ "http://www.filejungle.com/checkReCaptcha.php"]
+ LINKCHECK_TR = r'<li>\s*(<div class="col1">.*?)</li>'
+ LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>|&nbsp;)*([^<]*)'
+
+ LONG_WAIT_PATTERN = r'<h1>Please wait for (\d+) (\w+)\s*to download the next file\.</h1>'
+
+
+def getInfo(urls):
+ for chunk in chunks(urls, 100):
+ yield checkFile(FilejungleCom, chunk)
diff --git a/pyload/plugins/hoster/FileomCom.py b/pyload/plugins/hoster/FileomCom.py
new file mode 100644
index 000000000..11052e289
--- /dev/null
+++ b/pyload/plugins/hoster/FileomCom.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://fileom.com/gycaytyzdw3g/random.bin.html
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class FileomCom(XFileSharingPro):
+ __name__ = "FileomCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?fileom\.com/\w+'
+
+ __description__ = """Fileom.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ HOSTER_NAME = "fileom.com"
+
+ FILE_URL_REPLACEMENTS = [(r'/$', "")]
+ SH_COOKIES = [(".fileom.com", "lang", "english")]
+
+ FILE_NAME_PATTERN = r'Filename: <span>(?P<N>.+?)<'
+ FILE_SIZE_PATTERN = r'File Size: <span class="size">(?P<S>[\d\.]+) (?P<U>\w+)'
+
+ ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)(?:\'|</)'
+
+ LINK_PATTERN = r"var url2 = '(.+?)';"
+
+
+ def setup(self):
+ self.resumeDownload = self.premium
+ self.multiDL = True
+ self.chunkLimit = 1
+
+
+getInfo = create_getInfo(FileomCom)
diff --git a/pyload/plugins/hoster/FilepostCom.py b/pyload/plugins/hoster/FilepostCom.py
new file mode 100644
index 000000000..ac2ae4845
--- /dev/null
+++ b/pyload/plugins/hoster/FilepostCom.py
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import time
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FilepostCom(SimpleHoster):
+ __name__ = "FilepostCom"
+ __type__ = "hoster"
+ __version__ = "0.28"
+
+ __pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp.io)/([^/]+).*'
+
+ __description__ = """Filepost.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<input type="text" id="url" value=\'<a href[^>]*>(?P<N>[^>]+?) - (?P<S>[0-9\.]+ [kKMG]i?B)</a>\' class="inp_text"/>'
+ OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>|<div class="file_info file_info_deleted">'
+
+ PREMIUM_ONLY_PATTERN = r'members only. Please upgrade to premium|a premium membership is required to download this file'
+ RECAPTCHA_KEY_PATTERN = r"Captcha.init\({\s*key:\s*'([^']+)'"
+ FLP_TOKEN_PATTERN = r"set_store_options\({token: '([^']+)'"
+
+
+ def handleFree(self):
+ # Find token and captcha key
+ file_id = re.match(self.__pattern__, self.pyfile.url).group(1)
+
+ m = re.search(self.FLP_TOKEN_PATTERN, self.html)
+ if m is None:
+ self.parseError("Token")
+ flp_token = m.group(1)
+
+ m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
+ if m is None:
+ self.parseError("Captcha key")
+ captcha_key = m.group(1)
+
+ # Get wait time
+ get_dict = {'SID': self.req.cj.getCookie('SID'), 'JsHttpRequest': str(int(time() * 10000)) + '-xml'}
+ post_dict = {'action': 'set_download', 'token': flp_token, 'code': file_id}
+ wait_time = int(self.getJsonResponse(get_dict, post_dict, 'wait_time'))
+
+ if wait_time > 0:
+ self.wait(wait_time)
+
+ post_dict = {"token": flp_token, "code": file_id, "file_pass": ''}
+
+ if 'var is_pass_exists = true;' in self.html:
+ # Solve password
+ for file_pass in self.getPassword().splitlines():
+ get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml'
+ post_dict['file_pass'] = file_pass
+ self.logInfo("Password protected link, trying " + file_pass)
+
+ download_url = self.getJsonResponse(get_dict, post_dict, 'link')
+ if download_url:
+ break
+
+ else:
+ self.fail("No or incorrect password")
+
+ else:
+ # Solve recaptcha
+ recaptcha = ReCaptcha(self)
+
+ for i in xrange(5):
+ get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml'
+ if i:
+ post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'] = recaptcha.challenge(
+ captcha_key)
+ self.logDebug(u"RECAPTCHA: %s : %s : %s" % (
+ captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field']))
+
+ download_url = self.getJsonResponse(get_dict, post_dict, 'link')
+ if download_url:
+ if i:
+ self.correctCaptcha()
+ break
+ elif i:
+ self.invalidCaptcha()
+
+ else:
+ self.fail("Invalid captcha")
+
+ # Download
+ self.download(download_url)
+
+ def getJsonResponse(self, get_dict, post_dict, field):
+ json_response = json_loads(self.load('https://filepost.com/files/get/', get=get_dict, post=post_dict))
+ self.logDebug(json_response)
+
+ if not 'js' in json_response:
+ self.parseError('JSON %s 1' % field)
+
+ # i changed js_answer to json_response['js'] since js_answer is nowhere set.
+ # i don't know the JSON-HTTP specs in detail, but the previous author
+ # accessed json_response['js']['error'] as well as js_answer['error'].
+ # see the two lines commented out with "# ~?".
+ if 'error' in json_response['js']:
+ if json_response['js']['error'] == 'download_delay':
+ self.retry(wait_time=json_response['js']['params']['next_download'])
+ # ~? self.retry(wait_time=js_answer['params']['next_download'])
+ elif 'Wrong file password' in json_response['js']['error']:
+ return None
+ elif 'You entered a wrong CAPTCHA code' in json_response['js']['error']:
+ return None
+ elif 'CAPTCHA Code nicht korrekt' in json_response['js']['error']:
+ return None
+ elif 'CAPTCHA' in json_response['js']['error']:
+ self.logDebug('error response is unknown, but mentions CAPTCHA -> return None')
+ return None
+ else:
+ self.fail(json_response['js']['error'])
+ # ~? self.fail(js_answer['error'])
+
+ if not 'answer' in json_response['js'] or not field in json_response['js']['answer']:
+ self.parseError('JSON %s 2' % field)
+
+ return json_response['js']['answer'][field]
+
+
+getInfo = create_getInfo(FilepostCom)
diff --git a/pyload/plugins/hoster/FilerNet.py b/pyload/plugins/hoster/FilerNet.py
new file mode 100644
index 000000000..5f1b6bea8
--- /dev/null
+++ b/pyload/plugins/hoster/FilerNet.py
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://filer.net/get/ivgf5ztw53et3ogd
+# http://filer.net/get/hgo14gzcng3scbvv
+
+import pycurl
+import re
+
+from urlparse import urljoin
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FilerNet(SimpleHoster):
+ __name__ = "FilerNet"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?filer\.net/get/(\w+)'
+
+ __description__ = """Filer.net hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_INFO_PATTERN = r'<h1 class="page-header">Free Download (?P<N>\S+) <small>(?P<S>[\w.]+) (?P<U>\w+)</small></h1>'
+ OFFLINE_PATTERN = r'Nicht gefunden'
+ RECAPTCHA_KEY = "6LcFctISAAAAAAgaeHgyqhNecGJJRnxV1m_vAz3V"
+ LINK_PATTERN = r'href="([^"]+)">Get download</a>'
+
+
+ def process(self, pyfile):
+ if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def handleFree(self):
+ self.req.setOption("timeout", 120)
+ self.html = self.load(self.pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
+
+ # Wait between downloads
+ m = re.search(r'musst du <span id="time">(\d+)</span> Sekunden warten', self.html)
+ if m:
+ waittime = int(m.group(1))
+ self.retry(3, waittime, "Wait between free downloads")
+
+ self.getFileInfo()
+
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ inputs = self.parseHtmlForm(input_names='token')[1]
+ if 'token' not in inputs:
+ self.parseError('Unable to detect token')
+ token = inputs['token']
+ self.logDebug('Token: ' + token)
+
+ self.html = self.load(self.pyfile.url, post={'token': token}, decode=True)
+
+ inputs = self.parseHtmlForm(input_names='hash')[1]
+ if 'hash' not in inputs:
+ self.parseError('Unable to detect hash')
+ hash_data = inputs['hash']
+ self.logDebug('Hash: ' + hash_data)
+
+ downloadURL = r''
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response,
+ 'hash': hash_data}
+
+ # Workaround for 0.4.9 just_header issue. In 0.5 clean the code using just_header
+ self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
+ self.load(self.pyfile.url, post=post_data)
+ self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
+
+ if 'location' in self.req.http.header.lower():
+ location = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1)
+ downloadURL = urljoin('http://filer.net', location)
+ self.correctCaptcha()
+ break
+ else:
+ self.logInfo('Wrong captcha')
+ self.invalidCaptcha()
+
+ if not downloadURL:
+ self.fail("No Download url retrieved/all captcha attempts failed")
+
+ self.download(downloadURL, disposition=True)
+
+ def handlePremium(self):
+ header = self.load(self.pyfile.url, just_header=True)
+ if 'location' in header: # Direct Download ON
+ dl = self.pyfile.url
+ else: # Direct Download OFF
+ html = self.load(self.pyfile.url)
+ m = re.search(self.LINK_PATTERN, html)
+ if m is None:
+ self.parseError("Unable to detect direct link, try to enable 'Direct download' in your user settings")
+ dl = 'http://filer.net' + m.group(1)
+
+ self.logDebug('Direct link: ' + dl)
+ self.download(dl, disposition=True)
+
+
+getInfo = create_getInfo(FilerNet)
diff --git a/pyload/plugins/hoster/FilerioCom.py b/pyload/plugins/hoster/FilerioCom.py
new file mode 100644
index 000000000..31d04b0ee
--- /dev/null
+++ b/pyload/plugins/hoster/FilerioCom.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class FilerioCom(XFileSharingPro):
+ __name__ = "FilerioCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?(filerio\.(in|com)|filekeen\.com)/\w{12}'
+
+ __description__ = """FileRio.in hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "filerio.in"
+
+ OFFLINE_PATTERN = r'<b>&quot;File Not Found&quot;</b>|File has been removed due to Copyright Claim'
+ FILE_URL_REPLACEMENTS = [(r'http://.*?/', 'http://filerio.in/')]
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+
+
+getInfo = create_getInfo(FilerioCom)
diff --git a/pyload/plugins/hoster/FilesMailRu.py b/pyload/plugins/hoster/FilesMailRu.py
new file mode 100644
index 000000000..01d9c256a
--- /dev/null
+++ b/pyload/plugins/hoster/FilesMailRu.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.Plugin import chunks
+
+
+def getInfo(urls):
+ result = []
+ for chunk in chunks(urls, 10):
+ for url in chunk:
+ src = getURL(url)
+ if r'<div class="errorMessage mb10">' in src:
+ result.append((url, 0, 1, url))
+ elif r'Page cannot be displayed' in src:
+ result.append((url, 0, 1, url))
+ else:
+ try:
+ url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>'
+ file_name = re.search(url_pattern, src).group(0).split(', event)">')[1].split('</a>')[0]
+ result.append((file_name, 0, 2, url))
+ except:
+ pass
+
+ # status 1=OFFLINE, 2=OK, 3=UNKNOWN
+ # result.append((#name,#size,#status,#url))
+ yield result
+
+
+class FilesMailRu(Hoster):
+ __name__ = "FilesMailRu"
+ __type__ = "hoster"
+ __version__ = "0.31"
+
+ __pattern__ = r'http://(?:www\.)?files\.mail\.ru/.*'
+
+ __description__ = """Files.mail.ru hoster plugin"""
+ __author_name__ = "oZiRiz"
+ __author_mail__ = "ich@oziriz.de"
+
+
+ def setup(self):
+ if not self.account:
+ self.multiDL = False
+
+ def process(self, pyfile):
+ self.html = self.load(pyfile.url)
+ self.url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>'
+
+ #marks the file as "offline" when the pattern was found on the html-page'''
+ if r'<div class="errorMessage mb10">' in self.html:
+ self.offline()
+
+ elif r'Page cannot be displayed' in self.html:
+ self.offline()
+
+ #the filename that will be showed in the list (e.g. test.part1.rar)'''
+ pyfile.name = self.getFileName()
+
+ #prepare and download'''
+ if not self.account:
+ self.prepare()
+ self.download(self.getFileUrl())
+ self.myPostProcess()
+ else:
+ self.download(self.getFileUrl())
+ self.myPostProcess()
+
+ def prepare(self):
+ """You have to wait some seconds. Otherwise you will get a 40Byte HTML Page instead of the file you expected"""
+ self.setWait(10)
+ self.wait()
+ return True
+
+ def getFileUrl(self):
+ """gives you the URL to the file. Extracted from the Files.mail.ru HTML-page stored in self.html"""
+ return re.search(self.url_pattern, self.html).group(0).split('<a href="')[1].split('" onclick="return Act')[0]
+
+ def getFileName(self):
+ """gives you the Name for each file. Also extracted from the HTML-Page"""
+ return re.search(self.url_pattern, self.html).group(0).split(', event)">')[1].split('</a>')[0]
+
+ def myPostProcess(self):
+ # searches the file for HTMl-Code. Sometimes the Redirect
+ # doesn't work (maybe a curl Problem) and you get only a small
+ # HTML file and the Download is marked as "finished"
+ # then the download will be restarted. It's only bad for these
+ # who want download a HTML-File (it's one in a million ;-) )
+ #
+ # The maximum UploadSize allowed on files.mail.ru at the moment is 100MB
+ # so i set it to check every download because sometimes there are downloads
+ # that contain the HTML-Text and 60MB ZEROs after that in a xyzfile.part1.rar file
+ # (Loading 100MB in to ram is not an option)
+ check = self.checkDownload({"html": "<meta name="}, read_size=50000)
+ if check == "html":
+ self.logInfo(_(
+ "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." %
+ self.pyfile.name))
+ self.retry()
diff --git a/pyload/plugins/hoster/FileserveCom.py b/pyload/plugins/hoster/FileserveCom.py
new file mode 100644
index 000000000..15830b759
--- /dev/null
+++ b/pyload/plugins/hoster/FileserveCom.py
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.Plugin import chunks
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.utils import parseFileSize
+
+
+def checkFile(plugin, urls):
+ html = getURL(plugin.URLS[1], post={"urls": "\n".join(urls)}, decode=True)
+
+ file_info = []
+ for li in re.finditer(plugin.LINKCHECK_TR, html, re.DOTALL):
+ try:
+ cols = re.findall(plugin.LINKCHECK_TD, li.group(1))
+ if cols:
+ file_info.append((
+ cols[1] if cols[1] != '--' else cols[0],
+ parseFileSize(cols[2]) if cols[2] != '--' else 0,
+ 2 if cols[3].startswith('Available') else 1,
+ cols[0]))
+ except Exception, e:
+ continue
+
+ return file_info
+
+
+class FileserveCom(Hoster):
+ __name__ = "FileserveCom"
+ __type__ = "hoster"
+ __version__ = "0.52"
+
+ __pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<id>[^/]+).*'
+
+ __description__ = """Fileserve.com hoster plugin"""
+ __author_name__ = ("jeix", "mkaay", "Paul King", "zoidberg")
+ __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "", "zoidberg@mujmail.cz")
+
+ URLS = ["http://www.fileserve.com/file/", "http://www.fileserve.com/link-checker.php",
+ "http://www.fileserve.com/checkReCaptcha.php"]
+ LINKCHECK_TR = r'<tr>\s*(<td>http://www.fileserve\.com/file/.*?)</tr>'
+ LINKCHECK_TD = r'<td>(?:<[^>]*>|&nbsp;)*([^<]*)'
+
+ CAPTCHA_KEY_PATTERN = r"var reCAPTCHA_publickey='(?P<key>[^']+)'"
+ LONG_WAIT_PATTERN = r'<li class="title">You need to wait (\d+) (\w+) to start another download\.</li>'
+ LINK_EXPIRED_PATTERN = r'Your download link has expired'
+ DAILY_LIMIT_PATTERN = r'Your daily download limit has been reached'
+ NOT_LOGGED_IN_PATTERN = r'<form (name="loginDialogBoxForm"|id="login_form")|<li><a href="/login.php">Login</a></li>'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+
+ self.file_id = re.match(self.__pattern__, self.pyfile.url).group('id')
+ self.url = "%s%s" % (self.URLS[0], self.file_id)
+ self.logDebug("File ID: %s URL: %s" % (self.file_id, self.url))
+
+ def process(self, pyfile):
+ pyfile.name, pyfile.size, status, self.url = checkFile(self, [self.url])[0]
+ if status != 2:
+ self.offline()
+ self.logDebug("File Name: %s Size: %d" % (pyfile.name, pyfile.size))
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def handleFree(self):
+ self.html = self.load(self.url)
+ action = self.load(self.url, post={"checkDownload": "check"}, decode=True)
+ action = json_loads(action)
+ self.logDebug(action)
+
+ if "fail" in action:
+ if action['fail'] == "timeLimit":
+ self.html = self.load(self.url, post={"checkDownload": "showError", "errorType": "timeLimit"},
+ decode=True)
+
+ self.doLongWait(re.search(self.LONG_WAIT_PATTERN, self.html))
+
+ elif action['fail'] == "parallelDownload":
+ self.logWarning(_("Parallel download error, now waiting 60s."))
+ self.retry(wait_time=60, reason="parallelDownload")
+
+ else:
+ self.fail("Download check returned %s" % action['fail'])
+
+ elif "success" in action:
+ if action['success'] == "showCaptcha":
+ self.doCaptcha()
+ self.doTimmer()
+ elif action['success'] == "showTimmer":
+ self.doTimmer()
+
+ else:
+ self.fail("Unknown server response")
+
+ # show download link
+ response = self.load(self.url, post={"downloadLink": "show"}, decode=True)
+ self.logDebug("show downloadLink response : %s" % response)
+ if "fail" in response:
+ self.fail("Couldn't retrieve download url")
+
+ # this may either download our file or forward us to an error page
+ self.download(self.url, post={"download": "normal"})
+ self.logDebug(self.req.http.lastEffectiveURL)
+
+ check = self.checkDownload({"expired": self.LINK_EXPIRED_PATTERN,
+ "wait": re.compile(self.LONG_WAIT_PATTERN),
+ "limit": self.DAILY_LIMIT_PATTERN})
+
+ if check == "expired":
+ self.logDebug("Download link was expired")
+ self.retry()
+ elif check == "wait":
+ self.doLongWait(self.lastCheck)
+ elif check == "limit":
+ self.logWarning("Download limited reached for today")
+ self.setWait(secondsToMidnight(gmt=2), True)
+ self.wait()
+ self.retry()
+
+ self.thread.m.reconnecting.wait(3) # Ease issue with later downloads appearing to be in parallel
+
+ def doTimmer(self):
+ response = self.load(self.url, post={"downloadLink": "wait"}, decode=True)
+ self.logDebug("wait response : %s" % response[:80])
+
+ if "fail" in response:
+ self.fail("Failed getting wait time")
+
+ if self.__name__ == "FilejungleCom":
+ m = re.search(r'"waitTime":(\d+)', response)
+ if m is None:
+ self.fail("Cannot get wait time")
+ wait_time = int(m.group(1))
+ else:
+ wait_time = int(response) + 3
+
+ self.setWait(wait_time)
+ self.wait()
+
+ def doCaptcha(self):
+ captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group("key")
+ recaptcha = ReCaptcha(self)
+
+ for _ in xrange(5):
+ challenge, code = recaptcha.challenge(captcha_key)
+
+ response = json_loads(self.load(self.URLS[2],
+ post={'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': code,
+ 'recaptcha_shortencode_field': self.file_id}))
+ self.logDebug("reCaptcha response : %s" % response)
+ if not response['success']:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("Invalid captcha")
+
+ def doLongWait(self, m):
+ wait_time = (int(m.group(1)) * {'seconds': 1, 'minutes': 60, 'hours': 3600}[m.group(2)]) if m else 12 * 60
+ self.setWait(wait_time, True)
+ self.wait()
+ self.retry()
+
+ def handlePremium(self):
+ premium_url = None
+ if self.__name__ == "FileserveCom":
+ #try api download
+ response = self.load("http://app.fileserve.com/api/download/premium/",
+ post={"username": self.user,
+ "password": self.account.getAccountData(self.user)['password'],
+ "shorten": self.file_id},
+ decode=True)
+ if response:
+ response = json_loads(response)
+ if response['error_code'] == "302":
+ premium_url = response['next']
+ elif response['error_code'] in ["305", "500"]:
+ self.tempOffline()
+ elif response['error_code'] in ["403", "605"]:
+ self.resetAccount()
+ elif response['error_code'] in ["606", "607", "608"]:
+ self.offline()
+ else:
+ self.logError(response['error_code'], response['error_message'])
+
+ self.download(premium_url or self.pyfile.url)
+
+ if not premium_url:
+ check = self.checkDownload({"login": re.compile(self.NOT_LOGGED_IN_PATTERN)})
+
+ if check == "login":
+ self.account.relogin(self.user)
+ self.retry(reason=_("Not logged in."))
+
+
+def getInfo(urls):
+ for chunk in chunks(urls, 100):
+ yield checkFile(FileserveCom, chunk)
diff --git a/pyload/plugins/hoster/FileshareInUa.py b/pyload/plugins/hoster/FileshareInUa.py
new file mode 100644
index 000000000..162217de2
--- /dev/null
+++ b/pyload/plugins/hoster/FileshareInUa.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import parseFileSize
+
+
+class FileshareInUa(Hoster):
+ __name__ = "FileshareInUa"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?fileshare.in.ua/[A-Za-z0-9]+'
+
+ __description__ = """Fileshare.in.ua hoster plugin"""
+ __author_name__ = "fwannmacher"
+ __author_mail__ = "felipe@warhammerproject.com"
+
+ PATTERN_FILENAME = r'<h3 class="b-filename">(.*?)</h3>'
+ PATTERN_FILESIZE = r'<b class="b-filesize">(.*?)</b>'
+ PATTERN_OFFLINE = r"This file doesn't exist, or has been removed."
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+ self.html = self.load(pyfile.url, decode=True)
+
+ if not self._checkOnline():
+ self.offline()
+
+ pyfile.name = self._getName()
+
+ link = self._getLink()
+
+ if not link.startswith('http://'):
+ link = "http://fileshare.in.ua" + link
+
+ self.download(link)
+
+ def _checkOnline(self):
+ if re.search(self.PATTERN_OFFLINE, self.html):
+ return False
+ else:
+ return True
+
+ def _getName(self):
+ name = re.search(self.PATTERN_FILENAME, self.html)
+ if name is None:
+ self.fail("%s: Plugin broken." % self.__name__)
+
+ return name.group(1)
+
+ def _getLink(self):
+ return re.search("<a href=\"(/get/.+)\" class=\"b-button m-blue m-big\" >", self.html).group(1)
+
+
+def getInfo(urls):
+ result = []
+
+ for url in urls:
+ html = getURL(url)
+
+ if re.search(FileshareInUa.PATTERN_OFFLINE, html):
+ result.append((url, 0, 1, url))
+ else:
+ name = re.search(FileshareInUa.PATTERN_FILENAME, html)
+
+ if name is None:
+ result.append((url, 0, 1, url))
+ continue
+
+ name = name.group(1)
+ size = re.search(FileshareInUa.PATTERN_FILESIZE, html)
+ size = parseFileSize(size.group(1))
+
+ result.append((name, size, 3, url))
+
+ yield result
diff --git a/pyload/plugins/hoster/FilezyNet.py b/pyload/plugins/hoster/FilezyNet.py
new file mode 100644
index 000000000..eeba4add0
--- /dev/null
+++ b/pyload/plugins/hoster/FilezyNet.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class FilezyNet(XFileSharingPro):
+ __name__ = "FilezyNet"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?filezy.net/.*/.*.html'
+
+ __description__ = """Filezy.net hoster plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+ HOSTER_NAME = "filezy.net"
+
+ FILE_SIZE_PATTERN = r'<span class="plansize">(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</span>'
+ WAIT_PATTERN = r'<div id="countdown_str" class="seconds">\n<!--Wait--> <span id=".*?">(\d+)</span>'
+ DOWNLOAD_JS_PATTERN = r"<script type='text/javascript'>eval(.*)"
+
+
+ def setup(self):
+ self.resumeDownload = True
+ self.multiDL = self.premium
+
+ def getDownloadLink(self):
+ self.logDebug("Getting download link")
+
+ data = self.getPostParameters()
+ self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
+
+ obfuscated_js = re.search(self.DOWNLOAD_JS_PATTERN, self.html)
+ dl_file_now = self.js.eval(obfuscated_js.group(1))
+ link = re.search(self.LINK_PATTERN, dl_file_now)
+ return link.group(1)
+
+
+getInfo = create_getInfo(FilezyNet)
diff --git a/pyload/plugins/hoster/FiredriveCom.py b/pyload/plugins/hoster/FiredriveCom.py
new file mode 100644
index 000000000..a9d62bb75
--- /dev/null
+++ b/pyload/plugins/hoster/FiredriveCom.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FiredriveCom(SimpleHoster):
+ __name__ = "FiredriveCom"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/(mobile/)?(file|embed)/(?P<ID>\w+)'
+
+ __description__ = """Firedrive.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ FILE_NAME_PATTERN = r'<b>Name:</b> (?P<N>.+) <br>'
+ FILE_SIZE_PATTERN = r'<b>Size:</b> (?P<S>[\d.]+) (?P<U>[a-zA-Z]+) <br>'
+ OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<'
+ TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.firedrive.com/file/\g<ID>')]
+
+ LINK_PATTERN = r'<a href="(https?://dl\.firedrive\.com/\?key=.+?)"'
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+ self.chunkLimit = -1
+
+ def handleFree(self):
+ link = self._getLink()
+ self.logDebug("Direct link: " + link)
+ self.download(link, disposition=True)
+
+ def _getLink(self):
+ f = re.search(self.LINK_PATTERN, self.html)
+ if f:
+ return f.group(1)
+ else:
+ self.html = self.load(self.pyfile.url, post={"confirm": re.search(r'name="confirm" value="(.+?)"', self.html).group(1)})
+ f = re.search(self.LINK_PATTERN, self.html)
+ if f:
+ return f.group(1)
+ else:
+ self.parseError("Direct download link not found")
+
+
+getInfo = create_getInfo(FiredriveCom)
diff --git a/pyload/plugins/hoster/FlyFilesNet.py b/pyload/plugins/hoster/FlyFilesNet.py
new file mode 100644
index 000000000..d8d6efb7e
--- /dev/null
+++ b/pyload/plugins/hoster/FlyFilesNet.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.SimpleHoster import SimpleHoster
+
+
+class FlyFilesNet(SimpleHoster):
+ __name__ = "FlyFilesNet"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?flyfiles\.net/.*'
+
+ __description__ = """FlyFiles.net hoster plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+ SESSION_PATTERN = r'flyfiles\.net/(.*)/.*'
+ FILE_NAME_PATTERN = r'flyfiles\.net/.*/(.*)'
+
+
+ def process(self, pyfile):
+ name = re.search(self.FILE_NAME_PATTERN, pyfile.url).group(1)
+ pyfile.name = unquote_plus(name)
+
+ session = re.search(self.SESSION_PATTERN, pyfile.url).group(1)
+
+ url = "http://flyfiles.net"
+
+ # get download URL
+ parsed_url = getURL(url, post={"getDownLink": session}, cookies=True)
+ self.logDebug("Parsed URL: %s" % parsed_url)
+
+ if parsed_url == '#downlink|' or parsed_url == "#downlink|#":
+ self.logWarning("Could not get the download URL. Please wait 10 minutes.")
+ self.wait(10 * 60, True)
+ self.retry()
+
+ download_url = parsed_url.replace('#downlink|', '')
+
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
diff --git a/pyload/plugins/hoster/FourSharedCom.py b/pyload/plugins/hoster/FourSharedCom.py
new file mode 100644
index 000000000..e2cb980a4
--- /dev/null
+++ b/pyload/plugins/hoster/FourSharedCom.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class FourSharedCom(SimpleHoster):
+ __name__ = "FourSharedCom"
+ __type__ = "hoster"
+ __version__ = "0.29"
+
+ __pattern__ = r'https?://(?:www\.)?4shared(\-china)?\.com/(account/)?(download|get|file|document|photo|video|audio|mp3|office|rar|zip|archive|music)/.+?/.*'
+
+ __description__ = """4Shared.com hoster plugin"""
+ __author_name__ = ("jeix", "zoidberg")
+ __author_mail__ = ("jeix@hasnomail.de", "zoidberg@mujmail.cz")
+
+ FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.+?)"'
+ FILE_SIZE_PATTERN = r'<span title="Size: (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B">'
+ OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted.'
+
+ FILE_NAME_REPLACEMENTS = [(r"&#(\d+).", lambda m: unichr(int(m.group(1))))]
+ FILE_SIZE_REPLACEMENTS = [(",", "")]
+
+ DOWNLOAD_URL_PATTERN = r'name="d3link" value="(.*?)"'
+ DOWNLOAD_BUTTON_PATTERN = r'id="btnLink" href="(.*?)"'
+ FID_PATTERN = r'name="d3fid" value="(.*?)"'
+
+
+ def handleFree(self):
+ if not self.account:
+ self.fail("User not logged in")
+
+ m = re.search(self.DOWNLOAD_BUTTON_PATTERN, self.html)
+ if m:
+ link = m.group(1)
+ else:
+ link = re.sub(r'/(download|get|file|document|photo|video|audio)/', r'/get/', self.pyfile.url)
+
+ self.html = self.load(link)
+
+ m = re.search(self.DOWNLOAD_URL_PATTERN, self.html)
+ if m is None:
+ self.parseError('Download link')
+ link = m.group(1)
+
+ try:
+ m = re.search(self.FID_PATTERN, self.html)
+ response = self.load('http://www.4shared.com/web/d2/getFreeDownloadLimitInfo?fileId=%s' % m.group(1))
+ self.logDebug(response)
+ except:
+ pass
+
+ self.wait(20)
+ self.download(link)
+
+
+getInfo = create_getInfo(FourSharedCom)
diff --git a/pyload/plugins/hoster/FreakshareCom.py b/pyload/plugins/hoster/FreakshareCom.py
new file mode 100644
index 000000000..979b3c5f2
--- /dev/null
+++ b/pyload/plugins/hoster/FreakshareCom.py
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+
+
+class FreakshareCom(Hoster):
+ __name__ = "FreakshareCom"
+ __type__ = "hoster"
+ __version__ = "0.39"
+
+ __pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/'
+
+ __description__ = """Freakshare.com hoster plugin"""
+ __author_name__ = ("sitacuisses", "spoob", "mkaay", "Toilal")
+ __author_mail__ = ("sitacuisses@yahoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "toilal.dev@gmail.com")
+
+
+ def setup(self):
+ self.multiDL = False
+ self.req_opts = []
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+
+ pyfile.url = pyfile.url.replace("freakshare.net/", "freakshare.com/")
+
+ if self.account:
+ self.html = self.load(pyfile.url, cookies=False)
+ pyfile.name = self.get_file_name()
+ self.download(pyfile.url)
+
+ else:
+ self.prepare()
+ self.get_file_url()
+
+ self.download(pyfile.url, post=self.req_opts)
+
+ check = self.checkDownload({"bad": "bad try",
+ "paralell": "> Sorry, you cant download more then 1 files at time. <",
+ "empty": "Warning: Unknown: Filename cannot be empty",
+ "wrong_captcha": "Wrong Captcha!",
+ "downloadserver": "No Downloadserver. Please try again later!"})
+
+ if check == "bad":
+ self.fail("Bad Try.")
+ elif check == "paralell":
+ self.setWait(300, True)
+ self.wait()
+ self.retry()
+ elif check == "empty":
+ self.fail("File not downloadable")
+ elif check == "wrong_captcha":
+ self.invalidCaptcha()
+ self.retry()
+ elif check == "downloadserver":
+ self.retry(5, 15 * 60, "No Download server")
+
+ def prepare(self):
+ pyfile = self.pyfile
+
+ self.wantReconnect = False
+
+ self.download_html()
+
+ if not self.file_exists():
+ self.offline()
+
+ self.setWait(self.get_waiting_time())
+
+ pyfile.name = self.get_file_name()
+ pyfile.size = self.get_file_size()
+
+ self.wait()
+
+ return True
+
+ def download_html(self):
+ self.load("http://freakshare.com/index.php", {"language": "EN"}) # Set english language in server session
+ self.html = self.load(self.pyfile.url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+ if not self.wantReconnect:
+ self.req_opts = self.get_download_options() # get the Post options for the Request
+ #file_url = self.pyfile.url
+ #return file_url
+ else:
+ self.offline()
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+ if not self.wantReconnect:
+ file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">([^ ]+)", self.html)
+ if file_name is not None:
+ file_name = file_name.group(1)
+ else:
+ file_name = self.pyfile.url
+ return file_name
+ else:
+ return self.pyfile.url
+
+ def get_file_size(self):
+ size = 0
+ if not self.html:
+ self.download_html()
+ if not self.wantReconnect:
+ file_size_check = re.search(
+ r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">[^ ]+ - ([^ ]+) (\w\w)yte", self.html)
+ if file_size_check is not None:
+ units = float(file_size_check.group(1).replace(",", ""))
+ pow = {'KB': 1, 'MB': 2, 'GB': 3}[file_size_check.group(2)]
+ size = int(units * 1024 ** pow)
+
+ return size
+
+ def get_waiting_time(self):
+ if not self.html:
+ self.download_html()
+
+ if "Your Traffic is used up for today" in self.html:
+ self.wantReconnect = True
+ return secondsToMidnight(gmt=2)
+
+ timestring = re.search('\s*var\s(?:downloadWait|time)\s=\s(\d*)[.\d]*;', self.html)
+ if timestring:
+ return int(timestring.group(1)) + 1 # add 1 sec as tenths of seconds are cut off
+ else:
+ return 60
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+ if re.search(r"This file does not exist!", self.html) is not None:
+ return False
+ else:
+ return True
+
+ def get_download_options(self):
+ re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>",
+ self.html).group(0) # get the whole request
+ to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope)
+ request_options = dict((n, v) for (v, n) in to_sort)
+
+ herewego = self.load(self.pyfile.url, None, request_options) # the actual download-Page
+
+ # comment this in, when it doesnt work
+ # with open("DUMP__FS_.HTML", "w") as fp:
+ # fp.write(herewego)
+
+ to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego)
+ request_options = dict((n, v) for (v, n) in to_sort)
+
+ # comment this in, when it doesnt work as well
+ #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort])
+
+ challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego)
+
+ if challenge:
+ re_captcha = ReCaptcha(self)
+ (request_options['recaptcha_challenge_field'],
+ request_options['recaptcha_response_field']) = re_captcha.challenge(challenge.group(1))
+
+ return request_options
diff --git a/pyload/plugins/hoster/FreeWayMe.py b/pyload/plugins/hoster/FreeWayMe.py
new file mode 100644
index 000000000..392430791
--- /dev/null
+++ b/pyload/plugins/hoster/FreeWayMe.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Hoster import Hoster
+
+
+class FreeWayMe(Hoster):
+ __name__ = "FreeWayMe"
+ __type__ = "hoster"
+ __version__ = "0.11"
+
+ __pattern__ = r'https://(?:www\.)?free-way.me/.*'
+
+ __description__ = """FreeWayMe hoster plugin"""
+ __author_name__ = "Nicolas Giese"
+ __author_mail__ = "james@free-way.me"
+
+
+ def setup(self):
+ self.resumeDownload = False
+ self.chunkLimit = 1
+ self.multiDL = self.premium
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "FreeWayMe")
+ self.fail("No FreeWay account provided")
+
+ self.logDebug("Old URL: %s" % pyfile.url)
+
+ (user, data) = self.account.selectAccount()
+
+ self.download(
+ "https://www.free-way.me/load.php",
+ get={"multiget": 7, "url": pyfile.url, "user": user, "pw": self.account.getpw(user), "json": ""},
+ disposition=True)
diff --git a/pyload/plugins/hoster/FreevideoCz.py b/pyload/plugins/hoster/FreevideoCz.py
new file mode 100644
index 000000000..dc7dd04bd
--- /dev/null
+++ b/pyload/plugins/hoster/FreevideoCz.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class FreevideoCz(DeadHoster):
+ __name__ = "FreevideoCz"
+ __type__ = "hoster"
+ __version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?freevideo\.cz/vase-videa/.+'
+
+ __description__ = """Freevideo.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(FreevideoCz) \ No newline at end of file
diff --git a/pyload/plugins/hoster/FshareVn.py b/pyload/plugins/hoster/FshareVn.py
new file mode 100644
index 000000000..5109d239d
--- /dev/null
+++ b/pyload/plugins/hoster/FshareVn.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import strptime, mktime, gmtime
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+
+
+def getInfo(urls):
+ for url in urls:
+ html = getURL('http://www.fshare.vn/check_link.php', post={
+ "action": "check_link",
+ "arrlinks": url
+ }, decode=True)
+
+ file_info = parseFileInfo(FshareVn, url, html)
+
+ yield file_info
+
+
+def doubleDecode(m):
+ return m.group(1).decode('raw_unicode_escape')
+
+
+class FshareVn(SimpleHoster):
+ __name__ = "FshareVn"
+ __type__ = "hoster"
+ __version__ = "0.16"
+
+ __pattern__ = r'http://(?:www\.)?fshare.vn/file/.*'
+
+ __description__ = """FshareVn hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[0-9,.]+)\s*(?P<U>[kKMG])i?B<\\/p>'
+ OFFLINE_PATTERN = r'<div class=\\"f_left file_w\\"|<\\/p>\\t\\t\\t\\t\\r\\n\\t\\t<p><\\/p>\\t\\t\\r\\n\\t\\t<p>0 KB<\\/p>'
+
+ FILE_NAME_REPLACEMENTS = [("(.*)", doubleDecode)]
+
+ LINK_PATTERN = r'action="(http://download.*?)[#"]'
+ WAIT_PATTERN = ur'Lượt tải xuống kế tiếp là:\s*(.*?)\s*<'
+
+
+ def process(self, pyfile):
+ self.html = self.load('http://www.fshare.vn/check_link.php', post={
+ "action": "check_link",
+ "arrlinks": pyfile.url
+ }, decode=True)
+ self.getFileInfo()
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+ self.checkDownloadedFile()
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ self.checkErrors()
+
+ action, inputs = self.parseHtmlForm('frm_download')
+ self.url = self.pyfile.url + action
+
+ if not inputs:
+ self.parseError('FORM')
+ elif 'link_file_pwd_dl' in inputs:
+ for password in self.getPassword().splitlines():
+ self.logInfo('Password protected link, trying "%s"' % password)
+ inputs['link_file_pwd_dl'] = password
+ self.html = self.load(self.url, post=inputs, decode=True)
+ if not 'name="link_file_pwd_dl"' in self.html:
+ break
+ else:
+ self.fail("No or incorrect password")
+ else:
+ self.html = self.load(self.url, post=inputs, decode=True)
+
+ self.checkErrors()
+
+ m = re.search(r'var count = (\d+)', self.html)
+ self.setWait(int(m.group(1)) if m else 30)
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('FREE DL URL')
+ self.url = m.group(1)
+ self.logDebug("FREE DL URL: %s" % self.url)
+
+ self.wait()
+ self.download(self.url)
+
+ def handlePremium(self):
+ self.download(self.pyfile.url)
+
+ def checkErrors(self):
+ if '/error.php?' in self.req.lastEffectiveURL or u"Liên kết bạn chọn khÃŽng tồn" in self.html:
+ self.offline()
+
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ self.logInfo("Wait until %s ICT" % m.group(1))
+ wait_until = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M"))
+ self.wait(wait_until - mktime(gmtime()) - 7 * 60 * 60, True)
+ self.retry()
+ elif '<ul class="message-error">' in self.html:
+ self.logError("Unknown error occured or wait time not parsed")
+ self.retry(30, 2 * 60, "Unknown error")
+
+ def checkDownloadedFile(self):
+ # check download
+ check = self.checkDownload({
+ "not_found": "<head><title>404 Not Found</title></head>"
+ })
+
+ if check == "not_found":
+ self.fail("File not m on server")
diff --git a/pyload/plugins/hoster/Ftp.py b/pyload/plugins/hoster/Ftp.py
new file mode 100644
index 000000000..f9b3865a7
--- /dev/null
+++ b/pyload/plugins/hoster/Ftp.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+import pycurl
+import re
+
+from urllib import quote, unquote
+from urlparse import urlparse
+
+from pyload.plugins.Hoster import Hoster
+
+
+class Ftp(Hoster):
+ __name__ = "Ftp"
+ __type__ = "hoster"
+ __version__ = "0.41"
+
+ __description__ = """Download from ftp directory"""
+ __author_name__ = ("jeix", "mkaay", "zoidberg")
+ __author_mail__ = ("jeix@hasnomail.com", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ parsed_url = urlparse(pyfile.url)
+ netloc = parsed_url.netloc
+
+ pyfile.name = parsed_url.path.rpartition('/')[2]
+ try:
+ pyfile.name = unquote(str(pyfile.name)).decode('utf8')
+ except:
+ pass
+
+ if not "@" in netloc:
+ servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else []
+
+ if netloc in servers:
+ self.logDebug("Logging on to %s" % netloc)
+ self.req.addAuth(self.account.accounts[netloc]['password'])
+ else:
+ for pwd in pyfile.package().password.splitlines():
+ if ":" in pwd:
+ self.req.addAuth(pwd.strip())
+ break
+
+ self.req.http.c.setopt(pycurl.NOBODY, 1)
+
+ try:
+ response = self.load(pyfile.url)
+ except pycurl.error, e:
+ self.fail("Error %d: %s" % e.args)
+
+ self.req.http.c.setopt(pycurl.NOBODY, 0)
+ self.logDebug(self.req.http.header)
+
+ m = re.search(r"Content-Length:\s*(\d+)", response)
+ if m:
+ pyfile.size = int(m.group(1))
+ self.download(pyfile.url)
+ else:
+ #Naive ftp directory listing
+ if re.search(r'^25\d.*?"', self.req.http.header, re.M):
+ pyfile.url = pyfile.url.rstrip('/')
+ pkgname = "/".join(pyfile.package().name, urlparse(pyfile.url).path.rpartition('/')[2])
+ pyfile.url += '/'
+ self.req.http.c.setopt(48, 1) # CURLOPT_DIRLISTONLY
+ response = self.load(pyfile.url, decode=False)
+ links = [pyfile.url + quote(x) for x in response.splitlines()]
+ self.logDebug("LINKS", links)
+ self.core.api.addPackage(pkgname, links)
+ else:
+ self.fail("Unexpected server response")
diff --git a/pyload/plugins/hoster/GamefrontCom.py b/pyload/plugins/hoster/GamefrontCom.py
new file mode 100644
index 000000000..5d88fc0db
--- /dev/null
+++ b/pyload/plugins/hoster/GamefrontCom.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import parseFileSize
+
+
+class GamefrontCom(Hoster):
+ __name__ = "GamefrontCom"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?gamefront.com/files/[A-Za-z0-9]+'
+
+ __description__ = """Gamefront.com hoster plugin"""
+ __author_name__ = "fwannmacher"
+ __author_mail__ = "felipe@warhammerproject.com"
+
+ PATTERN_FILENAME = r'<title>(.*?) | Game Front'
+ PATTERN_FILESIZE = r'<dt>File Size:</dt>[\n\s]*<dd>(.*?)</dd>'
+ PATTERN_OFFLINE = r"This file doesn't exist, or has been removed."
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = -1
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+ self.html = self.load(pyfile.url, decode=True)
+
+ if not self._checkOnline():
+ self.offline()
+
+ pyfile.name = self._getName()
+
+ link = self._getLink()
+
+ if not link.startswith('http://'):
+ link = "http://www.gamefront.com/" + link
+
+ self.download(link)
+
+ def _checkOnline(self):
+ if re.search(self.PATTERN_OFFLINE, self.html):
+ return False
+ else:
+ return True
+
+ def _getName(self):
+ name = re.search(self.PATTERN_FILENAME, self.html)
+ if name is None:
+ self.fail("%s: Plugin broken." % self.__name__)
+
+ return name.group(1)
+
+ def _getLink(self):
+ self.html2 = self.load("http://www.gamefront.com/" + re.search("(files/service/thankyou\\?id=[A-Za-z0-9]+)",
+ self.html).group(1))
+ return re.search("<a href=\"(http://media[0-9]+\.gamefront.com/.*)\">click here</a>", self.html2).group(1).replace("&amp;", "&")
+
+
+def getInfo(urls):
+ result = []
+
+ for url in urls:
+ html = getURL(url)
+
+ if re.search(GamefrontCom.PATTERN_OFFLINE, html):
+ result.append((url, 0, 1, url))
+ else:
+ name = re.search(GamefrontCom.PATTERN_FILENAME, html)
+ if name is None:
+ result.append((url, 0, 1, url))
+ else:
+ name = name.group(1)
+ size = re.search(GamefrontCom.PATTERN_FILESIZE, html)
+ size = parseFileSize(size.group(1))
+
+ result.append((name, size, 3, url))
+
+ yield result
diff --git a/pyload/plugins/hoster/GigapetaCom.py b/pyload/plugins/hoster/GigapetaCom.py
new file mode 100644
index 000000000..d09a1fb0c
--- /dev/null
+++ b/pyload/plugins/hoster/GigapetaCom.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION
+from random import randint
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class GigapetaCom(SimpleHoster):
+ __name__ = "GigapetaCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?gigapeta\.com/dl/\w+'
+
+ __description__ = """GigaPeta.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<img src=".*" alt="file" />-->\s*(?P<N>.*?)\s*</td>'
+ FILE_SIZE_PATTERN = r'<th>\s*Size\s*</th>\s*<td>\s*(?P<S>.*?)\s*</td>'
+ OFFLINE_PATTERN = r'<div id="page_error">'
+
+ SH_COOKIES = [(".gigapeta.com", "lang", "us")]
+
+
+ def handleFree(self):
+ captcha_key = str(randint(1, 100000000))
+ captcha_url = "http://gigapeta.com/img/captcha.gif?x=%s" % captcha_key
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+
+ for _ in xrange(5):
+ self.checkErrors()
+
+ captcha = self.decryptCaptcha(captcha_url)
+ self.html = self.load(self.pyfile.url, post={
+ "captcha_key": captcha_key,
+ "captcha": captcha,
+ "download": "Download"})
+
+ m = re.search(r"Location\s*:\s*(.*)", self.req.http.header, re.I)
+ if m:
+ download_url = m.group(1)
+ break
+ elif "Entered figures don&#96;t coincide with the picture" in self.html:
+ self.invalidCaptcha()
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
+
+ def checkErrors(self):
+ if "All threads for IP" in self.html:
+ self.logDebug("Your IP is already downloading a file - wait and retry")
+ self.wait(5 * 60, True)
+ self.retry()
+
+
+getInfo = create_getInfo(GigapetaCom)
diff --git a/pyload/plugins/hoster/GooIm.py b/pyload/plugins/hoster/GooIm.py
new file mode 100644
index 000000000..13598a8b6
--- /dev/null
+++ b/pyload/plugins/hoster/GooIm.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# https://goo.im/devs/liquidsmooth/3.x/codina/Nightly/LS-KK-v3.2-2014-08-01-codina.zip
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class GooIm(SimpleHoster):
+ __name__ = "GooIm"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?goo\.im/.+'
+
+ __description__ = """Goo.im hoster plugin"""
+ __author_name__ = "zapp-brannigan"
+ __author_mail__ = "fuerst.reinje@web.de"
+
+ FILE_NAME_PATTERN = r'You will be redirected to .*(?P<N>[^/ ]+) in'
+ OFFLINE_PATTERN = r'The file you requested was not found'
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+
+ def handleFree(self):
+ url = self.pyfile.url
+ self.html = self.load(url, cookies=True)
+ self.wait(10)
+ self.download(url, cookies=True)
+
+
+getInfo = create_getInfo(GooIm)
diff --git a/pyload/plugins/hoster/HellshareCz.py b/pyload/plugins/hoster/HellshareCz.py
new file mode 100644
index 000000000..5f3236876
--- /dev/null
+++ b/pyload/plugins/hoster/HellshareCz.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class HellshareCz(SimpleHoster):
+ __name__ = "HellshareCz"
+ __type__ = "hoster"
+ __version__ = "0.82"
+
+ __pattern__ = r'(http://(?:www\.)?hellshare\.(?:cz|com|sk|hu|pl)/[^?]*/\d+).*'
+
+ __description__ = """Hellshare.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<h1 id="filename"[^>]*>(?P<N>[^<]+)</h1>'
+ FILE_SIZE_PATTERN = r'<strong id="FileSize_master">(?P<S>[0-9.]*)&nbsp;(?P<U>[kKMG])i?B</strong>'
+ OFFLINE_PATTERN = r'<h1>File not found.</h1>'
+ SHOW_WINDOW_PATTERN = r'<a href="([^?]+/(\d+)/\?do=(fileDownloadButton|relatedFileDownloadButton-\2)-showDownloadWindow)"'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True if self.account else False
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ if not self.account:
+ self.fail("User not logged in")
+ pyfile.url = re.match(self.__pattern__, pyfile.url).group(1)
+ self.html = self.load(pyfile.url, decode=True)
+ self.getFileInfo()
+ if not self.checkTrafficLeft():
+ self.fail("Not enough traffic left for user %s." % self.user)
+
+ m = re.search(self.SHOW_WINDOW_PATTERN, self.html)
+ if m is None:
+ self.parseError('SHOW WINDOW')
+ self.url = "http://www.hellshare.com" + m.group(1)
+ self.logDebug("DOWNLOAD URL: " + self.url)
+
+ self.download(self.url)
+
+
+getInfo = create_getInfo(HellshareCz)
diff --git a/pyload/plugins/hoster/HellspyCz.py b/pyload/plugins/hoster/HellspyCz.py
new file mode 100644
index 000000000..68b61caf0
--- /dev/null
+++ b/pyload/plugins/hoster/HellspyCz.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class HellspyCz(DeadHoster):
+ __name__ = "HellspyCz"
+ __type__ = "hoster"
+ __version__ = "0.28"
+
+ __pattern__ = r'http://(?:www\.)?(?:hellspy\.(?:cz|com|sk|hu|pl)|sciagaj.pl)(/\S+/\d+)/?.*'
+
+ __description__ = """HellSpy.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(HellspyCz)
diff --git a/pyload/plugins/hoster/HotfileCom.py b/pyload/plugins/hoster/HotfileCom.py
new file mode 100644
index 000000000..1dd8b4f4e
--- /dev/null
+++ b/pyload/plugins/hoster/HotfileCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class HotfileCom(DeadHoster):
+ __name__ = "HotfileCom"
+ __type__ = "hoster"
+ __version__ = "0.37"
+
+ __pattern__ = r'https?://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+/'
+
+ __description__ = """Hotfile.com hoster plugin"""
+ __author_name__ = ("sitacuisses", "spoob", "mkaay", "JoKoT3")
+ __author_mail__ = ("sitacuisses@yhoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "jokot3@gmail.com")
+
+
+getInfo = create_getInfo(HotfileCom)
diff --git a/pyload/plugins/hoster/HugefilesNet.py b/pyload/plugins/hoster/HugefilesNet.py
new file mode 100644
index 000000000..8a960c7fa
--- /dev/null
+++ b/pyload/plugins/hoster/HugefilesNet.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://hugefiles.net/prthf9ya4w6s
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class HugefilesNet(XFileSharingPro):
+ __name__ = "HugefilesNet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?hugefiles\.net/\w{12}'
+
+ __description__ = """Hugefiles.net hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ HOSTER_NAME = "hugefiles.net"
+
+ FILE_SIZE_PATTERN = r'File Size:</span>\s*<span[^>]*>(?P<S>[^<]+)</span></div>'
+
+
+getInfo = create_getInfo(HugefilesNet)
diff --git a/pyload/plugins/hoster/HundredEightyUploadCom.py b/pyload/plugins/hoster/HundredEightyUploadCom.py
new file mode 100644
index 000000000..29e152c1d
--- /dev/null
+++ b/pyload/plugins/hoster/HundredEightyUploadCom.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://180upload.com/js9qdm6kjnrs
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class HundredEightyUploadCom(XFileSharingPro):
+ __name__ = "HundredEightyUploadCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?180upload\.com/(\w+).*'
+
+ __description__ = """180upload.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ HOSTER_NAME = "180upload.com"
+
+ FILE_NAME_PATTERN = r'Filename:</b></td><td nowrap>(?P<N>.+)</td></tr>-->'
+ FILE_SIZE_PATTERN = r'Size:</b></td><td>(?P<S>[\d.]+) (?P<U>[A-Z]+)\s*<small>'
+
+
+getInfo = create_getInfo(HundredEightyUploadCom)
diff --git a/pyload/plugins/hoster/IFileWs.py b/pyload/plugins/hoster/IFileWs.py
new file mode 100644
index 000000000..45039f8e0
--- /dev/null
+++ b/pyload/plugins/hoster/IFileWs.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class IFileWs(XFileSharingPro):
+ __name__ = "IFileWs"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?ifile\.ws/\w+(/.+)?'
+
+ __description__ = """Ifile.ws hoster plugin"""
+ __author_name__ = "z00nx"
+ __author_mail__ = "z00nx0@gmail.com"
+
+ HOSTER_NAME = "ifile.ws"
+
+ FILE_INFO_PATTERN = r'<h1\s+style="display:inline;">(?P<N>[^<]+)</h1>\s+\[(?P<S>[^]]+)\]'
+ OFFLINE_PATTERN = r'File Not Found|The file was removed by administrator'
+
+
+getInfo = create_getInfo(IFileWs)
diff --git a/pyload/plugins/hoster/IcyFilesCom.py b/pyload/plugins/hoster/IcyFilesCom.py
new file mode 100644
index 000000000..532cd094b
--- /dev/null
+++ b/pyload/plugins/hoster/IcyFilesCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class IcyFilesCom(DeadHoster):
+ __name__ = "IcyFilesCom"
+ __type__ = "hoster"
+ __version__ = "0.06"
+
+ __pattern__ = r'http://(?:www\.)?icyfiles\.com/(.*)'
+
+ __description__ = """IcyFiles.com hoster plugin"""
+ __author_name__ = "godofdream"
+ __author_mail__ = "soilfiction@gmail.com"
+
+
+getInfo = create_getInfo(IcyFilesCom)
diff --git a/pyload/plugins/hoster/IfileIt.py b/pyload/plugins/hoster/IfileIt.py
new file mode 100644
index 000000000..2707edd5a
--- /dev/null
+++ b/pyload/plugins/hoster/IfileIt.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class IfileIt(SimpleHoster):
+ __name__ = "IfileIt"
+ __type__ = "hoster"
+ __version__ = "0.27"
+
+ __pattern__ = r'^unmatchable$'
+
+ __description__ = """Ifile.it"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ LINK_PATTERN = r'</span> If it doesn\'t, <a target="_blank" href="([^"]+)">'
+ RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';"
+ FILE_INFO_PATTERN = r'<span style="cursor: default;[^>]*>\s*(?P<N>.*?)\s*&nbsp;\s*<strong>\s*(?P<S>[0-9.]+)\s*(?P<U>[kKMG])i?B\s*</strong>\s*</span>'
+ OFFLINE_PATTERN = r'<span style="cursor: default;[^>]*>\s*&nbsp;\s*<strong>\s*</strong>\s*</span>'
+ TEMP_OFFLINE_PATTERN = r'<span class="msg_red">Downloading of this file is temporarily disabled</span>'
+
+
+ def handleFree(self):
+ ukey = re.match(self.__pattern__, self.pyfile.url).group(1)
+ json_url = 'http://ifile.it/new_download-request.json'
+ post_data = {"ukey": ukey, "ab": "0"}
+
+ json_response = json_loads(self.load(json_url, post=post_data))
+ self.logDebug(json_response)
+ if json_response['status'] == 3:
+ self.offline()
+
+ if json_response['captcha']:
+ captcha_key = re.search(self.RECAPTCHA_KEY_PATTERN, self.html).group(1)
+ recaptcha = ReCaptcha(self)
+ post_data['ctype'] = "recaptcha"
+
+ for _ in xrange(5):
+ post_data['recaptcha_challenge'], post_data['recaptcha_response'] = recaptcha.challenge(captcha_key)
+ json_response = json_loads(self.load(json_url, post=post_data))
+ self.logDebug(json_response)
+
+ if json_response['retry']:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("Incorrect captcha")
+
+ if not "ticket_url" in json_response:
+ self.parseError("Download URL")
+
+ self.download(json_response['ticket_url'])
+
+
+getInfo = create_getInfo(IfileIt)
diff --git a/pyload/plugins/hoster/IfolderRu.py b/pyload/plugins/hoster/IfolderRu.py
new file mode 100644
index 000000000..4f84e6b32
--- /dev/null
+++ b/pyload/plugins/hoster/IfolderRu.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class IfolderRu(SimpleHoster):
+ __name__ = "IfolderRu"
+ __type__ = "hoster"
+ __version__ = "0.38"
+
+ __pattern__ = r'http://(?:www\.)?(?:ifolder\.ru|rusfolder\.(?:com|net|ru))/(?:files/)?(?P<ID>\d+).*'
+
+ __description__ = """Ifolder.ru hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_SIZE_REPLACEMENTS = [(u'Кб', 'KB'), (u'Мб', 'MB'), (u'Гб', 'GB')]
+ FILE_NAME_PATTERN = ur'(?:<div><span>)?НазваМОе:(?:</span>)? <b>(?P<N>[^<]+)</b><(?:/div|br)>'
+ FILE_SIZE_PATTERN = ur'(?:<div><span>)?РазЌер:(?:</span>)? <b>(?P<S>[^<]+)</b><(?:/div|br)>'
+ OFFLINE_PATTERN = ur'<p>Ѐайл МПЌер <b>[^<]*</b> (Ме МайЎеМ|уЎалеМ) !!!</p>'
+
+ SESSION_ID_PATTERN = r'<a href=(http://ints.(?:rusfolder.com|ifolder.ru)/ints/sponsor/\?bi=\d*&session=([^&]+)&u=[^>]+)>'
+ INTS_SESSION_PATTERN = r'\(\'ints_session\'\);\s*if\(tag\)\{tag.value = "([^"]+)";\}'
+ HIDDEN_INPUT_PATTERN = r"var v = .*?name='([^']+)' value='1'"
+ LINK_PATTERN = r'<a id="download_file_href" href="([^"]+)"'
+ WRONG_CAPTCHA_PATTERN = ur'<font color=Red>МеверМый кПЎ,<br>ввеЎОте еще раз</font><br>'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True if self.account else False
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ file_id = re.match(self.__pattern__, pyfile.url).group('ID')
+ self.html = self.load("http://rusfolder.com/%s" % file_id, cookies=True, decode=True)
+ self.getFileInfo()
+
+ url = re.search(r"location\.href = '(http://ints\..*?=)'", self.html).group(1)
+ self.html = self.load(url, cookies=True, decode=True)
+
+ url, session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups()
+ self.html = self.load(url, cookies=True, decode=True)
+
+ url = "http://ints.rusfolder.com/ints/frame/?session=%s" % session_id
+ self.html = self.load(url, cookies=True)
+
+ self.wait(31, False)
+
+ captcha_url = "http://ints.rusfolder.com/random/images/?session=%s" % session_id
+ for _ in xrange(5):
+ self.html = self.load(url, cookies=True)
+ action, inputs = self.parseHtmlForm('ID="Form1"')
+ inputs['ints_session'] = re.search(self.INTS_SESSION_PATTERN, self.html).group(1)
+ inputs[re.search(self.HIDDEN_INPUT_PATTERN, self.html).group(1)] = '1'
+ inputs['confirmed_number'] = self.decryptCaptcha(captcha_url, cookies=True)
+ inputs['action'] = '1'
+ self.logDebug(inputs)
+
+ self.html = self.load(url, decode=True, cookies=True, post=inputs)
+ if self.WRONG_CAPTCHA_PATTERN in self.html:
+ self.invalidCaptcha()
+ else:
+ break
+ else:
+ self.fail("Invalid captcha")
+
+ download_url = re.search(self.LINK_PATTERN, self.html).group(1)
+ self.correctCaptcha()
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
+
+
+getInfo = create_getInfo(IfolderRu)
diff --git a/pyload/plugins/hoster/JumbofilesCom.py b/pyload/plugins/hoster/JumbofilesCom.py
new file mode 100644
index 000000000..d3ee9ee9b
--- /dev/null
+++ b/pyload/plugins/hoster/JumbofilesCom.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class JumbofilesCom(SimpleHoster):
+ __name__ = "JumbofilesCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?jumbofiles.com/(\w{12}).*'
+
+ __description__ = """JumboFiles.com hoster plugin"""
+ __author_name__ = "godofdream"
+ __author_mail__ = "soilfiction@gmail.com"
+
+ FILE_INFO_PATTERN = r'<TR><TD>(?P<N>[^<]+?)\s*<small>\((?P<S>[\d.]+)\s*(?P<U>[KMG][bB])\)</small></TD></TR>'
+ OFFLINE_PATTERN = r'Not Found or Deleted / Disabled due to inactivity or DMCA'
+ LINK_PATTERN = r'<meta http-equiv="refresh" content="10;url=(.+)">'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def handleFree(self):
+ ukey = re.match(self.__pattern__, self.pyfile.url).group(1)
+ post_data = {"id": ukey, "op": "download3", "rand": ""}
+ html = self.load(self.pyfile.url, post=post_data, decode=True)
+ url = re.search(self.LINK_PATTERN, html).group(1)
+ self.logDebug("Download " + url)
+ self.download(url)
+
+
+getInfo = create_getInfo(JumbofilesCom)
diff --git a/pyload/plugins/hoster/Keep2shareCC.py b/pyload/plugins/hoster/Keep2shareCC.py
new file mode 100644
index 000000000..088a1b012
--- /dev/null
+++ b/pyload/plugins/hoster/Keep2shareCC.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://k2s.cc/file/55fb73e1c00c5/random.bin
+
+import re
+
+from urlparse import urlparse, urljoin
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class Keep2shareCC(SimpleHoster):
+ __name__ = "Keep2shareCC"
+ __type__ = "hoster"
+ __version__ = "0.10"
+
+ __pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
+
+ __description__ = """Keep2share.cc hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_NAME_PATTERN = r'File: <span>(?P<N>.+)</span>'
+ FILE_SIZE_PATTERN = r'Size: (?P<S>[^<]+)</div>'
+ OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404'
+
+ LINK_PATTERN = r'To download this file with slow speed, use <a href="([^"]+)">this link</a>'
+ WAIT_PATTERN = r'Please wait ([\d:]+) to download this file'
+ ALREADY_DOWNLOADING_PATTERN = r'Free account does not allow to download more than one file at the same time'
+
+ RECAPTCHA_KEY = "6LcYcN0SAAAAABtMlxKj7X0hRxOY8_2U86kI1vbb"
+
+
+ def handleFree(self):
+ self.sanitize_url()
+ self.html = self.load(self.pyfile.url)
+
+ self.fid = re.search(r'<input type="hidden" name="slow_id" value="([^"]+)">', self.html).group(1)
+ self.html = self.load(self.pyfile.url, post={'yt0': '', 'slow_id': self.fid})
+
+ m = re.search(r"function download\(\){.*window\.location\.href = '([^']+)';", self.html, re.DOTALL)
+ if m: # Direct mode
+ self.startDownload(m.group(1))
+ else:
+ self.handleCaptcha()
+
+ self.wait(30)
+
+ self.html = self.load(self.pyfile.url, post={'uniqueId': self.fid, 'free': 1})
+
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ self.logDebug('Hoster told us to wait for %s' % m.group(1))
+ # string to time convert courtesy of https://stackoverflow.com/questions/10663720
+ ftr = [3600, 60, 1]
+ wait_time = sum([a * b for a, b in zip(ftr, map(int, m.group(1).split(':')))])
+ self.wait(wait_time, reconnect=True)
+ self.retry()
+
+ m = re.search(self.ALREADY_DOWNLOADING_PATTERN, self.html)
+ if m:
+ # if someone is already downloading on our line, wait 30min and retry
+ self.logDebug('Already downloading, waiting for 30 minutes')
+ self.wait(30 * 60, reconnect=True)
+ self.retry()
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("Unable to detect direct link")
+ self.startDownload(m.group(1))
+
+ def handleCaptcha(self):
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response,
+ 'CaptchaForm%5Bcode%5D': '',
+ 'free': 1,
+ 'freeDownloadRequest': 1,
+ 'uniqueId': self.fid,
+ 'yt0': ''}
+
+ self.html = self.load(self.pyfile.url, post=post_data)
+
+ if 'recaptcha' not in self.html:
+ self.correctCaptcha()
+ break
+ else:
+ self.logInfo('Wrong captcha')
+ self.invalidCaptcha()
+ else:
+ self.fail("All captcha attempts failed")
+
+ def startDownload(self, url):
+ d = urljoin(self.base_url, url)
+ self.logDebug('Direct Link: ' + d)
+ self.download(d, disposition=True)
+
+ def sanitize_url(self):
+ header = self.load(self.pyfile.url, just_header=True)
+ if 'location' in header:
+ self.pyfile.url = header['location']
+ p = urlparse(self.pyfile.url)
+ self.base_url = "%s://%s" % (p.scheme, p.hostname)
+
+
+getInfo = create_getInfo(Keep2shareCC)
diff --git a/pyload/plugins/hoster/LemUploadsCom.py b/pyload/plugins/hoster/LemUploadsCom.py
new file mode 100644
index 000000000..8556e3c9c
--- /dev/null
+++ b/pyload/plugins/hoster/LemUploadsCom.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://lemuploads.com/uwol0aly9dld
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class LemUploadsCom(XFileSharingPro):
+ __name__ = "LemUploadsCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?lemuploads.com/\w{12}'
+
+ __description__ = """LemUploads.com hoster plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ HOSTER_NAME = "lemuploads.com"
+
+ OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
+ FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>'
+
+
+getInfo = create_getInfo(LemUploadsCom)
diff --git a/pyload/plugins/hoster/LetitbitNet.py b/pyload/plugins/hoster/LetitbitNet.py
new file mode 100644
index 000000000..3a8e28a90
--- /dev/null
+++ b/pyload/plugins/hoster/LetitbitNet.py
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+#
+# API Documentation:
+# http://api.letitbit.net/reg/static/api.pdf
+#
+# Test links:
+# http://letitbit.net/download/07874.0b5709a7d3beee2408bb1f2eefce/random.bin.html
+
+import re
+
+from urllib import urlencode, urlopen
+
+from pyload.common.json_layer import json_loads, json_dumps
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster
+
+
+def api_download_info(url):
+ json_data = ["yw7XQy2v9", ["download/info", {"link": url}]]
+ post_data = urlencode({'r': json_dumps(json_data)})
+ api_rep = urlopen("http://api.letitbit.net/json", data=post_data).read()
+ return json_loads(api_rep)
+
+
+def getInfo(urls):
+ for url in urls:
+ api_rep = api_download_info(url)
+ if api_rep['status'] == 'OK':
+ info = api_rep['data'][0]
+ yield (info['name'], info['size'], 2, url)
+ else:
+ yield (url, 0, 1, url)
+
+
+class LetitbitNet(SimpleHoster):
+ __name__ = "LetitbitNet"
+ __type__ = "hoster"
+ __version__ = "0.24"
+
+ __pattern__ = r'http://(?:www\.)?(letitbit|shareflare).net/download/.*'
+
+ __description__ = """Letitbit.net hoster plugin"""
+ __author_name__ = ("zoidberg", "z00nx")
+ __author_mail__ = ("zoidberg@mujmail.cz", "z00nx0@gmail.com")
+
+ FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "letitbit.net")]
+
+ HOSTER_NAME = "letitbit.net"
+
+ SECONDS_PATTERN = r'seconds\s*=\s*(\d+);'
+ CAPTCHA_CONTROL_FIELD = r"recaptcha_control_field\s=\s'(?P<value>[^']+)'"
+ RECAPTCHA_KEY = "6Lc9zdMSAAAAAF-7s2wuQ-036pLRbM0p8dDaQdAM"
+
+
+ def setup(self):
+ self.resumeDownload = True
+ #TODO confirm that resume works
+
+ def getFileInfo(self):
+ api_rep = api_download_info(self.pyfile.url)
+ if api_rep['status'] == 'OK':
+ self.api_data = api_rep['data'][0]
+ self.pyfile.name = self.api_data['name']
+ self.pyfile.size = self.api_data['size']
+ else:
+ self.offline()
+
+ def handleFree(self):
+ action, inputs = self.parseHtmlForm('id="ifree_form"')
+ if not action:
+ self.parseError("page 1 / ifree_form")
+
+ domain = "http://www." + self.HOSTER_NAME
+ self.pyfile.size = float(inputs['sssize'])
+ self.logDebug(action, inputs)
+ inputs['desc'] = ""
+
+ self.html = self.load(domain + action, post=inputs, cookies=True)
+
+ # action, inputs = self.parseHtmlForm('id="d3_form"')
+ # if not action:
+ # self.parseError("page 2 / d3_form")
+ # self.logDebug(action, inputs)
+ #
+ # self.html = self.load(action, post = inputs, cookies = True)
+ #
+ # try:
+ # ajax_check_url, captcha_url = re.search(self.CHECK_URL_PATTERN, self.html).groups()
+ # m = re.search(self.SECONDS_PATTERN, self.html)
+ # seconds = int(m.group(1)) if m else 60
+ # self.wait(seconds+1)
+ # except Exception, e:
+ # self.logError(e)
+ # self.parseError("page 3 / js")
+
+ m = re.search(self.SECONDS_PATTERN, self.html)
+ seconds = int(m.group(1)) if m else 60
+ self.logDebug("Seconds found", seconds)
+ m = re.search(self.CAPTCHA_CONTROL_FIELD, self.html)
+ recaptcha_control_field = m.group(1)
+ self.logDebug("ReCaptcha control field found", recaptcha_control_field)
+ self.wait(seconds + 1)
+
+ response = self.load("%s/ajax/download3.php" % domain, post=" ", cookies=True)
+ if response != '1':
+ self.parseError('Unknown response - ajax_check_url')
+ self.logDebug(response)
+
+ recaptcha = ReCaptcha(self)
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response,
+ "recaptcha_control_field": recaptcha_control_field}
+ self.logDebug("Post data to send", post_data)
+ response = self.load('%s/ajax/check_recaptcha.php' % domain, post=post_data, cookies=True)
+ self.logDebug(response)
+ if not response:
+ self.invalidCaptcha()
+ if response == "error_free_download_blocked":
+ self.logWarning("Daily limit reached")
+ self.wait(secondsToMidnight(gmt=2), True)
+ if response == "error_wrong_captcha":
+ self.logError("Wrong Captcha")
+ self.invalidCaptcha()
+ self.retry()
+ elif response.startswith('['):
+ urls = json_loads(response)
+ elif response.startswith('http://'):
+ urls = [response]
+ else:
+ self.parseError("Unknown response - captcha check")
+
+ self.correctCaptcha()
+
+ for download_url in urls:
+ try:
+ self.logDebug("Download URL", download_url)
+ self.download(download_url)
+ break
+ except Exception, e:
+ self.logError(e)
+ else:
+ self.fail("Download did not finish correctly")
+
+ def handlePremium(self):
+ api_key = self.user
+ premium_key = self.account.getAccountData(self.user)['password']
+
+ json_data = [api_key, ["download/direct_links", {"pass": premium_key, "link": self.pyfile.url}]]
+ api_rep = self.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
+ self.logDebug('API Data: ' + api_rep)
+ api_rep = json_loads(api_rep)
+
+ if api_rep['status'] == 'FAIL':
+ self.fail(api_rep['data'])
+
+ direct_link = api_rep['data'][0][0]
+ self.logDebug('Direct Link: ' + direct_link)
+
+ self.download(direct_link, disposition=True)
diff --git a/pyload/plugins/hoster/LinksnappyCom.py b/pyload/plugins/hoster/LinksnappyCom.py
new file mode 100644
index 000000000..aed74d09b
--- /dev/null
+++ b/pyload/plugins/hoster/LinksnappyCom.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urlparse import urlsplit
+
+from pyload.common.json_layer import json_loads, json_dumps
+from pyload.plugins.Hoster import Hoster
+
+
+class LinksnappyCom(Hoster):
+ __name__ = "LinksnappyCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?linksnappy\.com'
+
+ __description__ = """Linksnappy.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ SINGLE_CHUNK_HOSTERS = ('easybytez.com')
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Linksnappy.com")
+ self.fail("No Linksnappy.com account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ host = self._get_host(pyfile.url)
+ json_params = json_dumps({'link': pyfile.url,
+ 'type': host,
+ 'username': self.user,
+ 'password': self.account.getAccountData(self.user)['password']})
+ r = self.load('http://gen.linksnappy.com/genAPI.php',
+ post={'genLinks': json_params})
+ self.logDebug("JSON data: " + r)
+
+ j = json_loads(r)['links'][0]
+
+ if j['error']:
+ self.logError('Error converting the link: %s' % j['error'])
+ self.fail('Error converting the link')
+
+ pyfile.name = j['filename']
+ new_url = j['generated']
+
+ if host in self.SINGLE_CHUNK_HOSTERS:
+ self.chunkLimit = 1
+ else:
+ self.setup()
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: " + new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload({"html302": "<title>302 Found</title>"})
+ if check == "html302":
+ self.retry(wait_time=5, reason="Linksnappy returns only HTML data.")
+
+ @staticmethod
+ def _get_host(url):
+ host = urlsplit(url).netloc
+ return re.search(r'[\w-]+\.\w+$', host).group(0)
diff --git a/pyload/plugins/hoster/LoadTo.py b/pyload/plugins/hoster/LoadTo.py
new file mode 100644
index 000000000..bd931f91e
--- /dev/null
+++ b/pyload/plugins/hoster/LoadTo.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://www.load.to/JWydcofUY6/random.bin
+# http://www.load.to/oeSmrfkXE/random100.bin
+
+import re
+
+from pyload.plugins.internal.CaptchaService import SolveMedia
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class LoadTo(SimpleHoster):
+ __name__ = "LoadTo"
+ __type__ = "hoster"
+ __version__ = "0.16"
+
+ __pattern__ = r'http://(?:www\.)?load\.to/\w+'
+
+ __description__ = """ Load.to hoster plugin """
+ __author_name__ = ("halfman", "stickell")
+ __author_mail__ = ("Pulpan3@gmail.com", "l.stickell@yahoo.it")
+
+ FILE_NAME_PATTERN = r'<h1>(?P<N>.+)</h1>'
+ FILE_SIZE_PATTERN = r'Size: (?P<S>[\d.]+) (?P<U>\w+)'
+ OFFLINE_PATTERN = r'>Can\'t find file'
+
+ LINK_PATTERN = r'<form method="post" action="(.+?)"'
+ WAIT_PATTERN = r'type="submit" value="Download \((\d+)\)"'
+ SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)'
+
+ FILE_URL_REPLACEMENTS = [(r'(\w)$', r'\1/')]
+
+
+ def setup(self):
+ self.multiDL = True
+ self.chunkLimit = 1
+
+
+ def handleFree(self):
+ # Search for Download URL
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("Unable to detect download URL")
+
+ download_url = m.group(1)
+
+ # Set Timer - may be obsolete
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ self.wait(m.group(1))
+
+ # Load.to is using solvemedia captchas since ~july 2014:
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m is None:
+ self.download(download_url)
+ else:
+ captcha_key = m.group(1)
+ solvemedia = SolveMedia(self)
+ captcha_challenge, captcha_response = solvemedia.challenge(captcha_key)
+ self.download(download_url, post={"adcopy_challenge": captcha_challenge, "adcopy_response": captcha_response})
+ check = self.checkDownload({"404": re.compile("\A<h1>404 Not Found</h1>")})
+ if check == "404":
+ self.logWarning("The captcha you entered was incorrect. Please try again.")
+ self.invalidCaptcha()
+ self.retry()
+
+
+getInfo = create_getInfo(LoadTo)
diff --git a/pyload/plugins/hoster/LomafileCom.py b/pyload/plugins/hoster/LomafileCom.py
new file mode 100644
index 000000000..942afa1f4
--- /dev/null
+++ b/pyload/plugins/hoster/LomafileCom.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class LomafileCom(SimpleHoster):
+ __name__ = "LomafileCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'https?://lomafile\.com/.+/[\w\.]+'
+
+ __description__ = """ Lomafile.com hoster plugin """
+ __author_name__ = "nath_schwarz"
+ __author_mail__ = "nathan.notwhite@gmail.com"
+
+ FILE_NAME_PATTERN = r'Filename:[^>]*>(?P<N>[\w\.]+)'
+ FILE_SIZE_PATTERN = r'\((?P<S>\d+)\s(?P<U>\w+)\)'
+ OFFLINE_PATTERN = r'Software error'
+
+
+ def handleFree(self):
+ for _ in range(3):
+ captcha_id = re.search(r'src="http://lomafile\.com/captchas/(?P<id>\w+)\.jpg"', self.html)
+ if not captcha_id:
+ self.parseError("Unable to parse captcha id.")
+ else:
+ captcha_id = captcha_id.group("id")
+
+ form_id = re.search(r'name="id" value="(?P<id>\w+)"', self.html)
+ if not form_id:
+ self.parseError("Unable to parse form id")
+ else:
+ form_id = form_id.group("id")
+
+ captcha = self.decryptCaptcha("http://lomafile.com/captchas/" + captcha_id + ".jpg")
+
+ self.wait(60)
+
+ self.html = self.load(self.pyfile.url, post={
+ "op": "download2",
+ "id": form_id,
+ "rand": captcha_id,
+ "code": captcha,
+ "down_direct": "1"})
+
+ download_url = re.search(r'http://[\d\.]+:\d+/d/\w+/[\w\.]+', self.html)
+ if download_url is None:
+ self.invalidCaptcha()
+ self.logDebug("Invalid captcha.")
+ else:
+ download_url = download_url.group(0)
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
+ else:
+ self.fail("Invalid captcha-code entered.")
+
+
+getInfo = create_getInfo(LomafileCom)
diff --git a/pyload/plugins/hoster/LuckyShareNet.py b/pyload/plugins/hoster/LuckyShareNet.py
new file mode 100644
index 000000000..cafddb0a8
--- /dev/null
+++ b/pyload/plugins/hoster/LuckyShareNet.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.lib.bottle import json_loads
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class LuckyShareNet(SimpleHoster):
+ __name__ = "LuckyShareNet"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?luckyshare.net/(?P<ID>\d{10,})'
+
+ __description__ = """LuckyShare.net hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ FILE_INFO_PATTERN = r"<h1 class='file_name'>(?P<N>\S+)</h1>\s*<span class='file_size'>Filesize: (?P<S>[\d.]+)(?P<U>\w+)</span>"
+ OFFLINE_PATTERN = r'There is no such file available'
+ RECAPTCHA_KEY = "6LdivsgSAAAAANWh-d7rPE1mus4yVWuSQIJKIYNw"
+
+
+ def parseJson(self, rep):
+ if 'AJAX Error' in rep:
+ html = self.load(self.pyfile.url, decode=True)
+ m = re.search(r"waitingtime = (\d+);", html)
+ if m:
+ waittime = int(m.group(1))
+ self.logDebug('You have to wait %d seconds between free downloads' % waittime)
+ self.retry(wait_time=waittime)
+ else:
+ self.parseError('Unable to detect wait time between free downloads')
+ elif 'Hash expired' in rep:
+ self.retry(reason="Hash expired")
+ return json_loads(rep)
+
+ # TODO: There should be a filesize limit for free downloads
+ # TODO: Some files could not be downloaded in free mode
+ def handleFree(self):
+ file_id = re.match(self.__pattern__, self.pyfile.url).group('ID')
+ self.logDebug('File ID: ' + file_id)
+ rep = self.load(r"http://luckyshare.net/download/request/type/time/file/" + file_id, decode=True)
+ self.logDebug('JSON: ' + rep)
+ json = self.parseJson(rep)
+
+ self.wait(int(json['time']))
+
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" %
+ (challenge, response, json['hash']), decode=True)
+ self.logDebug('JSON: ' + rep)
+ if 'link' in rep:
+ json.update(self.parseJson(rep))
+ self.correctCaptcha()
+ break
+ elif 'Verification failed' in rep:
+ self.logInfo('Wrong captcha')
+ self.invalidCaptcha()
+ else:
+ self.parseError('Unable to get downlaod link')
+
+ if not json['link']:
+ self.fail("No Download url retrieved/all captcha attempts failed")
+
+ self.logDebug('Direct URL: ' + json['link'])
+ self.download(json['link'])
+
+
+getInfo = create_getInfo(LuckyShareNet)
diff --git a/pyload/plugins/hoster/MediafireCom.py b/pyload/plugins/hoster/MediafireCom.py
new file mode 100644
index 000000000..bbf9f06b6
--- /dev/null
+++ b/pyload/plugins/hoster/MediafireCom.py
@@ -0,0 +1,125 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.CaptchaService import SolveMedia
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+from pyload.network.RequestFactory import getURL
+
+
+def replace_eval(js_expr):
+ return js_expr.replace(r'eval("', '').replace(r"\'", r"'").replace(r'\"', r'"')
+
+
+def checkHTMLHeader(url):
+ try:
+ for _ in xrange(3):
+ header = getURL(url, just_header=True)
+ for line in header.splitlines():
+ line = line.lower()
+ if 'location' in line:
+ url = line.split(':', 1)[1].strip()
+ if 'error.php?errno=320' in url:
+ return url, 1
+ if not url.startswith('http://'):
+ url = 'http://www.mediafire.com' + url
+ break
+ elif 'content-disposition' in line:
+ return url, 2
+ else:
+ break
+ except:
+ return url, 3
+
+ return url, 0
+
+
+def getInfo(urls):
+ for url in urls:
+ location, status = checkHTMLHeader(url)
+ if status:
+ file_info = (url, 0, status, url)
+ else:
+ file_info = parseFileInfo(MediafireCom, url, getURL(url, decode=True))
+ yield file_info
+
+
+class MediafireCom(SimpleHoster):
+ __name__ = "MediafireCom"
+ __type__ = "hoster"
+ __version__ = "0.79"
+
+ __pattern__ = r'http://(?:www\.)?mediafire\.com/(file/|(view/?|download.php)?\?)(\w{11}|\w{15})($|/)'
+
+ __description__ = """Mediafire.com hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ LINK_PATTERN = r'<div class="download_link"[^>]*(?:z-index:(?P<zindex>\d+))?[^>]*>\s*<a href="(?P<href>http://[^"]+)"'
+ JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);[^{]*{((\w+)='';.*?)eval\(\2\);"
+ JS_ZMODULO_PATTERN = r"\('z-index'\)\) \% (\d+)\)\);"
+ SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)'
+ PAGE1_ACTION_PATTERN = r'<link rel="canonical" href="([^"]+)"/>'
+ PASSWORD_PATTERN = r'<form name="form_password"'
+
+ FILE_NAME_PATTERN = r'<META NAME="description" CONTENT="(?P<N>[^"]+)"/>'
+ FILE_INFO_PATTERN = r"oFileSharePopup\.ald\('(?P<ID>[^']*)','(?P<N>[^']*)','(?P<S>[^']*)','','(?P<sha256>[^']*)'\)"
+ OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>'
+
+
+ def setup(self):
+ self.multiDL = False
+
+ def process(self, pyfile):
+ pyfile.url = re.sub(r'/view/?\?', '/?', pyfile.url)
+
+ self.url, result = checkHTMLHeader(pyfile.url)
+ self.logDebug('Location (%d): %s' % (result, self.url))
+
+ if result == 0:
+ self.html = self.load(self.url, decode=True)
+ self.checkCaptcha()
+ self.multiDL = True
+ self.check_data = self.getFileInfo()
+
+ if self.account:
+ self.handlePremium()
+ else:
+ self.handleFree()
+ elif result == 1:
+ self.offline()
+ else:
+ self.multiDL = True
+ self.download(self.url, disposition=True)
+
+ def handleFree(self):
+ passwords = self.getPassword().splitlines()
+ while self.PASSWORD_PATTERN in self.html:
+ if len(passwords):
+ password = passwords.pop(0)
+ self.logInfo("Password protected link, trying " + password)
+ self.html = self.load(self.url, post={"downloadp": password})
+ else:
+ self.fail("No or incorrect password")
+
+ m = re.search(r'kNO = r"(http://.*?)";', self.html)
+ if m is None:
+ self.parseError("Download URL")
+ download_url = m.group(1)
+ self.logDebug("DOWNLOAD LINK:", download_url)
+
+ self.download(download_url)
+
+ def checkCaptcha(self):
+ for _ in xrange(5):
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ solvemedia = SolveMedia(self)
+ captcha_challenge, captcha_response = solvemedia.challenge(captcha_key)
+ self.html = self.load(self.url, post={"adcopy_challenge": captcha_challenge,
+ "adcopy_response": captcha_response}, decode=True)
+ else:
+ break
+ else:
+ self.fail("No valid recaptcha solution received")
diff --git a/pyload/plugins/hoster/MegaDebridEu.py b/pyload/plugins/hoster/MegaDebridEu.py
new file mode 100644
index 000000000..6c980009e
--- /dev/null
+++ b/pyload/plugins/hoster/MegaDebridEu.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote_plus
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+class MegaDebridEu(Hoster):
+ __name__ = "MegaDebridEu"
+ __type__ = "hoster"
+ __version__ = "0.4"
+
+ __pattern__ = r'^https?://(?:w{3}\d+\.mega-debrid.eu|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/download/file/[^/]+/.+$'
+
+ __description__ = """mega-debrid.eu hoster plugin"""
+ __author_name__ = "D.Ducatel"
+ __author_mail__ = "dducatel@je-geek.fr"
+
+ API_URL = "https://www.mega-debrid.eu/api.php"
+
+
+ def getFilename(self, url):
+ try:
+ return unquote_plus(url.rsplit("/", 1)[1])
+ except IndexError:
+ return ""
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.exitOnFail(_("Please enter your %s account or deactivate this plugin") % "Mega-debrid.eu")
+ else:
+ if not self.connectToApi():
+ self.exitOnFail(_("Unable to connect to %s") % "Mega-debrid.eu")
+
+ self.logDebug("Old URL: %s" % pyfile.url)
+ new_url = self.debridLink(pyfile.url)
+ self.logDebug("New URL: " + new_url)
+
+ filename = self.getFilename(new_url)
+ if filename != "":
+ pyfile.name = filename
+ self.download(new_url, disposition=True)
+
+ def connectToApi(self):
+ """
+ Connexion to the mega-debrid API
+ Return True if succeed
+ """
+ user, data = self.account.selectAccount()
+ jsonResponse = self.load(self.API_URL,
+ get={'action': 'connectUser', 'login': user, 'password': data['password']})
+ response = json_loads(jsonResponse)
+
+ if response['response_code'] == "ok":
+ self.token = response['token']
+ return True
+ else:
+ return False
+
+ def debridLink(self, linkToDebrid):
+ """
+ Debrid a link
+ Return The debrided link if succeed or original link if fail
+ """
+ jsonResponse = self.load(self.API_URL, get={'action': 'getLink', 'token': self.token},
+ post={"link": linkToDebrid})
+ response = json_loads(jsonResponse)
+
+ if response['response_code'] == "ok":
+ debridedLink = response['debridLink'][1:-1]
+ return debridedLink
+ else:
+ self.exitOnFail("Unable to debrid %s" % linkToDebrid)
+
+ def exitOnFail(self, msg):
+ """
+ exit the plugin on fail case
+ And display the reason of this failure
+ """
+ if self.getConfig("unloadFailing"):
+ self.logError(msg)
+ self.resetAccount()
+ else:
+ self.fail(msg)
diff --git a/pyload/plugins/hoster/MegaFilesSe.py b/pyload/plugins/hoster/MegaFilesSe.py
new file mode 100644
index 000000000..48306cd7f
--- /dev/null
+++ b/pyload/plugins/hoster/MegaFilesSe.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class MegaFilesSe(XFileSharingPro):
+ __name__ = "MegaFilesSe"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?megafiles\.se/\w{12}'
+
+ __description__ = """MegaFiles.se hoster plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ HOSTER_NAME = "megafiles.se"
+
+ OFFLINE_PATTERN = r'<b><font[^>]*>File Not Found</font></b><br><br>'
+ FILE_NAME_PATTERN = r'<div[^>]+>\s*<b>(?P<N>[^<]+)</b>\s*</div>'
+
+
+getInfo = create_getInfo(MegaFilesSe)
diff --git a/pyload/plugins/hoster/MegaNz.py b/pyload/plugins/hoster/MegaNz.py
new file mode 100644
index 000000000..801df9c9d
--- /dev/null
+++ b/pyload/plugins/hoster/MegaNz.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+
+import random
+import re
+
+from Crypto.Cipher import AES
+from Crypto.Util import Counter
+from array import array
+from base64 import standard_b64decode
+from os import remove
+
+from pyload.common.json_layer import json_loads, json_dumps
+from pyload.plugins.Hoster import Hoster
+
+
+class MegaNz(Hoster):
+ __name__ = "MegaNz"
+ __type__ = "hoster"
+ __version__ = "0.14"
+
+ __pattern__ = r'https?://([a-z0-9]+\.)?mega\.co\.nz/#!([a-zA-Z0-9!_\-]+)'
+
+ __description__ = """Mega.co.nz hoster plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "ranan@pyload.org"
+
+ API_URL = "https://g.api.mega.co.nz/cs?id=%d"
+ FILE_SUFFIX = ".crypted"
+
+
+ def b64_decode(self, data):
+ data = data.replace("-", "+").replace("_", "/")
+ return standard_b64decode(data + '=' * (-len(data) % 4))
+
+ def getCipherKey(self, key):
+ """ Construct the cipher key from the given data """
+ a = array("I", key)
+ key_array = array("I", [a[0] ^ a[4], a[1] ^ a[5], a[2] ^ a[6], a[3] ^ a[7]])
+ return key_array
+
+ def callApi(self, **kwargs):
+ """ Dispatch a call to the api, see https://mega.co.nz/#developers """
+ # generate a session id, no idea where to obtain elsewhere
+ uid = random.randint(10 << 9, 10 ** 10)
+
+ resp = self.load(self.API_URL % uid, post=json_dumps([kwargs]))
+ self.logDebug("Api Response: " + resp)
+ return json_loads(resp)
+
+ def decryptAttr(self, data, key):
+
+ cbc = AES.new(self.getCipherKey(key), AES.MODE_CBC, "\0" * 16)
+ attr = cbc.decrypt(self.b64_decode(data))
+ self.logDebug("Decrypted Attr: " + attr)
+ if not attr.startswith("MEGA"):
+ self.fail(_("Decryption failed"))
+
+ # Data is padded, 0-bytes must be stripped
+ return json_loads(attr.replace("MEGA", "").rstrip("\0").strip())
+
+ def decryptFile(self, key):
+ """ Decrypts the file at lastDownload` """
+
+ # upper 64 bit of counter start
+ n = key[16:24]
+
+ # convert counter to long and shift bytes
+ ctr = Counter.new(128, initial_value=long(n.encode("hex"), 16) << 64)
+ cipher = AES.new(self.getCipherKey(key), AES.MODE_CTR, counter=ctr)
+
+ self.pyfile.setStatus("decrypting")
+
+ file_crypted = self.lastDownload
+ file_decrypted = file_crypted.rsplit(self.FILE_SUFFIX)[0]
+ f = open(file_crypted, "rb")
+ df = open(file_decrypted, "wb")
+
+ # TODO: calculate CBC-MAC for checksum
+
+ size = 2 ** 15 # buffer size, 32k
+ while True:
+ buf = f.read(size)
+ if not buf:
+ break
+
+ df.write(cipher.decrypt(buf))
+
+ f.close()
+ df.close()
+ remove(file_crypted)
+
+ self.lastDownload = file_decrypted
+
+ def process(self, pyfile):
+
+ key = None
+
+ # match is guaranteed because plugin was chosen to handle url
+ node = re.match(self.__pattern__, pyfile.url).group(2)
+ if "!" in node:
+ node, key = node.split("!")
+
+ self.logDebug("File id: %s | Key: %s" % (node, key))
+
+ if not key:
+ self.fail(_("No file key provided in the URL"))
+
+ # g is for requesting a download url
+ # this is similar to the calls in the mega js app, documentation is very bad
+ dl = self.callApi(a="g", g=1, p=node, ssl=1)[0]
+
+ if "e" in dl:
+ e = dl['e']
+ # ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later
+ if e == -18:
+ self.retry()
+ else:
+ self.fail(_("Error code:") + e)
+
+ # TODO: map other error codes, e.g
+ # EACCESS (-11): Access violation (e.g., trying to write to a read-only share)
+
+ key = self.b64_decode(key)
+ attr = self.decryptAttr(dl['at'], key)
+
+ pyfile.name = attr['n'] + self.FILE_SUFFIX
+
+ self.download(dl['g'])
+ self.decryptFile(key)
+
+ # Everything is finished and final name can be set
+ pyfile.name = attr['n']
diff --git a/pyload/plugins/hoster/MegacrypterCom.py b/pyload/plugins/hoster/MegacrypterCom.py
new file mode 100644
index 000000000..0cc17bfe3
--- /dev/null
+++ b/pyload/plugins/hoster/MegacrypterCom.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads, json_dumps
+from pyload.plugins.hoster.MegaNz import MegaNz
+
+
+class MegacrypterCom(MegaNz):
+ __name__ = "MegacrypterCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'(https?://[a-z0-9]{0,10}\.?megacrypter\.com/[a-zA-Z0-9!_\-]+)'
+
+ __description__ = """Megacrypter.com decrypter plugin"""
+ __author_name__ = "GonzaloSR"
+ __author_mail__ = "gonzalo@gonzalosr.com"
+
+ API_URL = "http://megacrypter.com/api"
+ FILE_SUFFIX = ".crypted"
+
+
+ def callApi(self, **kwargs):
+ """ Dispatch a call to the api, see megacrypter.com/api_doc """
+ self.logDebug("JSON request: " + json_dumps(kwargs))
+ resp = self.load(self.API_URL, post=json_dumps(kwargs))
+ self.logDebug("API Response: " + resp)
+ return json_loads(resp)
+
+ def process(self, pyfile):
+ # match is guaranteed because plugin was chosen to handle url
+ node = re.match(self.__pattern__, pyfile.url).group(1)
+
+ # get Mega.co.nz link info
+ info = self.callApi(link=node, m="info")
+
+ # get crypted file URL
+ dl = self.callApi(link=node, m="dl")
+
+ # TODO: map error codes, implement password protection
+ # if info['pass'] is True:
+ # crypted_file_key, md5_file_key = info['key'].split("#")
+
+ key = self.b64_decode(info['key'])
+
+ pyfile.name = info['name'] + self.FILE_SUFFIX
+
+ self.download(dl['url'])
+ self.decryptFile(key)
+
+ # Everything is finished and final name can be set
+ pyfile.name = info['name']
diff --git a/pyload/plugins/hoster/MegareleaseOrg.py b/pyload/plugins/hoster/MegareleaseOrg.py
new file mode 100644
index 000000000..6a689b6dd
--- /dev/null
+++ b/pyload/plugins/hoster/MegareleaseOrg.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class MegareleaseOrg(XFileSharingPro):
+ __name__ = "MegareleaseOrg"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?megarelease.org/\w{12}'
+
+ __description__ = """Megarelease.org hoster plugin"""
+ __author_name__ = ("derek3x", "stickell")
+ __author_mail__ = ("derek3x@vmail.me", "l.stickell@yahoo.it")
+
+ HOSTER_NAME = "megarelease.org"
+
+ FILE_INFO_PATTERN = r'<font color="red">%s/(?P<N>.+)</font> \((?P<S>[^)]+)\)</font>' % __pattern__
+
+
+getInfo = create_getInfo(MegareleaseOrg)
diff --git a/pyload/plugins/hoster/MegasharesCom.py b/pyload/plugins/hoster/MegasharesCom.py
new file mode 100644
index 000000000..36e13a531
--- /dev/null
+++ b/pyload/plugins/hoster/MegasharesCom.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import time
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class MegasharesCom(SimpleHoster):
+ __name__ = "MegasharesCom"
+ __type__ = "hoster"
+ __version__ = "0.24"
+
+ __pattern__ = r'http://(?:www\.)?megashares.com/.*'
+
+ __description__ = """Megashares.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<h1 class="black xxl"[^>]*title="(?P<N>[^"]+)">'
+ FILE_SIZE_PATTERN = r'<strong><span class="black">Filesize:</span></strong> (?P<S>[0-9.]+) (?P<U>[kKMG])i?B<br />'
+ OFFLINE_PATTERN = r'<dd class="red">(Invalid Link Request|Link has been deleted)'
+
+ LINK_PATTERN = r'<div id="show_download_button_%d"[^>]*>\s*<a href="([^"]+)">'
+ PASSPORT_LEFT_PATTERN = r'Your Download Passport is: <[^>]*>(\w+).*\s*You have\s*<[^>]*>\s*([0-9.]+) ([kKMG]i?B)'
+ PASSPORT_RENEW_PATTERN = r'Your download passport will renew in\s*<strong>(\d+)</strong>:<strong>(\d+)</strong>:<strong>(\d+)</strong>'
+ REACTIVATE_NUM_PATTERN = r'<input[^>]*id="random_num" value="(\d+)" />'
+ REACTIVATE_PASSPORT_PATTERN = r'<input[^>]*id="passport_num" value="(\w+)" />'
+ REQUEST_URI_PATTERN = r'var request_uri = "([^"]+)";'
+ NO_SLOTS_PATTERN = r'<dd class="red">All download slots for this link are currently filled'
+
+
+ def setup(self):
+ self.resumeDownload = True
+ self.multiDL = self.premium
+
+ def handlePremium(self):
+ self.handleDownload(True)
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ if self.NO_SLOTS_PATTERN in self.html:
+ self.retry(wait_time=5 * 60)
+
+ self.getFileInfo()
+ # if self.pyfile.size > 576716800:
+ # self.fail("This file is too large for free download")
+
+ # Reactivate passport if needed
+ m = re.search(self.REACTIVATE_PASSPORT_PATTERN, self.html)
+ if m:
+ passport_num = m.group(1)
+ request_uri = re.search(self.REQUEST_URI_PATTERN, self.html).group(1)
+
+ for _ in xrange(5):
+ random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1)
+
+ verifyinput = self.decryptCaptcha(
+ "http://d01.megashares.com/index.php?secgfx=gfx&random_num=%s" % random_num)
+ self.logInfo("Reactivating passport %s: %s %s" % (passport_num, random_num, verifyinput))
+
+ url = ("http://d01.megashares.com%s&rs=check_passport_renewal" % request_uri +
+ "&rsargs[]=%s&rsargs[]=%s&rsargs[]=%s" % (verifyinput, random_num, passport_num) +
+ "&rsargs[]=replace_sec_pprenewal&rsrnd=%s" % str(int(time() * 1000)))
+ self.logDebug(url)
+ response = self.load(url)
+
+ if 'Thank you for reactivating your passport.' in response:
+ self.correctCaptcha()
+ self.retry()
+ else:
+ self.invalidCaptcha()
+ else:
+ self.fail("Failed to reactivate passport")
+
+ # Check traffic left on passport
+ m = re.search(self.PASSPORT_LEFT_PATTERN, self.html)
+ if m is None:
+ self.fail('Passport not found')
+ self.logInfo("Download passport: %s" % m.group(1))
+ data_left = float(m.group(2)) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[m.group(3)]
+ self.logInfo("Data left: %s %s (%d MB needed)" % (m.group(2), m.group(3), self.pyfile.size / 1048576))
+
+ if not data_left:
+ m = re.search(self.PASSPORT_RENEW_PATTERN, self.html)
+ renew = m.group(1) + m.group(2) + m.group(3) * 60 * 60 if m else 10 * 60
+ self.retry(max_tries=15, wait_time=renew, reason="Unable to get passport")
+
+ self.handleDownload(False)
+
+ def handleDownload(self, premium=False):
+ # Find download link;
+ m = re.search(self.LINK_PATTERN % (1 if premium else 2), self.html)
+ msg = '%s download URL' % ('Premium' if premium else 'Free')
+ if m is None:
+ self.parseError(msg)
+
+ download_url = m.group(1)
+ self.logDebug("%s: %s" % (msg, download_url))
+ self.download(download_url)
+
+
+getInfo = create_getInfo(MegasharesCom)
diff --git a/pyload/plugins/hoster/MovReelCom.py b/pyload/plugins/hoster/MovReelCom.py
new file mode 100644
index 000000000..3f97d3fca
--- /dev/null
+++ b/pyload/plugins/hoster/MovReelCom.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class MovReelCom(XFileSharingPro):
+ __name__ = "MovReelCom"
+ __type__ = "hoster"
+ __version__ = "1.20"
+
+ __pattern__ = r'http://(?:www\.)?movreel.com/.*'
+
+ __description__ = """MovReel.com hoster plugin"""
+ __author_name__ = "JorisV83"
+ __author_mail__ = "jorisv83-pyload@yahoo.com"
+
+ HOSTER_NAME = "movreel.com"
+
+ FILE_INFO_PATTERN = r'<h3>(?P<N>.+?) <small><sup>(?P<S>[\d.]+) (?P<U>..)</sup> </small></h3>'
+ OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>'
+ LINK_PATTERN = r'<a href="(http://[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/.*)">Download Link</a>'
+
+
+getInfo = create_getInfo(MovReelCom)
diff --git a/pyload/plugins/hoster/MultiDebridCom.py b/pyload/plugins/hoster/MultiDebridCom.py
new file mode 100644
index 000000000..765022eef
--- /dev/null
+++ b/pyload/plugins/hoster/MultiDebridCom.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+class MultiDebridCom(Hoster):
+ __name__ = "MultiDebridCom"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/'
+
+ __description__ = """Multi-debrid.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com")
+ self.fail("No Multi-debrid.com account provided")
+ else:
+ self.logDebug("Original URL: %s" % pyfile.url)
+ page = self.req.load('http://multi-debrid.com/api.php',
+ get={'user': self.user, 'pass': self.account.getAccountData(self.user)['password'],
+ 'link': pyfile.url})
+ self.logDebug("JSON data: " + page)
+ page = json_loads(page)
+ if page['status'] != 'ok':
+ self.fail('Unable to unrestrict link')
+ new_url = page['link']
+
+ if new_url != pyfile.url:
+ self.logDebug("Unrestricted URL: " + new_url)
+
+ self.download(new_url, disposition=True)
diff --git a/pyload/plugins/hoster/MultishareCz.py b/pyload/plugins/hoster/MultishareCz.py
new file mode 100644
index 000000000..819478659
--- /dev/null
+++ b/pyload/plugins/hoster/MultishareCz.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import random
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class MultishareCz(SimpleHoster):
+ __name__ = "MultishareCz"
+ __type__ = "hoster"
+ __version__ = "0.34"
+
+ __pattern__ = r'http://(?:www\.)?multishare.cz/stahnout/(?P<ID>\d+).*'
+
+ __description__ = """MultiShare.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = ur'(?:<li>Název|Soubor): <strong>(?P<N>[^<]+)</strong><(?:/li><li|br)>Velikost: <strong>(?P<S>[^<]+)</strong>'
+ OFFLINE_PATTERN = ur'<h1>Stáhnout soubor</h1><p><strong>PoşadovanÜ soubor neexistuje.</strong></p>'
+ FILE_SIZE_REPLACEMENTS = [('&nbsp;', '')]
+
+
+ def process(self, pyfile):
+ msurl = re.match(self.__pattern__, pyfile.url)
+ if msurl:
+ self.fileID = msurl.group('ID')
+ self.html = self.load(pyfile.url, decode=True)
+ self.getFileInfo()
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+ else:
+ self.handleOverriden()
+
+ def handleFree(self):
+ self.download("http://www.multishare.cz/html/download_free.php?ID=%s" % self.fileID)
+
+ def handlePremium(self):
+ if not self.checkCredit():
+ self.logWarning("Not enough credit left to download file")
+ self.resetAccount()
+
+ self.download("http://www.multishare.cz/html/download_premium.php?ID=%s" % self.fileID)
+
+ def handleOverriden(self):
+ if not self.premium:
+ self.fail("Only premium users can download from other hosters")
+
+ self.html = self.load('http://www.multishare.cz/html/mms_ajax.php', post={"link": self.pyfile.url}, decode=True)
+ self.getFileInfo()
+
+ if not self.checkCredit():
+ self.fail("Not enough credit left to download file")
+
+ url = "http://dl%d.mms.multishare.cz/html/mms_process.php" % round(random() * 10000 * random())
+ params = {"u_ID": self.acc_info['u_ID'], "u_hash": self.acc_info['u_hash'], "link": self.pyfile.url}
+ self.logDebug(url, params)
+ self.download(url, get=params)
+
+ def checkCredit(self):
+ self.acc_info = self.account.getAccountInfo(self.user, True)
+ self.logInfo("User %s has %i MB left" % (self.user, self.acc_info['trafficleft'] / 1024))
+
+ return self.pyfile.size / 1024 <= self.acc_info['trafficleft']
+
+
+getInfo = create_getInfo(MultishareCz)
diff --git a/pyload/plugins/hoster/MyvideoDe.py b/pyload/plugins/hoster/MyvideoDe.py
new file mode 100644
index 000000000..4ce75b4a2
--- /dev/null
+++ b/pyload/plugins/hoster/MyvideoDe.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+from pyload.unescape import unescape
+
+
+class MyvideoDe(Hoster):
+ __name__ = "MyvideoDe"
+ __type__ = "hoster"
+ __version__ = "0.9"
+
+ __pattern__ = r'http://(?:www\.)?myvideo.de/watch/'
+
+ __description__ = """Myvideo.de hoster plugin"""
+ __author_name__ = "spoob"
+ __author_mail__ = "spoob@pyload.org"
+
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+ self.download_html()
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ self.html = self.load(self.pyfile.url)
+
+ def get_file_url(self):
+ videoId = re.search(r"addVariable\('_videoid','(.*)'\);p.addParam\('quality'", self.html).group(1)
+ videoServer = re.search("rel='image_src' href='(.*)thumbs/.*' />", self.html).group(1)
+ file_url = videoServer + videoId + ".flv"
+ return file_url
+
+ def get_file_name(self):
+ file_name_pattern = r"<h1 class='globalHd'>(.*)</h1>"
+ return unescape(re.search(file_name_pattern, self.html).group(1).replace("/", "") + '.flv')
+
+ def file_exists(self):
+ self.download_html()
+ self.load(str(self.pyfile.url), cookies=False, just_header=True)
+ if self.req.lastEffectiveURL == "http://www.myvideo.de/":
+ return False
+ return True
diff --git a/pyload/plugins/hoster/NarodRu.py b/pyload/plugins/hoster/NarodRu.py
new file mode 100644
index 000000000..22c0ba908
--- /dev/null
+++ b/pyload/plugins/hoster/NarodRu.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import random
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class NarodRu(SimpleHoster):
+ __name__ = "NarodRu"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?narod(\.yandex)?\.ru/(disk|start/[0-9]+\.\w+-narod\.yandex\.ru)/(?P<ID>\d+)/.+'
+
+ __description__ = """Narod.ru hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<dt class="name">(?:<[^<]*>)*(?P<N>[^<]+)</dt>'
+ FILE_SIZE_PATTERN = r'<dd class="size">(?P<S>\d[^<]*)</dd>'
+ OFFLINE_PATTERN = r'<title>404</title>|Ѐайл уЎалеМ с сервОса|ЗакПМчОлся срПк храМеМОя файла\.'
+
+ FILE_SIZE_REPLACEMENTS = [(u'КБ', 'KB'), (u'МБ', 'MB'), (u'ГБ', 'GB')]
+ FILE_URL_REPLACEMENTS = [("narod.yandex.ru/", "narod.ru/"),
+ (r"/start/[0-9]+\.\w+-narod\.yandex\.ru/([0-9]{6,15})/\w+/(\w+)", r"/disk/\1/\2")]
+
+ CAPTCHA_PATTERN = r'<number url="(.*?)">(\w+)</number>'
+ LINK_PATTERN = r'<a class="h-link" rel="yandex_bar" href="(.+?)">'
+
+
+ def handleFree(self):
+ for _ in xrange(5):
+ self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random() * 777))
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is None:
+ self.parseError('Captcha')
+ post_data = {"action": "sendcapcha"}
+ captcha_url, post_data['key'] = m.groups()
+ post_data['rep'] = self.decryptCaptcha(captcha_url)
+
+ self.html = self.load(self.pyfile.url, post=post_data, decode=True)
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ url = 'http://narod.ru' + m.group(1)
+ self.correctCaptcha()
+ break
+ elif u'<b class="error-msg"><strong>ОшОблОсь?</strong>' in self.html:
+ self.invalidCaptcha()
+ else:
+ self.parseError('Download link')
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.logDebug('Download link: ' + url)
+ self.download(url)
+
+
+getInfo = create_getInfo(NarodRu)
diff --git a/pyload/plugins/hoster/NetloadIn.py b/pyload/plugins/hoster/NetloadIn.py
new file mode 100644
index 000000000..949b1aa92
--- /dev/null
+++ b/pyload/plugins/hoster/NetloadIn.py
@@ -0,0 +1,258 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import sleep, time
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.Plugin import chunks
+
+
+def getInfo(urls):
+ ## returns list of tupels (name, size (in bytes), status (see FileDatabase), url)
+
+ apiurl = "http://api.netload.in/info.php?auth=Zf9SnQh9WiReEsb18akjvQGqT0I830e8&bz=1&md5=1&file_id="
+ id_regex = re.compile(NetloadIn.__pattern__)
+ urls_per_query = 80
+
+ for chunk in chunks(urls, urls_per_query):
+ ids = ""
+ for url in chunk:
+ match = id_regex.search(url)
+ if match:
+ ids = ids + match.group(1) + ";"
+
+ api = getURL(apiurl + ids, decode=True)
+
+ if api is None or len(api) < 10:
+ print "Netload prefetch: failed "
+ return
+ if api.find("unknown_auth") >= 0:
+ print "Netload prefetch: Outdated auth code "
+ return
+
+ result = []
+
+ for i, r in enumerate(api.splitlines()):
+ try:
+ tmp = r.split(";")
+ try:
+ size = int(tmp[2])
+ except:
+ size = 0
+ result.append((tmp[1], size, 2 if tmp[3] == "online" else 1, chunk[i]))
+ except:
+ print "Netload prefetch: Error while processing response: "
+ print r
+
+ yield result
+
+
+class NetloadIn(Hoster):
+ __name__ = "NetloadIn"
+ __type__ = "hoster"
+ __version__ = "0.45"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?netload\.in/(?:datei(.*?)(?:\.htm|/)|index.php?id=10&file_id=)'
+
+ __description__ = """Netload.in hoster plugin"""
+ __author_name__ = ("spoob", "RaNaN", "Gregy")
+ __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "gregy@gregy.cz")
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = self.premium
+
+ def process(self, pyfile):
+ self.url = pyfile.url
+ self.prepare()
+ pyfile.setStatus("downloading")
+ self.proceed(self.url)
+
+ def prepare(self):
+ self.download_api_data()
+
+ if self.api_data and self.api_data['filename']:
+ self.pyfile.name = self.api_data['filename']
+
+ if self.premium:
+ self.logDebug("Netload: Use Premium Account")
+ settings = self.load("http://www.netload.in/index.php?id=2&lang=en")
+ if '<option value="2" selected="selected">Direkter Download' in settings:
+ self.logDebug("Using direct download")
+ return True
+ else:
+ self.logDebug("Direct downloads not enabled. Parsing html for a download URL")
+
+ if self.download_html():
+ return True
+ else:
+ self.fail("Failed")
+ return False
+
+ def download_api_data(self, n=0):
+ url = self.url
+ id_regex = re.compile(self.__pattern__)
+ match = id_regex.search(url)
+
+ if match:
+ #normalize url
+ self.url = 'http://www.netload.in/datei%s.htm' % match.group(1)
+ self.logDebug("URL: %s" % self.url)
+ else:
+ self.api_data = False
+ return
+
+ apiurl = "http://api.netload.in/info.php"
+ src = self.load(apiurl, cookies=False,
+ get={"file_id": match.group(1), "auth": "Zf9SnQh9WiReEsb18akjvQGqT0I830e8", "bz": "1",
+ "md5": "1"}, decode=True).strip()
+ if not src and n <= 3:
+ sleep(0.2)
+ self.download_api_data(n + 1)
+ return
+
+ self.logDebug("Netload: APIDATA: " + src)
+ self.api_data = {}
+ if src and ";" in src and src not in ("unknown file_data", "unknown_server_data", "No input file specified."):
+ lines = src.split(";")
+ self.api_data['exists'] = True
+ self.api_data['fileid'] = lines[0]
+ self.api_data['filename'] = lines[1]
+ self.api_data['size'] = lines[2]
+ self.api_data['status'] = lines[3]
+ if self.api_data['status'] == "online":
+ self.api_data['checksum'] = lines[4].strip()
+ else:
+ self.api_data = False # check manually since api data is useless sometimes
+
+ if lines[0] == lines[1] and lines[2] == "0": # useless api data
+ self.api_data = False
+ else:
+ self.api_data = False
+
+ def final_wait(self, page):
+ wait_time = self.get_wait_time(page)
+ self.setWait(wait_time)
+ self.logDebug("Netload: final wait %d seconds" % wait_time)
+ self.wait()
+ self.url = self.get_file_url(page)
+
+ def download_html(self):
+ self.logDebug("Netload: Entering download_html")
+ page = self.load(self.url, decode=True)
+ t = time() + 30
+
+ if "/share/templates/download_hddcrash.tpl" in page:
+ self.logError("Netload HDD Crash")
+ self.fail(_("File temporarily not available"))
+
+ if not self.api_data:
+ self.logDebug("API Data may be useless, get details from html page")
+
+ if "* The file was deleted" in page:
+ self.offline()
+
+ name = re.search(r'class="dl_first_filename">([^<]+)', page, re.MULTILINE)
+ # the found filename is not truncated
+ if name:
+ name = name.group(1).strip()
+ if not name.endswith(".."):
+ self.pyfile.name = name
+
+ captchawaited = False
+ for i in xrange(10):
+
+ if not page:
+ page = self.load(self.url)
+ t = time() + 30
+
+ if "/share/templates/download_hddcrash.tpl" in page:
+ self.logError("Netload HDD Crash")
+ self.fail(_("File temporarily not available"))
+
+ self.logDebug("Netload: try number %d " % i)
+
+ if ">Your download is being prepared.<" in page:
+ self.logDebug("Netload: We will prepare your download")
+ self.final_wait(page)
+ return True
+ if ">An access request has been made from IP address <" in page:
+ wait = self.get_wait_time(page)
+ if not wait:
+ self.logDebug("Netload: Wait was 0 setting 30")
+ wait = 30 * 60
+ self.logInfo(_("Netload: waiting between downloads %d s." % wait))
+ self.wantReconnect = True
+ self.setWait(wait)
+ self.wait()
+
+ return self.download_html()
+
+ self.logDebug("Netload: Trying to find captcha")
+
+ try:
+ url_captcha_html = "http://netload.in/" + re.search('(index.php\?id=10&amp;.*&amp;captcha=1)',
+ page).group(1).replace("amp;", "")
+ except:
+ page = None
+ continue
+
+ try:
+ page = self.load(url_captcha_html, cookies=True)
+ captcha_url = "http://netload.in/" + re.search('(share/includes/captcha.php\?t=\d*)', page).group(1)
+ except:
+ self.logDebug("Netload: Could not find captcha, try again from beginning")
+ captchawaited = False
+ continue
+
+ file_id = re.search('<input name="file_id" type="hidden" value="(.*)" />', page).group(1)
+ if not captchawaited:
+ wait = self.get_wait_time(page)
+ if i == 0:
+ self.pyfile.waitUntil = time() # dont wait contrary to time on website
+ else:
+ self.pyfile.waitUntil = t
+ self.logInfo(_("Netload: waiting for captcha %d s.") % (self.pyfile.waitUntil - time()))
+ #self.setWait(wait)
+ self.wait()
+ captchawaited = True
+
+ captcha = self.decryptCaptcha(captcha_url)
+ page = self.load("http://netload.in/index.php?id=10", post={"file_id": file_id, "captcha_check": captcha},
+ cookies=True)
+
+ return False
+
+ def get_file_url(self, page):
+ try:
+ file_url_pattern = r"<a class=\"Orange_Link\" href=\"(http://.+)\".?>Or click here"
+ attempt = re.search(file_url_pattern, page)
+ if attempt is not None:
+ return attempt.group(1)
+ else:
+ self.logDebug("Netload: Backup try for final link")
+ file_url_pattern = r"<a href=\"(.+)\" class=\"Orange_Link\">Click here"
+ attempt = re.search(file_url_pattern, page)
+ return "http://netload.in/" + attempt.group(1)
+ except:
+ self.logDebug("Netload: Getting final link failed")
+ return None
+
+ def get_wait_time(self, page):
+ wait_seconds = int(re.search(r"countdown\((.+),'change\(\)'\)", page).group(1)) / 100
+ return wait_seconds
+
+ def proceed(self, url):
+ self.logDebug("Netload: Downloading..")
+
+ self.download(url, disposition=True)
+
+ check = self.checkDownload({"empty": re.compile(r"^$"), "offline": re.compile("The file was deleted")})
+
+ if check == "empty":
+ self.logInfo(_("Downloaded File was empty"))
+ self.retry()
+ elif check == "offline":
+ self.offline()
diff --git a/pyload/plugins/hoster/NosuploadCom.py b/pyload/plugins/hoster/NosuploadCom.py
new file mode 100644
index 000000000..e4feabdd0
--- /dev/null
+++ b/pyload/plugins/hoster/NosuploadCom.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class NosuploadCom(XFileSharingPro):
+ __name__ = "NosuploadCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?nosupload\.com/\?d=\w{12}'
+
+ __description__ = """Nosupload.com hoster plugin"""
+ __author_name__ = "igel"
+ __author_mail__ = "igelkun@myopera.com"
+
+ HOSTER_NAME = "nosupload.com"
+
+ FILE_SIZE_PATTERN = r'<p><strong>Size:</strong> (?P<S>[0-9\.]+) (?P<U>[kKMG]?B)</p>'
+ LINK_PATTERN = r'<a class="select" href="(http://.+?)">Download</a>'
+ WAIT_PATTERN = r'Please wait.*?>(\d+)</span>'
+
+
+ def getDownloadLink(self):
+ # stage1: press the "Free Download" button
+ data = self.getPostParameters()
+ self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
+
+ # stage2: wait some time and press the "Download File" button
+ data = self.getPostParameters()
+ wait_time = re.search(self.WAIT_PATTERN, self.html, re.MULTILINE | re.DOTALL).group(1)
+ self.logDebug("hoster told us to wait %s seconds" % wait_time)
+ self.wait(wait_time)
+ self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
+
+ # stage3: get the download link
+ return re.search(self.LINK_PATTERN, self.html, re.S).group(1)
+
+
+getInfo = create_getInfo(NosuploadCom)
diff --git a/pyload/plugins/hoster/NovafileCom.py b/pyload/plugins/hoster/NovafileCom.py
new file mode 100644
index 000000000..1346bbde9
--- /dev/null
+++ b/pyload/plugins/hoster/NovafileCom.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://novafile.com/vfun4z6o2cit
+# http://novafile.com/s6zrr5wemuz4
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class NovafileCom(XFileSharingPro):
+ __name__ = "NovafileCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?novafile\.com/\w{12}'
+
+ __description__ = """Novafile.com hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ HOSTER_NAME = "novafile.com"
+
+ FILE_SIZE_PATTERN = r'<div class="size">(?P<S>.+?)</div>'
+ ERROR_PATTERN = r'class="alert[^"]*alert-separate"[^>]*>\s*(?:<p>)?(.*?)\s*</'
+ LINK_PATTERN = r'<a href="(http://s\d+\.novafile\.com/.*?)" class="btn btn-green">Download File</a>'
+ WAIT_PATTERN = r'<p>Please wait <span id="count"[^>]*>(\d+)</span> seconds</p>'
+
+
+ def setup(self):
+ self.multiDL = False
+
+
+getInfo = create_getInfo(NovafileCom)
diff --git a/pyload/plugins/hoster/NowDownloadEu.py b/pyload/plugins/hoster/NowDownloadEu.py
new file mode 100644
index 000000000..6e42a55bb
--- /dev/null
+++ b/pyload/plugins/hoster/NowDownloadEu.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from pyload.utils import fixup
+
+
+class NowDownloadEu(SimpleHoster):
+ __name__ = "NowDownloadEu"
+ __type__ = "hoster"
+ __version__ = "0.05"
+
+ __pattern__ = r'http://(?:www\.)?nowdownload\.(ch|co|eu|sx)/(dl/|download\.php\?id=)(?P<ID>\w+)'
+
+ __description__ = """NowDownload.ch hoster plugin"""
+ __author_name__ = ("godofdream", "Walter Purcaro")
+ __author_mail__ = ("soilfiction@gmail.com", "vuolter@gmail.com")
+
+ FILE_INFO_PATTERN = r'Downloading</span> <br> (?P<N>.*) (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B </h4>'
+ OFFLINE_PATTERN = r'(This file does not exist!)'
+
+ TOKEN_PATTERN = r'"(/api/token\.php\?token=[a-z0-9]+)"'
+ CONTINUE_PATTERN = r'"(/dl2/[a-z0-9]+/[a-z0-9]+)"'
+ WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),'
+ LINK_PATTERN = r'"(http://f\d+\.nowdownload\.ch/dl/[a-z0-9]+/[a-z0-9]+/[^<>"]*?)"'
+
+ FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<[^>]*>', '')]
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+ self.chunkLimit = -1
+
+ def handleFree(self):
+ tokenlink = re.search(self.TOKEN_PATTERN, self.html)
+ continuelink = re.search(self.CONTINUE_PATTERN, self.html)
+ if tokenlink is None or continuelink is None:
+ self.fail('Plugin out of Date')
+
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ wait = int(m.group(1))
+ else:
+ wait = 60
+
+ baseurl = "http://www.nowdownload.ch"
+ self.html = self.load(baseurl + str(tokenlink.group(1)))
+ self.wait(wait)
+
+ self.html = self.load(baseurl + str(continuelink.group(1)))
+
+ url = re.search(self.LINK_PATTERN, self.html)
+ if url is None:
+ self.fail('Download Link not Found (Plugin out of Date?)')
+ self.logDebug('Download link: ' + str(url.group(1)))
+ self.download(str(url.group(1)))
+
+
+getInfo = create_getInfo(NowDownloadEu)
diff --git a/pyload/plugins/hoster/OboomCom.py b/pyload/plugins/hoster/OboomCom.py
new file mode 100644
index 000000000..04efa31b7
--- /dev/null
+++ b/pyload/plugins/hoster/OboomCom.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# https://www.oboom.com/B7CYZIEB/10Mio.dat
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+
+
+class OboomCom(Hoster):
+ __name__ = "OboomCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://(?:www\.)?oboom\.com/(#(id=|/)?)?(?P<ID>[A-Z0-9]{8})'
+
+ __description__ = """oboom.com hoster plugin"""
+ __author_name__ = "stanley"
+ __author_mail__ = "stanley.foerster@gmail.com"
+
+ RECAPTCHA_KEY = "6LdqpO0SAAAAAJGHXo63HyalP7H4qlRs_vff0kJX"
+
+
+ def loadUrl(self, url, get=None):
+ if get is None:
+ get = dict()
+ return json_loads(self.load(url, get, decode=True))
+
+ def getFileId(self, url):
+ self.fileId = re.match(OboomCom.__pattern__, url).group('ID')
+
+ def getSessionToken(self):
+ if self.premium:
+ accountInfo = self.account.getAccountInfo(self.user, True)
+ if "session" in accountInfo:
+ self.sessionToken = accountInfo['session']
+ else:
+ self.fail("Could not retrieve premium session")
+ else:
+ apiUrl = "https://www.oboom.com/1.0/guestsession"
+ result = self.loadUrl(apiUrl)
+ if result[0] == 200:
+ self.sessionToken = result[1]
+ else:
+ self.fail("Could not retrieve token for guest session. Error code %s" % result[0])
+
+ def solveCaptcha(self):
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ apiUrl = "https://www.oboom.com/1.0/download/ticket"
+ params = {"recaptcha_challenge_field": challenge,
+ "recaptcha_response_field": response,
+ "download_id": self.fileId,
+ "token": self.sessionToken}
+ result = self.loadUrl(apiUrl, params)
+
+ if result[0] == 200:
+ self.downloadToken = result[1]
+ self.downloadAuth = result[2]
+ self.correctCaptcha()
+ self.setWait(30)
+ self.wait()
+ break
+ elif result[0] == 400:
+ if result[1] == "incorrect-captcha-sol":
+ self.invalidCaptcha()
+ elif result[1] == "captcha-timeout":
+ self.invalidCaptcha()
+ elif result[1] == "forbidden":
+ self.retry(5, 15 * 60, "Service unavailable")
+ elif result[0] == 403:
+ if result[1] == -1: # another download is running
+ self.setWait(15 * 60)
+ else:
+ self.setWait(result[1], reconnect=True)
+ self.wait()
+ self.retry(5)
+ else:
+ self.invalidCaptcha()
+ self.fail("Received invalid captcha 5 times")
+
+ def getFileInfo(self, token, fileId):
+ apiUrl = "https://api.oboom.com/1.0/info"
+ params = {"token": token, "items": fileId, "http_errors": 0}
+
+ result = self.loadUrl(apiUrl, params)
+ if result[0] == 200:
+ item = result[1][0]
+ if item['state'] == "online":
+ self.fileSize = item['size']
+ self.fileName = item['name']
+ else:
+ self.offline()
+ else:
+ self.fail("Could not retrieve file info. Error code %s: %s" % (result[0], result[1]))
+
+ def getDownloadTicket(self):
+ apiUrl = "https://api.oboom.com/1.0/dl"
+ params = {"item": self.fileId, "http_errors": 0}
+ if self.premium:
+ params['token'] = self.sessionToken
+ else:
+ params['token'] = self.downloadToken
+ params['auth'] = self.downloadAuth
+
+ result = self.loadUrl(apiUrl, params)
+ if result[0] == 200:
+ self.downloadDomain = result[1]
+ self.downloadTicket = result[2]
+ else:
+ self.fail("Could not retrieve download ticket. Error code %s" % result[0])
+
+ def setup(self):
+ self.chunkLimit = 1
+ self.multiDL = self.premium
+
+ def process(self, pyfile):
+ self.pyfile.url.replace(".com/#id=", ".com/#")
+ self.pyfile.url.replace(".com/#/", ".com/#")
+ self.getFileId(self.pyfile.url)
+ self.getSessionToken()
+ self.getFileInfo(self.sessionToken, self.fileId)
+ self.pyfile.name = self.fileName
+ self.pyfile.size = self.fileSize
+ if not self.premium:
+ self.solveCaptcha()
+ self.getDownloadTicket()
+ self.download("https://%s/1.0/dlh" % self.downloadDomain, get={"ticket": self.downloadTicket, "http_errors": 0})
diff --git a/pyload/plugins/hoster/OneFichierCom.py b/pyload/plugins/hoster/OneFichierCom.py
new file mode 100644
index 000000000..8fdecb342
--- /dev/null
+++ b/pyload/plugins/hoster/OneFichierCom.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://5pnm24ltcw.1fichier.com/
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class OneFichierCom(SimpleHoster):
+ __name__ = "OneFichierCom"
+ __type__ = "hoster"
+ __version__ = "0.61"
+
+ __pattern__ = r'(http://(?P<id>\w+)\.(?P<host>(1fichier|d(es)?fichiers|pjointe)\.(com|fr|net|org)|(cjoint|mesfichiers|piecejointe|oi)\.(org|net)|tenvoi\.(com|org|net)|dl4free\.com|alterupload\.com|megadl.fr))/?'
+
+ __description__ = """1fichier.com hoster plugin"""
+ __author_name__ = ("fragonib", "the-razer", "zoidberg", "imclem", "stickell", "Elrick69")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "daniel_ AT gmx DOT net", "zoidberg@mujmail.cz",
+ "imclem on github", "l.stickell@yahoo.it", "elrick69[AT]rocketmail[DOT]com")
+
+ FILE_NAME_PATTERN = r'">Filename :</th>\s*<td>(?P<N>[^<]+)</td>'
+ FILE_SIZE_PATTERN = r'<th>Size :</th>\s*<td>(?P<S>[^<]+)</td>'
+ OFFLINE_PATTERN = r'The (requested)? file (could not be found|has been deleted)'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'http://\g<id>.\g<host>/en/')]
+
+ WAITING_PATTERN = r'Warning ! Without premium status, you must wait between each downloads'
+ NOT_PARALLEL = r'Warning ! Without premium status, you can download only one file at a time'
+ WAIT_TIME = 10 * 60 # Retry time between each free download
+ RETRY_TIME = 15 * 60 # Default retry time in seconds (if detected parallel download)
+
+
+ def setup(self):
+ self.multiDL = self.premium
+ self.resumeDownload = True
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ if self.WAITING_PATTERN in self.html:
+ self.logInfo('You have to wait been each free download! Retrying in %d seconds.' % self.WAIT_TIME)
+ self.waitAndRetry(self.WAIT_TIME)
+ else: # detect parallel download
+ m = re.search(self.NOT_PARALLEL, self.html)
+ if m:
+ self.waitAndRetry(self.RETRY_TIME)
+
+ url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id'])
+ if not url:
+ self.parseError("Download link not found")
+
+ # Check for protection
+ if "pass" in inputs:
+ inputs['pass'] = self.getPassword()
+ inputs['submit'] = "Download"
+
+ self.download(url, post=inputs)
+
+ # Check download
+ self.checkDownloadedFile()
+
+ def handlePremium(self):
+ url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id'])
+ if not url:
+ self.parseError("Download link not found")
+
+ # Check for protection
+ if "pass" in inputs:
+ inputs['pass'] = self.getPassword()
+ inputs['submit'] = "Download"
+
+ self.download(url, post=inputs)
+
+ # Check download
+ self.checkDownloadedFile()
+
+ def checkDownloadedFile(self):
+ check = self.checkDownload({"wait": self.WAITING_PATTERN})
+ if check == "wait":
+ self.waitAndRetry(int(self.lastcheck.group(1)) * 60)
+
+ def waitAndRetry(self, wait_time):
+ self.wait(wait_time, True)
+ self.retry()
+
+
+
+getInfo = create_getInfo(OneFichierCom)
diff --git a/pyload/plugins/hoster/OverLoadMe.py b/pyload/plugins/hoster/OverLoadMe.py
new file mode 100644
index 000000000..8061b2e1d
--- /dev/null
+++ b/pyload/plugins/hoster/OverLoadMe.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import randrange
+from urllib import unquote
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import parseFileSize
+
+
+class OverLoadMe(Hoster):
+ __name__ = "OverLoadMe"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://.*overload\.me.*'
+
+ __description__ = """Over-Load.me hoster plugin"""
+ __author_name__ = "marley"
+ __author_mail__ = "marley@over-load.me"
+
+
+ def getFilename(self, url):
+ try:
+ name = unquote(url.rsplit("/", 1)[1])
+ except IndexError:
+ name = "Unknown_Filename..."
+ if name.endswith("..."): # incomplete filename, append random stuff
+ name += "%s.tmp" % randrange(100, 999)
+ return name
+
+ def setup(self):
+ self.chunkLimit = 5
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Over-Load")
+ self.fail("No Over-Load account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ data = self.account.getAccountData(self.user)
+
+ page = self.load("https://api.over-load.me/getdownload.php",
+ get={"auth": data['password'], "link": pyfile.url})
+ data = json_loads(page)
+
+ self.logDebug("Returned Data: %s" % data)
+
+ if data['err'] == 1:
+ self.logWarning(data['msg'])
+ self.tempOffline()
+ else:
+ if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['filename']:
+ pyfile.name = data['filename']
+ pyfile.size = parseFileSize(data['filesize'])
+ new_url = data['downloadlink']
+
+ if self.getConfig("https"):
+ new_url = new_url.replace("http://", "https://")
+ else:
+ new_url = new_url.replace("https://", "http://")
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: %s" % new_url)
+
+ if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'):
+ # only use when name wasn't already set
+ pyfile.name = self.getFilename(new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload(
+ {"error": "<title>An error occured while processing your request</title>"})
+
+ if check == "error":
+ # usual this download can safely be retried
+ self.retry(reason="An error occured while generating link.", wait_time=60)
diff --git a/pyload/plugins/hoster/PandaPlanet.py b/pyload/plugins/hoster/PandaPlanet.py
new file mode 100644
index 000000000..8b26202df
--- /dev/null
+++ b/pyload/plugins/hoster/PandaPlanet.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# test.bin - 214 B - http://pandapla.net/pew1cz3ot586
+# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://pandapla.net/tz0rgjfyyoh7
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class PandaPlanet(XFileSharingPro):
+ __name__ = "PandaPlanet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?pandapla\.net/\w{12}'
+
+ __description__ = """Pandapla.net hoster plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ HOSTER_NAME = "pandapla.net"
+
+ FILE_SIZE_PATTERN = r'File Size:</b>\s*</td>\s*<td[^>]*>(?P<S>[^<]+)</td>\s*</tr>'
+ FILE_NAME_PATTERN = r'File Name:</b>\s*</td>\s*<td[^>]*>(?P<N>[^<]+)</td>\s*</tr>'
+ LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+\/(?!video\.mp4)[^"\'<]+)' % HOSTER_NAME
+
+
+getInfo = create_getInfo(PandaPlanet)
diff --git a/pyload/plugins/hoster/PornhostCom.py b/pyload/plugins/hoster/PornhostCom.py
new file mode 100644
index 000000000..802557873
--- /dev/null
+++ b/pyload/plugins/hoster/PornhostCom.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class PornhostCom(Hoster):
+ __name__ = "PornhostCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)'
+
+ __description__ = """Pornhost.com hoster plugin"""
+ __author_name__ = "jeix"
+ __author_mail__ = "jeix@hasnomail.de"
+
+
+ def process(self, pyfile):
+ self.download_html()
+ if not self.file_exists():
+ self.offline()
+
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ # Old interface
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html)
+ if url is None:
+ url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html)
+ if url is None:
+ url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html)
+ if url is None:
+ url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"',
+ self.html) # TODO: fix this one since it doesn't match
+
+ return url.group(1).strip()
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html)
+ if name is None:
+ name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html)
+ if name is None:
+ name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html)
+ if name is None:
+ name = re.search(r'"http://file[0-9]+\.pornhost\.com/.*?/(.*?)"', self.html)
+
+ name = name.group(1).strip() + ".flv"
+
+ return name
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+
+ if (re.search(r'gallery not found', self.html) is not None or
+ re.search(r'You will be redirected to', self.html) is not None):
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/PornhubCom.py b/pyload/plugins/hoster/PornhubCom.py
new file mode 100644
index 000000000..5236fe09a
--- /dev/null
+++ b/pyload/plugins/hoster/PornhubCom.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class PornhubCom(Hoster):
+ __name__ = "PornhubCom"
+ __type__ = "hoster"
+ __version__ = "0.5"
+
+ __pattern__ = r'http://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=[\w\d]+'
+
+ __description__ = """Pornhub.com hoster plugin"""
+ __author_name__ = "jeix"
+ __author_mail__ = "jeix@hasnomail.de"
+
+
+ def process(self, pyfile):
+ self.download_html()
+ if not self.file_exists():
+ self.offline()
+
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ url = "http://www.pornhub.com//gateway.php"
+ video_id = self.pyfile.url.split('=')[-1]
+ # thanks to jD team for this one v
+ post_data = "\x00\x03\x00\x00\x00\x01\x00\x0c\x70\x6c\x61\x79\x65\x72\x43\x6f\x6e\x66\x69\x67\x00\x02\x2f\x31\x00\x00\x00\x44\x0a\x00\x00\x00\x03\x02\x00"
+ post_data += chr(len(video_id))
+ post_data += video_id
+ post_data += "\x02\x00\x02\x2d\x31\x02\x00\x20"
+ post_data += "add299463d4410c6d1b1c418868225f7"
+
+ content = self.req.load(url, post=str(post_data))
+
+ new_content = ""
+ for x in content:
+ if ord(x) < 32 or ord(x) > 176:
+ new_content += '#'
+ else:
+ new_content += x
+
+ content = new_content
+
+ return re.search(r'flv_url.*(http.*?)##post_roll', content).group(1)
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ m = re.search(r'<title[^>]+>([^<]+) - ', self.html)
+ if m:
+ name = m.group(1)
+ else:
+ matches = re.findall('<h1>(.*?)</h1>', self.html)
+ if len(matches) > 1:
+ name = matches[1]
+ else:
+ name = matches[0]
+
+ return name + '.flv'
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+
+ if re.search(r'This video is no longer in our database or is in conversion', self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/PotloadCom.py b/pyload/plugins/hoster/PotloadCom.py
new file mode 100644
index 000000000..6a97d0289
--- /dev/null
+++ b/pyload/plugins/hoster/PotloadCom.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class PotloadCom(XFileSharingPro):
+ __name__ = "PotloadCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?potload\.com/\w{12}'
+
+ __description__ = """Potload.com hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ HOSTER_NAME = "potload.com"
+
+ FILE_INFO_PATTERN = r'<h[1-6]>(?P<N>.+) \((?P<S>\d+) (?P<U>\w+)\)</h'
+
+
+getInfo = create_getInfo(PotloadCom)
diff --git a/pyload/plugins/hoster/Premium4Me.py b/pyload/plugins/hoster/Premium4Me.py
new file mode 100644
index 000000000..439242aa7
--- /dev/null
+++ b/pyload/plugins/hoster/Premium4Me.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+
+from os import remove
+from os.path import exists
+from urllib import quote
+
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import fs_encode
+
+
+class Premium4Me(Hoster):
+ __name__ = "Premium4Me"
+ __type__ = "hoster"
+ __version__ = "0.08"
+
+ __pattern__ = r'http://(?:www\.)?premium.to/.*'
+
+ __description__ = """Premium.to hoster plugin"""
+ __author_name__ = ("RaNaN", "zoidberg", "stickell")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+
+ def setup(self):
+ self.resumeDownload = True
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "premium.to")
+ self.fail("No premium.to account provided")
+
+ self.logDebug("premium.to: Old URL: %s" % pyfile.url)
+
+ tra = self.getTraffic()
+
+ #raise timeout to 2min
+ self.req.setOption("timeout", 120)
+
+ self.download(
+ "http://premium.to/api/getfile.php?authcode=%s&link=%s" % (self.account.authcode, quote(pyfile.url, "")),
+ disposition=True)
+
+ check = self.checkDownload({"nopremium": "No premium account available"})
+
+ if check == "nopremium":
+ self.retry(60, 5 * 60, "No premium account available")
+
+ err = ''
+ if self.req.http.code == '420':
+ # Custom error code send - fail
+ lastDownload = fs_encode(self.lastDownload)
+
+ if exists(lastDownload):
+ f = open(lastDownload, "rb")
+ err = f.read(256).strip()
+ f.close()
+ remove(lastDownload)
+ else:
+ err = 'File does not exist'
+
+ trb = self.getTraffic()
+ self.logInfo("Filesize: %d, Traffic used %d, traffic left %d" % (pyfile.size, tra - trb, trb))
+
+ if err:
+ self.fail(err)
+
+ def getTraffic(self):
+ try:
+ traffic = int(self.load("http://premium.to/api/traffic.php?authcode=%s" % self.account.authcode))
+ except:
+ traffic = 0
+ return traffic
diff --git a/pyload/plugins/hoster/PremiumizeMe.py b/pyload/plugins/hoster/PremiumizeMe.py
new file mode 100644
index 000000000..16649f492
--- /dev/null
+++ b/pyload/plugins/hoster/PremiumizeMe.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+class PremiumizeMe(Hoster):
+ __name__ = "PremiumizeMe"
+ __type__ = "hoster"
+ __version__ = "0.12"
+
+ __pattern__ = None #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady
+
+ __description__ = """Premiumize.me hoster plugin"""
+ __author_name__ = "Florian Franzen"
+ __author_mail__ = "FlorianFranzen@gmail.com"
+
+
+ def process(self, pyfile):
+ # Check account
+ if not self.account or not self.account.canUse():
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "premiumize.me")
+ self.fail("No valid premiumize.me account provided")
+
+ # In some cases hostsers do not supply us with a filename at download, so we
+ # are going to set a fall back filename (e.g. for freakshare or xfileshare)
+ pyfile.name = pyfile.name.split('/').pop() # Remove everthing before last slash
+
+ # Correction for automatic assigned filename: Removing html at end if needed
+ suffix_to_remove = ["html", "htm", "php", "php3", "asp", "shtm", "shtml", "cfml", "cfm"]
+ temp = pyfile.name.split('.')
+ if temp.pop() in suffix_to_remove:
+ pyfile.name = ".".join(temp)
+
+ # Get account data
+ (user, data) = self.account.selectAccount()
+
+ # Get rewritten link using the premiumize.me api v1 (see https://secure.premiumize.me/?show=api)
+ answer = self.load(
+ "https://api.premiumize.me/pm-api/v1.php?method=directdownloadlink&params[login]=%s&params[pass]=%s&params[link]=%s" % (
+ user, data['password'], pyfile.url))
+ data = json_loads(answer)
+
+ # Check status and decide what to do
+ status = data['status']
+ if status == 200:
+ self.download(data['result']['location'], disposition=True)
+ elif status == 400:
+ self.fail("Invalid link")
+ elif status == 404:
+ self.offline()
+ elif status >= 500:
+ self.tempOffline()
+ else:
+ self.fail(data['statusmessage'])
diff --git a/pyload/plugins/hoster/PromptfileCom.py b/pyload/plugins/hoster/PromptfileCom.py
new file mode 100644
index 000000000..108f470d2
--- /dev/null
+++ b/pyload/plugins/hoster/PromptfileCom.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class PromptfileCom(SimpleHoster):
+ __name__ = "PromptfileCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://(?:www\.)?promptfile\.com/'
+
+ __description__ = """Promptfile.com hoster plugin"""
+ __author_name__ = "igel"
+ __author_mail__ = "igelkun@myopera.com"
+
+ FILE_INFO_PATTERN = r'<span style="[^"]*" title="[^"]*">(?P<N>.*?) \((?P<S>[\d.]+) (?P<U>\w+)\)</span>'
+ OFFLINE_PATTERN = r'<span style="[^"]*" title="File Not Found">File Not Found</span>'
+
+ CHASH_PATTERN = r'<input type="hidden" name="chash" value="([^"]*)" />'
+ LINK_PATTERN = r"clip: {\s*url: '(https?://(?:www\.)promptfile[^']*)',"
+
+
+ def handleFree(self):
+ # STAGE 1: get link to continue
+ m = re.search(self.CHASH_PATTERN, self.html)
+ if m is None:
+ self.parseError("Unable to detect chash")
+ chash = m.group(1)
+ self.logDebug("read chash %s" % chash)
+ # continue to stage2
+ self.html = self.load(self.pyfile.url, decode=True, post={'chash': chash})
+
+ # STAGE 2: get the direct link
+ m = re.search(self.LINK_PATTERN, self.html, re.MULTILINE | re.DOTALL)
+ if m is None:
+ self.parseError("Unable to detect direct link")
+ direct = m.group(1)
+ self.logDebug("found direct link: " + direct)
+ self.download(direct, disposition=True)
+
+
+getInfo = create_getInfo(PromptfileCom)
diff --git a/pyload/plugins/hoster/QuickshareCz.py b/pyload/plugins/hoster/QuickshareCz.py
new file mode 100644
index 000000000..d82c64888
--- /dev/null
+++ b/pyload/plugins/hoster/QuickshareCz.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class QuickshareCz(SimpleHoster):
+ __name__ = "QuickshareCz"
+ __type__ = "hoster"
+ __version__ = "0.54"
+
+ __pattern__ = r'http://(?:[^/]*\.)?quickshare.cz/stahnout-soubor/.*'
+
+ __description__ = """Quickshare.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<th width="145px">Název:</th>\s*<td style="word-wrap:break-word;">(?P<N>[^<]+)</td>'
+ FILE_SIZE_PATTERN = r'<th>Velikost:</th>\s*<td>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</td>'
+ OFFLINE_PATTERN = r'<script type="text/javascript">location.href=\'/chyba\';</script>'
+
+
+ def process(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+ self.getFileInfo()
+
+ # parse js variables
+ self.jsvars = dict((x, y.strip("'")) for x, y in re.findall(r"var (\w+) = ([0-9.]+|'[^']*')", self.html))
+ self.logDebug(self.jsvars)
+ pyfile.name = self.jsvars['ID3']
+
+ # determine download type - free or premium
+ if self.premium:
+ if 'UU_prihlasen' in self.jsvars:
+ if self.jsvars['UU_prihlasen'] == '0':
+ self.logWarning('User not logged in')
+ self.relogin(self.user)
+ self.retry()
+ elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']):
+ self.logWarning('Not enough credit left')
+ self.premium = False
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ check = self.checkDownload({"err": re.compile(r"\AChyba!")}, max_size=100)
+ if check == "err":
+ self.fail("File not m or plugin defect")
+
+ def handleFree(self):
+ # get download url
+ download_url = '%s/download.php' % self.jsvars['server']
+ data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID3", "ID4"))
+ self.logDebug("FREE URL1:" + download_url, data)
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+ self.load(download_url, post=data)
+ self.header = self.req.http.header
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+
+ m = re.search("Location\s*:\s*(.*)", self.header, re.I)
+ if m is None:
+ self.fail('File not found')
+ download_url = m.group(1)
+ self.logDebug("FREE URL2:" + download_url)
+
+ # check errors
+ m = re.search(r'/chyba/(\d+)', download_url)
+ if m:
+ if m.group(1) == '1':
+ self.retry(60, 2 * 60, "This IP is already downloading")
+ elif m.group(1) == '2':
+ self.retry(60, 60, "No free slots available")
+ else:
+ self.fail('Error %d' % m.group(1))
+
+ # download file
+ self.download(download_url)
+
+ def handlePremium(self):
+ download_url = '%s/download_premium.php' % self.jsvars['server']
+ data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID4", "ID5"))
+ self.logDebug("PREMIUM URL:" + download_url, data)
+ self.download(download_url, get=data)
+
+
+getInfo = create_getInfo(QuickshareCz)
diff --git a/pyload/plugins/hoster/RPNetBiz.py b/pyload/plugins/hoster/RPNetBiz.py
new file mode 100644
index 000000000..e305c35ce
--- /dev/null
+++ b/pyload/plugins/hoster/RPNetBiz.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+from pyload.common.json_layer import json_loads
+
+
+class RPNetBiz(Hoster):
+ __name__ = "RPNetBiz"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __description__ = """RPNet.biz hoster plugin"""
+
+ __pattern__ = r'https?://.*rpnet\.biz'
+ __author_name__ = "Dman"
+ __author_mail__ = "dmanugm@gmail.com"
+
+
+ def setup(self):
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ link_status = {'generated': pyfile.url}
+ elif not self.account:
+ # Check account
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet")
+ self.fail("No rpnet account provided")
+ else:
+ (user, data) = self.account.selectAccount()
+
+ self.logDebug("Original URL: %s" % pyfile.url)
+ # Get the download link
+ response = self.load("https://premium.rpnet.biz/client_api.php",
+ get={"username": user, "password": data['password'],
+ "action": "generate", "links": pyfile.url})
+
+ self.logDebug("JSON data: %s" % response)
+ link_status = json_loads(response)['links'][0] # get the first link... since we only queried one
+
+ # Check if we only have an id as a HDD link
+ if 'id' in link_status:
+ self.logDebug("Need to wait at least 30 seconds before requery")
+ self.setWait(30) # wait for 30 seconds
+ self.wait()
+ # Lets query the server again asking for the status on the link,
+ # we need to keep doing this until we reach 100
+ max_tries = 30
+ my_try = 0
+ while (my_try <= max_tries):
+ self.logDebug("Try: %d ; Max Tries: %d" % (my_try, max_tries))
+ response = self.load("https://premium.rpnet.biz/client_api.php",
+ get={"username": user, "password": data['password'],
+ "action": "downloadInformation", "id": link_status['id']})
+ self.logDebug("JSON data hdd query: %s" % response)
+ download_status = json_loads(response)['download']
+
+ if download_status['status'] == '100':
+ link_status['generated'] = download_status['rpnet_link']
+ self.logDebug("Successfully downloaded to rpnet HDD: %s" % link_status['generated'])
+ break
+ else:
+ self.logDebug("At %s%% for the file download" % download_status['status'])
+
+ self.setWait(30)
+ self.wait()
+ my_try += 1
+
+ if my_try > max_tries: # We went over the limit!
+ self.fail("Waited for about 15 minutes for download to finish but failed")
+
+ if 'generated' in link_status:
+ self.download(link_status['generated'], disposition=True)
+ elif 'error' in link_status:
+ self.fail(link_status['error'])
+ else:
+ self.fail("Something went wrong, not supposed to enter here")
diff --git a/pyload/plugins/hoster/RapidgatorNet.py b/pyload/plugins/hoster/RapidgatorNet.py
new file mode 100644
index 000000000..46fe285b7
--- /dev/null
+++ b/pyload/plugins/hoster/RapidgatorNet.py
@@ -0,0 +1,191 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import HTTPHEADER
+
+from pyload.common.json_layer import json_loads
+from pyload.network.HTTPRequest import BadHeader
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.CaptchaService import AdsCaptcha, ReCaptcha, SolveMedia
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class RapidgatorNet(SimpleHoster):
+ __name__ = "RapidgatorNet"
+ __type__ = "hoster"
+ __version__ = "0.22"
+
+ __pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+'
+
+ __description__ = """Rapidgator.net hoster plugin"""
+ __author_name__ = ("zoidberg", "chrox", "stickell", "Walter Purcaro")
+ __author_mail__ = ("zoidberg@mujmail.cz", "", "l.stickell@yahoo.it", "vuolter@gmail.com")
+
+ API_URL = "http://rapidgator.net/api/file"
+
+ FILE_NAME_PATTERN = r'<title>Download file (?P<N>.*)</title>'
+ FILE_SIZE_PATTERN = r'File size:\s*<strong>(?P<S>[\d\.]+) (?P<U>\w+)</strong>'
+ OFFLINE_PATTERN = r'>(File not found|Error 404)'
+
+ JSVARS_PATTERN = r"\s+var\s*(startTimerUrl|getDownloadUrl|captchaUrl|fid|secs)\s*=\s*'?(.*?)'?;"
+ PREMIUM_ONLY_ERROR_PATTERN = r'You can download files up to|This file can be downloaded by premium only<'
+ DOWNLOAD_LIMIT_ERROR_PATTERN = r'You have reached your (daily|hourly) downloads limit'
+ WAIT_PATTERN = r'(?:Delay between downloads must be not less than|Try again in)\s*(\d+)\s*(hour|min)'
+ LINK_PATTERN = r"return '(http://\w+.rapidgator.net/.*)';"
+
+ RECAPTCHA_KEY_PATTERN = r'"http://api\.recaptcha\.net/challenge\?k=(.*?)"'
+ ADSCAPTCHA_SRC_PATTERN = r'(http://api\.adscaptcha\.com/Get\.aspx[^"\']*)'
+ SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.script\?k=(.*?)"'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+ self.sid = None
+ self.chunkLimit = 1
+ self.req.setOption("timeout", 120)
+
+ def process(self, pyfile):
+ if self.account:
+ self.sid = self.account.getAccountData(self.user).get('SID', None)
+
+ if self.sid:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def api_response(self, cmd):
+ try:
+ json = self.load('%s/%s' % (self.API_URL, cmd),
+ get={'sid': self.sid,
+ 'url': self.pyfile.url}, decode=True)
+ self.logDebug('API:%s' % cmd, json, "SID: %s" % self.sid)
+ json = json_loads(json)
+ status = json['response_status']
+ msg = json['response_details']
+ except BadHeader, e:
+ self.logError('API:%s' % cmd, e, "SID: %s" % self.sid)
+ status = e.code
+ msg = e
+
+ if status == 200:
+ return json['response']
+ elif status == 423:
+ self.account.empty(self.user)
+ self.retry()
+ else:
+ self.account.relogin(self.user)
+ self.retry(wait_time=60)
+
+ def handlePremium(self):
+ #self.logDebug("ACCOUNT_DATA", self.account.getAccountData(self.user))
+ self.api_data = self.api_response('info')
+ self.api_data['md5'] = self.api_data['hash']
+ self.pyfile.name = self.api_data['filename']
+ self.pyfile.size = self.api_data['size']
+ url = self.api_response('download')['url']
+ self.download(url)
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ self.checkFree()
+
+ jsvars = dict(re.findall(self.JSVARS_PATTERN, self.html))
+ self.logDebug(jsvars)
+
+ self.req.http.lastURL = self.pyfile.url
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
+
+ url = "http://rapidgator.net%s?fid=%s" % (
+ jsvars.get('startTimerUrl', '/download/AjaxStartTimer'), jsvars['fid'])
+ jsvars.update(self.getJsonResponse(url))
+
+ self.wait(int(jsvars.get('secs', 45)) + 1, False)
+
+ url = "http://rapidgator.net%s?sid=%s" % (
+ jsvars.get('getDownloadUrl', '/download/AjaxGetDownload'), jsvars['sid'])
+ jsvars.update(self.getJsonResponse(url))
+
+ self.req.http.lastURL = self.pyfile.url
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"])
+
+ url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha')
+ self.html = self.load(url)
+
+ for _ in xrange(5):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ link = m.group(1)
+ self.logDebug(link)
+ self.download(link, disposition=True)
+ break
+ else:
+ captcha, captcha_key = self.getCaptcha()
+ captcha_challenge, captcha_response = captcha.challenge(captcha_key)
+
+ self.html = self.load(url, post={
+ "DownloadCaptchaForm[captcha]": "",
+ "adcopy_challenge": captcha_challenge,
+ "adcopy_response": captcha_response
+ })
+
+ if "The verification code is incorrect" in self.html:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ else:
+ self.parseError("Download link")
+
+ def getCaptcha(self):
+ m = re.search(self.ADSCAPTCHA_SRC_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ captcha = AdsCaptcha(self)
+ else:
+ m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ captcha = ReCaptcha(self)
+ else:
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ captcha = SolveMedia(self)
+ else:
+ self.parseError("Captcha")
+
+ return captcha, captcha_key
+
+ def checkFree(self):
+ m = re.search(self.PREMIUM_ONLY_ERROR_PATTERN, self.html)
+ if m:
+ self.fail("Premium account needed for download")
+ else:
+ m = re.search(self.WAIT_PATTERN, self.html)
+
+ if m:
+ wait_time = int(m.group(1)) * {"hour": 60, "min": 1}[m.group(2)]
+ else:
+ m = re.search(self.DOWNLOAD_LIMIT_ERROR_PATTERN, self.html)
+ if m is None:
+ return
+ elif m.group(1) == "daily":
+ self.logWarning("You have reached your daily downloads limit for today")
+ wait_time = secondsToMidnight(gmt=2)
+ else:
+ wait_time = 1 * 60 * 60
+
+ self.logDebug("Waiting %d minutes" % wait_time / 60)
+ self.wait(wait_time, True)
+ self.retry()
+
+ def getJsonResponse(self, url):
+ response = self.load(url, decode=True)
+ if not response.startswith('{'):
+ self.retry()
+ self.logDebug(url, response)
+ return json_loads(response)
+
+
+getInfo = create_getInfo(RapidgatorNet)
diff --git a/pyload/plugins/hoster/RapidshareCom.py b/pyload/plugins/hoster/RapidshareCom.py
new file mode 100644
index 000000000..fefa06fd7
--- /dev/null
+++ b/pyload/plugins/hoster/RapidshareCom.py
@@ -0,0 +1,223 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+
+
+def getInfo(urls):
+ ids = ""
+ names = ""
+
+ p = re.compile(RapidshareCom.__pattern__)
+
+ for url in urls:
+ r = p.search(url)
+ if r.group("name"):
+ ids += "," + r.group("id")
+ names += "," + r.group("name")
+ elif r.group("name_new"):
+ ids += "," + r.group("id_new")
+ names += "," + r.group("name_new")
+
+ url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&files=%s&filenames=%s" % (ids[1:], names[1:])
+
+ api = getURL(url)
+ result = []
+ i = 0
+ for res in api.split():
+ tmp = res.split(",")
+ if tmp[4] in ("0", "4", "5"):
+ status = 1
+ elif tmp[4] == "1":
+ status = 2
+ else:
+ status = 3
+
+ result.append((tmp[1], tmp[2], status, urls[i]))
+ i += 1
+
+ yield result
+
+
+class RapidshareCom(Hoster):
+ __name__ = "RapidshareCom"
+ __type__ = "hoster"
+ __version__ = "1.39"
+
+ __pattern__ = r'https?://(?:www\.)?rapidshare.com/(?:files/(?P<id>\d*?)/(?P<name>[^?]+)|#!download\|(?:\w+)\|(?P<id_new>\d+)\|(?P<name_new>[^|]+))'
+ __config__ = [("server",
+ "Cogent;Deutsche Telekom;Level(3);Level(3) #2;GlobalCrossing;Level(3) #3;Teleglobe;GlobalCrossing #2;TeliaSonera #2;Teleglobe #2;TeliaSonera #3;TeliaSonera",
+ "Preferred Server", "None")]
+
+ __description__ = """Rapidshare.com hoster plugin"""
+ __author_name__ = ("spoob", "RaNaN", "mkaay")
+ __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "mkaay@mkaay.de")
+
+
+ def setup(self):
+ self.no_download = True
+ self.api_data = None
+ self.offset = 0
+ self.dl_dict = {}
+
+ self.id = None
+ self.name = None
+
+ self.chunkLimit = -1 if self.premium else 1
+ self.multiDL = self.resumeDownload = self.premium
+
+ def process(self, pyfile):
+ self.url = pyfile.url
+ self.prepare()
+
+ def prepare(self):
+ m = re.match(self.__pattern__, self.url)
+
+ if m.group("name"):
+ self.id = m.group("id")
+ self.name = m.group("name")
+ else:
+ self.id = m.group("id_new")
+ self.name = m.group("name_new")
+
+ self.download_api_data()
+ if self.api_data['status'] == "1":
+ self.pyfile.name = self.get_file_name()
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ elif self.api_data['status'] == "2":
+ self.logInfo(_("Rapidshare: Traffic Share (direct download)"))
+ self.pyfile.name = self.get_file_name()
+
+ self.download(self.pyfile.url, get={"directstart": 1})
+
+ elif self.api_data['status'] in ("0", "4", "5"):
+ self.offline()
+ elif self.api_data['status'] == "3":
+ self.tempOffline()
+ else:
+ self.fail("Unknown response code.")
+
+ def handleFree(self):
+ while self.no_download:
+ self.dl_dict = self.freeWait()
+
+ #tmp = "#!download|%(server)s|%(id)s|%(name)s|%(size)s"
+ download = "http://%(host)s/cgi-bin/rsapi.cgi?sub=download&editparentlocation=0&bin=1&fileid=%(id)s&filename=%(name)s&dlauth=%(auth)s" % self.dl_dict
+
+ self.logDebug("RS API Request: %s" % download)
+ self.download(download, ref=False)
+
+ check = self.checkDownload({"ip": "You need RapidPro to download more files from your IP address",
+ "auth": "Download auth invalid"})
+ if check == "ip":
+ self.setWait(60)
+ self.logInfo(_("Already downloading from this ip address, waiting 60 seconds"))
+ self.wait()
+ self.handleFree()
+ elif check == "auth":
+ self.logInfo(_("Invalid Auth Code, download will be restarted"))
+ self.offset += 5
+ self.handleFree()
+
+ def handlePremium(self):
+ info = self.account.getAccountInfo(self.user, True)
+ self.logDebug("%s: Use Premium Account" % self.__name__)
+ url = self.api_data['mirror']
+ self.download(url, get={"directstart": 1})
+
+ def download_api_data(self, force=False):
+ """
+ http://images.rapidshare.com/apidoc.txt
+ """
+ if self.api_data and not force:
+ return
+ api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"
+ api_param_file = {"sub": "checkfiles", "incmd5": "1", "files": self.id, "filenames": self.name}
+ src = self.load(api_url_base, cookies=False, get=api_param_file).strip()
+ self.logDebug("RS INFO API: %s" % src)
+ if src.startswith("ERROR"):
+ return
+ fields = src.split(",")
+
+ # status codes:
+ # 0=File not found
+ # 1=File OK (Anonymous downloading)
+ # 3=Server down
+ # 4=File marked as illegal
+ # 5=Anonymous file locked, because it has more than 10 downloads already
+ # 50+n=File OK (TrafficShare direct download type "n" without any logging.)
+ # 100+n=File OK (TrafficShare direct download type "n" with logging.
+ # Read our privacy policy to see what is logged.)
+
+ self.api_data = {"fileid": fields[0], "filename": fields[1], "size": int(fields[2]), "serverid": fields[3],
+ "status": fields[4], "shorthost": fields[5], "checksum": fields[6].strip().lower()}
+
+ if int(self.api_data['status']) > 100:
+ self.api_data['status'] = str(int(self.api_data['status']) - 100)
+ elif int(self.api_data['status']) > 50:
+ self.api_data['status'] = str(int(self.api_data['status']) - 50)
+
+ self.api_data['mirror'] = "http://rs%(serverid)s%(shorthost)s.rapidshare.com/files/%(fileid)s/%(filename)s" % self.api_data
+
+ def freeWait(self):
+ """downloads html with the important information
+ """
+ self.no_download = True
+
+ id = self.id
+ name = self.name
+
+ prepare = "https://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=%(id)s&filename=%(name)s&try=1&cbf=RSAPIDispatcher&cbid=1" % {
+ "name": name, "id": id}
+
+ self.logDebug("RS API Request: %s" % prepare)
+ result = self.load(prepare, ref=False)
+ self.logDebug("RS API Result: %s" % result)
+
+ between_wait = re.search("You need to wait (\d+) seconds", result)
+
+ if "You need RapidPro to download more files from your IP address" in result:
+ self.setWait(60)
+ self.logInfo(_("Already downloading from this ip address, waiting 60 seconds"))
+ self.wait()
+ elif ("Too many users downloading from this server right now" in result or
+ "All free download slots are full" in result):
+ self.setWait(120)
+ self.logInfo(_("RapidShareCom: No free slots"))
+ self.wait()
+ elif "This file is too big to download it for free" in result:
+ self.fail(_("You need a premium account for this file"))
+ elif "Filename invalid." in result:
+ self.fail(_("Filename reported invalid"))
+ elif between_wait:
+ self.setWait(int(between_wait.group(1)))
+ self.wantReconnect = True
+ self.wait()
+ else:
+ self.no_download = False
+
+ tmp, info = result.split(":")
+ data = info.split(",")
+
+ dl_dict = {"id": id,
+ "name": name,
+ "host": data[0],
+ "auth": data[1],
+ "server": self.api_data['serverid'],
+ "size": self.api_data['size']}
+ self.setWait(int(data[2]) + 2 + self.offset)
+ self.wait()
+
+ return dl_dict
+
+ def get_file_name(self):
+ if self.api_data['filename']:
+ return self.api_data['filename']
+ return self.url.split("/")[-1]
diff --git a/pyload/plugins/hoster/RarefileNet.py b/pyload/plugins/hoster/RarefileNet.py
new file mode 100644
index 000000000..7c6632aac
--- /dev/null
+++ b/pyload/plugins/hoster/RarefileNet.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from pyload.utils import html_unescape
+
+
+class RarefileNet(XFileSharingPro):
+ __name__ = "RarefileNet"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?rarefile.net/\w{12}'
+
+ __description__ = """Rarefile.net hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "rarefile.net"
+
+ FILE_NAME_PATTERN = r'<td><font color="red">(?P<N>.*?)</font></td>'
+ FILE_SIZE_PATTERN = r'<td>Size : (?P<S>.+?)&nbsp;'
+ LINK_PATTERN = r'<a href="(?P<link>[^"]+)">(?P=link)</a>'
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+
+ def handleCaptcha(self, inputs):
+ captcha_div = re.search(r'<b>Enter code.*?<div.*?>(.*?)</div>', self.html, re.S).group(1)
+ self.logDebug(captcha_div)
+ numerals = re.findall('<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div))
+ inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
+ self.logDebug("CAPTCHA", inputs['code'], numerals)
+ return 3
+
+
+getInfo = create_getInfo(RarefileNet)
diff --git a/pyload/plugins/hoster/RealdebridCom.py b/pyload/plugins/hoster/RealdebridCom.py
new file mode 100644
index 000000000..a458cc5d0
--- /dev/null
+++ b/pyload/plugins/hoster/RealdebridCom.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from random import randrange
+from urllib import quote, unquote
+from time import time
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import parseFileSize
+
+
+class RealdebridCom(Hoster):
+ __name__ = "RealdebridCom"
+ __type__ = "hoster"
+ __version__ = "0.53"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?real-debrid\..*'
+
+ __description__ = """Real-Debrid.com hoster plugin"""
+ __author_name__ = "Devirex Hazzard"
+ __author_mail__ = "naibaf_11@yahoo.de"
+
+
+ def getFilename(self, url):
+ try:
+ name = unquote(url.rsplit("/", 1)[1])
+ except IndexError:
+ name = "Unknown_Filename..."
+ if not name or name.endswith(".."): # incomplete filename, append random stuff
+ name += "%s.tmp" % randrange(100, 999)
+ return name
+
+ def setup(self):
+ self.chunkLimit = 3
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid")
+ self.fail("No Real-debrid account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ password = self.getPassword().splitlines()
+ if not password:
+ password = ""
+ else:
+ password = password[0]
+
+ url = "https://real-debrid.com/ajax/unrestrict.php?lang=en&link=%s&password=%s&time=%s" % (
+ quote(pyfile.url, ""), password, int(time() * 1000))
+ page = self.load(url)
+ data = json_loads(page)
+
+ self.logDebug("Returned Data: %s" % data)
+
+ if data['error'] != 0:
+ if data['message'] == "Your file is unavailable on the hoster.":
+ self.offline()
+ else:
+ self.logWarning(data['message'])
+ self.tempOffline()
+ else:
+ if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['file_name']:
+ pyfile.name = data['file_name']
+ pyfile.size = parseFileSize(data['file_size'])
+ new_url = data['generated_links'][0][-1]
+
+ if self.getConfig("https"):
+ new_url = new_url.replace("http://", "https://")
+ else:
+ new_url = new_url.replace("https://", "http://")
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: %s" % new_url)
+
+ if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'):
+ #only use when name wasnt already set
+ pyfile.name = self.getFilename(new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload(
+ {"error": "<title>An error occured while processing your request</title>"})
+
+ if check == "error":
+ #usual this download can safely be retried
+ self.retry(wait_time=60, reason="An error occured while generating link.")
diff --git a/pyload/plugins/hoster/RedtubeCom.py b/pyload/plugins/hoster/RedtubeCom.py
new file mode 100644
index 000000000..42c24628e
--- /dev/null
+++ b/pyload/plugins/hoster/RedtubeCom.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+from pyload.unescape import unescape
+
+
+class RedtubeCom(Hoster):
+ __name__ = "RedtubeCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?redtube\.com/\d+'
+
+ __description__ = """Redtube.com hoster plugin"""
+ __author_name__ = "jeix"
+ __author_mail__ = "jeix@hasnomail.de"
+
+
+ def process(self, pyfile):
+ self.download_html()
+ if not self.file_exists():
+ self.offline()
+
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1))
+
+ return file_url
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ return re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv"
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+
+ if re.search(r'This video has been removed.', self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/RehostTo.py b/pyload/plugins/hoster/RehostTo.py
new file mode 100644
index 000000000..d3d3fcd8b
--- /dev/null
+++ b/pyload/plugins/hoster/RehostTo.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+from urllib import quote, unquote
+
+from pyload.plugins.Hoster import Hoster
+
+
+class RehostTo(Hoster):
+ __name__ = "RehostTo"
+ __type__ = "hoster"
+ __version__ = "0.13"
+
+ __pattern__ = r'https?://.*rehost.to\..*'
+
+ __description__ = """Rehost.com hoster plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def getFilename(self, url):
+ return unquote(url.rsplit("/", 1)[1])
+
+ def setup(self):
+ self.chunkLimit = 1
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "rehost.to")
+ self.fail("No rehost.to account provided")
+
+ data = self.account.getAccountInfo(self.user)
+ long_ses = data['long_ses']
+
+ self.logDebug("Rehost.to: Old URL: %s" % pyfile.url)
+ new_url = "http://rehost.to/process_download.php?user=cookie&pass=%s&dl=%s" % (long_ses, quote(pyfile.url, ""))
+
+ #raise timeout to 2min
+ self.req.setOption("timeout", 120)
+
+ self.download(new_url, disposition=True)
diff --git a/pyload/plugins/hoster/RemixshareCom.py b/pyload/plugins/hoster/RemixshareCom.py
new file mode 100644
index 000000000..dfd7db5a0
--- /dev/null
+++ b/pyload/plugins/hoster/RemixshareCom.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://remixshare.com/download/p946u
+#
+# Note:
+# The remixshare.com website is very very slow, so
+# if your download not starts because of pycurl timeouts:
+# Adjust timeouts in /usr/share/pyload/pyload/network/HTTPRequest.py
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class RemixshareCom(SimpleHoster):
+ __name__ = "RemixshareCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://remixshare\.com/(download|dl)/\w+'
+
+ __description__ = """Remixshare.com hoster plugin"""
+ __author_name__ = ("zapp-brannigan", "Walter Purcaro")
+ __author_mail__ = ("fuerst.reinje@web.de", "vuolter@gmail.com")
+
+ FILE_INFO_PATTERN = r'title=\'.+?\'>(?P<N>.+?)</span><span class=\'light2\'>&nbsp;\((?P<S>\d+)&nbsp;(?P<U>\w+)\)<'
+ OFFLINE_PATTERN = r'<h1>Ooops!<'
+
+ LINK_PATTERN = r'(http://remixshare\.com/downloadfinal/.+?)"'
+ TOKEN_PATTERN = r'var acc = (\d+)'
+ WAIT_PATTERN = r'var XYZ = r"(\d+)"'
+
+
+ def setup(self):
+ self.multiDL = True
+ self.chunkLimit = 1
+
+ def handleFree(self):
+ b = re.search(self.LINK_PATTERN, self.html)
+ if not b:
+ self.parseError("Cannot parse download url")
+ c = re.search(self.TOKEN_PATTERN, self.html)
+ if not c:
+ self.parseError("Cannot parse file token")
+ dl_url = b.group(1) + c.group(1)
+
+ #Check if we have to wait
+ seconds = re.search(self.WAIT_PATTERN, self.html)
+ if seconds:
+ self.logDebug("Wait " + seconds.group(1))
+ self.wait(seconds.group(1))
+
+ # Finally start downloading...
+ self.logDebug("Download URL = r" + dl_url)
+ self.download(dl_url, disposition=True)
+
+
+getInfo = create_getInfo(RemixshareCom)
diff --git a/pyload/plugins/hoster/RgHostNet.py b/pyload/plugins/hoster/RgHostNet.py
new file mode 100644
index 000000000..0240f3a05
--- /dev/null
+++ b/pyload/plugins/hoster/RgHostNet.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class RgHostNet(SimpleHoster):
+ __name__ = "RgHostNet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?rghost\.net/\d+(?:r=\d+)?'
+
+ __description__ = """RgHost.net hoster plugin"""
+ __author_name__ = "z00nx"
+ __author_mail__ = "z00nx0@gmail.com"
+
+ FILE_INFO_PATTERN = r'<h1>\s+(<a[^>]+>)?(?P<N>[^<]+)(</a>)?\s+<small[^>]+>\s+\((?P<S>[^)]+)\)\s+</small>\s+</h1>'
+ OFFLINE_PATTERN = r'File is deleted|this page is not found'
+ LINK_PATTERN = r'''<a\s+href="([^"]+)"\s+class="btn\s+large\s+download"[^>]+>Download</a>'''
+
+
+ def handleFree(self):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("Unable to detect the direct link")
+ download_link = m.group(1)
+ self.download(download_link, disposition=True)
+
+
+getInfo = create_getInfo(RgHostNet)
diff --git a/pyload/plugins/hoster/RyushareCom.py b/pyload/plugins/hoster/RyushareCom.py
new file mode 100644
index 000000000..326c55e0c
--- /dev/null
+++ b/pyload/plugins/hoster/RyushareCom.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://ryushare.com/cl0jy8ric2js/random.bin
+
+import re
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from pyload.plugins.internal.CaptchaService import SolveMedia
+
+
+class RyushareCom(XFileSharingPro):
+ __name__ = "RyushareCom"
+ __type__ = "hoster"
+ __version__ = "0.16"
+
+ __pattern__ = r'http://(?:www\.)?ryushare\.com/\w+'
+
+ __description__ = """Ryushare.com hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell", "quareevo")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "quareevo@arcor.de")
+
+ HOSTER_NAME = "ryushare.com"
+
+ FILE_SIZE_PATTERN = r'You have requested <font color="red">[^<]+</font> \((?P<S>[\d\.]+) (?P<U>\w+)'
+
+ WAIT_PATTERN = r'You have to wait ((?P<hour>\d+) hour[s]?, )?((?P<min>\d+) minute[s], )?(?P<sec>\d+) second[s]'
+ LINK_PATTERN = r'<a href="([^"]+)">Click here to download<'
+ SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"'
+
+
+ def getDownloadLink(self):
+ retry = False
+ self.html = self.load(self.pyfile.url)
+ action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
+ if "method_premium" in inputs:
+ del inputs['method_premium']
+
+ self.html = self.load(self.pyfile.url, post=inputs)
+ action, inputs = self.parseHtmlForm('F1')
+
+ self.setWait(65)
+ # Wait 1 hour
+ if "You have reached the download-limit" in self.html:
+ self.setWait(1 * 60 * 60, True)
+ retry = True
+
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ wait = m.groupdict(0)
+ waittime = int(wait['hour']) * 60 * 60 + int(wait['min']) * 60 + int(wait['sec'])
+ self.setWait(waittime, True)
+ retry = True
+
+ self.wait()
+ if retry:
+ self.retry()
+
+ for _ in xrange(5):
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m is None:
+ self.parseError("Error parsing captcha")
+
+ captchaKey = m.group(1)
+ captcha = SolveMedia(self)
+ challenge, response = captcha.challenge(captchaKey)
+
+ inputs['adcopy_challenge'] = challenge
+ inputs['adcopy_response'] = response
+
+ self.html = self.load(self.pyfile.url, post=inputs)
+ if "WRONG CAPTCHA" in self.html:
+ self.invalidCaptcha()
+ self.logInfo("Invalid Captcha")
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("You have entered 5 invalid captcha codes")
+
+ if "Click here to download" in self.html:
+ return re.search(r'<a href="([^"]+)">Click here to download</a>', self.html).group(1)
+
+
+getInfo = create_getInfo(RyushareCom)
diff --git a/pyload/plugins/hoster/SecureUploadEu.py b/pyload/plugins/hoster/SecureUploadEu.py
new file mode 100644
index 000000000..befe5f0e9
--- /dev/null
+++ b/pyload/plugins/hoster/SecureUploadEu.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class SecureUploadEu(XFileSharingPro):
+ __name__ = "SecureUploadEu"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?secureupload\.eu/(\w){12}(/\w+)'
+
+ __description__ = """SecureUpload.eu hoster plugin"""
+ __author_name__ = "z00nx"
+ __author_mail__ = "z00nx0@gmail.com"
+
+ HOSTER_NAME = "secureupload.eu"
+
+ FILE_INFO_PATTERN = r'<h3>Downloading (?P<N>[^<]+) \((?P<S>[^<]+)\)</h3>'
+ OFFLINE_PATTERN = r'The file was removed|File Not Found'
+
+
+getInfo = create_getInfo(SecureUploadEu)
diff --git a/pyload/plugins/hoster/SendmywayCom.py b/pyload/plugins/hoster/SendmywayCom.py
new file mode 100644
index 000000000..87cbfcc0d
--- /dev/null
+++ b/pyload/plugins/hoster/SendmywayCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class SendmywayCom(XFileSharingPro):
+ __name__ = "SendmywayCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?sendmyway.com/\w{12}'
+
+ __description__ = """SendMyWay hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "sendmyway.com"
+
+ FILE_NAME_PATTERN = r'<p class="file-name" ><.*?>\s*(?P<N>.+)'
+ FILE_SIZE_PATTERN = r'<small>\((?P<S>\d+) bytes\)</small>'
+
+
+getInfo = create_getInfo(SendmywayCom)
diff --git a/pyload/plugins/hoster/SendspaceCom.py b/pyload/plugins/hoster/SendspaceCom.py
new file mode 100644
index 000000000..7a0908c8d
--- /dev/null
+++ b/pyload/plugins/hoster/SendspaceCom.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class SendspaceCom(SimpleHoster):
+ __name__ = "SendspaceCom"
+ __type__ = "hoster"
+ __version__ = "0.13"
+
+ __pattern__ = r'http://(?:www\.)?sendspace.com/file/.*'
+
+ __description__ = """Sendspace.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<h2 class="bgray">\s*<(?:b|strong)>(?P<N>[^<]+)</'
+ FILE_SIZE_PATTERN = r'<div class="file_description reverse margin_center">\s*<b>File Size:</b>\s*(?P<S>[0-9.]+)(?P<U>[kKMG])i?B\s*</div>'
+ OFFLINE_PATTERN = r'<div class="msg error" style="cursor: default">Sorry, the file you requested is not available.</div>'
+
+ LINK_PATTERN = r'<a id="download_button" href="([^"]+)"'
+ CAPTCHA_PATTERN = r'<td><img src="(/captchas/captcha.php?captcha=([^"]+))"></td>'
+ USER_CAPTCHA_PATTERN = r'<td><img src="/captchas/captcha.php?user=([^"]+))"></td>'
+
+
+ def handleFree(self):
+ params = {}
+ for _ in xrange(3):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ if 'captcha_hash' in params:
+ self.correctCaptcha()
+ download_url = m.group(1)
+ break
+
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
+ if 'captcha_hash' in params:
+ self.invalidCaptcha()
+ captcha_url1 = "http://www.sendspace.com/" + m.group(1)
+ m = re.search(self.USER_CAPTCHA_PATTERN, self.html)
+ captcha_url2 = "http://www.sendspace.com/" + m.group(1)
+ params = {'captcha_hash': m.group(2),
+ 'captcha_submit': 'Verify',
+ 'captcha_answer': self.decryptCaptcha(captcha_url1) + " " + self.decryptCaptcha(captcha_url2)}
+ else:
+ params = {'download': "Regular Download"}
+
+ self.logDebug(params)
+ self.html = self.load(self.pyfile.url, post=params)
+ else:
+ self.fail("Download link not found")
+
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
+
+
+create_getInfo(SendspaceCom)
diff --git a/pyload/plugins/hoster/Share4webCom.py b/pyload/plugins/hoster/Share4webCom.py
new file mode 100644
index 000000000..a3d92d9f4
--- /dev/null
+++ b/pyload/plugins/hoster/Share4webCom.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.UnibytesCom import UnibytesCom
+from pyload.plugins.internal.SimpleHoster import create_getInfo
+
+
+class Share4webCom(UnibytesCom):
+ __name__ = "Share4webCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?share4web\.com/get/\w+'
+
+ __description__ = """Share4web.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ HOSTER_NAME = "share4web.com"
+
+
+getInfo = create_getInfo(UnibytesCom)
diff --git a/pyload/plugins/hoster/Share76Com.py b/pyload/plugins/hoster/Share76Com.py
new file mode 100644
index 000000000..2cd736992
--- /dev/null
+++ b/pyload/plugins/hoster/Share76Com.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class Share76Com(DeadHoster):
+ __name__ = "Share76Com"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?share76.com/\w{12}'
+
+ __description__ = """Share76.com hoster plugin"""
+ __author_name__ = "me"
+ __author_mail__ = None
+
+
+getInfo = create_getInfo(Share76Com)
diff --git a/pyload/plugins/hoster/ShareFilesCo.py b/pyload/plugins/hoster/ShareFilesCo.py
new file mode 100644
index 000000000..b75eb0740
--- /dev/null
+++ b/pyload/plugins/hoster/ShareFilesCo.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class ShareFilesCo(DeadHoster):
+ __name__ = "ShareFilesCo"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?sharefiles\.co/\w{12}'
+
+ __description__ = """Sharefiles.co hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+getInfo = create_getInfo(ShareFilesCo)
diff --git a/pyload/plugins/hoster/ShareRapidCom.py b/pyload/plugins/hoster/ShareRapidCom.py
new file mode 100644
index 000000000..b474103fc
--- /dev/null
+++ b/pyload/plugins/hoster/ShareRapidCom.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import HTTPHEADER
+
+from pyload.network.RequestFactory import getRequest
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+
+
+def getInfo(urls):
+ h = getRequest()
+ h.c.setopt(HTTPHEADER,
+ ["Accept: text/html",
+ "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"])
+ for url in urls:
+ html = h.load(url, decode=True)
+ file_info = parseFileInfo(ShareRapidCom, url, html)
+ yield file_info
+
+
+class ShareRapidCom(SimpleHoster):
+ __name__ = "ShareRapidCom"
+ __type__ = "hoster"
+ __version__ = "0.54"
+
+ __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+'
+
+ __description__ = """MegaRapid.cz hoster plugin"""
+ __author_name__ = ("MikyWoW", "zoidberg", "stickell", "Walter Purcaro")
+ __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com")
+
+ FILE_NAME_PATTERN = r'<h1[^>]*><span[^>]*>(?:<a[^>]*>)?(?P<N>[^<]+)'
+ FILE_SIZE_PATTERN = r'<td class="i">Velikost:</td>\s*<td class="h"><strong>\s*(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong></td>'
+ OFFLINE_PATTERN = ur'Nastala chyba 404|Soubor byl smazán'
+
+ SH_CHECK_TRAFFIC = True
+
+ LINK_PATTERN = r'<a href="([^"]+)" title="Stahnout">([^<]+)</a>'
+ ERR_LOGIN_PATTERN = ur'<div class="error_div"><strong>Stahování je přístupné pouze přihlášenÜm uÅŸivatelům'
+ ERR_CREDIT_PATTERN = ur'<div class="error_div"><strong>Stahování zdarma je moÅŸné jen přes náš'
+
+
+ def setup(self):
+ self.chunkLimit = 1
+
+ def handlePremium(self):
+ try:
+ self.html = self.load(self.pyfile.url, decode=True)
+ except BadHeader, e:
+ self.account.relogin(self.user)
+ self.retry(max_tries=3, reason=str(e))
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ link = m.group(1)
+ self.logDebug("Premium link: %s" % link)
+ self.download(link, disposition=True)
+ else:
+ if re.search(self.ERR_LOGIN_PATTERN, self.html):
+ self.relogin(self.user)
+ self.retry(max_tries=3, reason="User login failed")
+ elif re.search(self.ERR_CREDIT_PATTERN, self.html):
+ self.fail("Not enough credit left")
+ else:
+ self.fail("Download link not found")
diff --git a/pyload/plugins/hoster/SharebeesCom.py b/pyload/plugins/hoster/SharebeesCom.py
new file mode 100644
index 000000000..287dbf59c
--- /dev/null
+++ b/pyload/plugins/hoster/SharebeesCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class SharebeesCom(DeadHoster):
+ __name__ = "SharebeesCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?sharebees.com/\w{12}'
+
+ __description__ = """ShareBees hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(SharebeesCom)
diff --git a/pyload/plugins/hoster/ShareonlineBiz.py b/pyload/plugins/hoster/ShareonlineBiz.py
new file mode 100644
index 000000000..b1d9ae5cb
--- /dev/null
+++ b/pyload/plugins/hoster/ShareonlineBiz.py
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import time
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.Plugin import chunks
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+
+
+def getInfo(urls):
+ api_url_base = "http://api.share-online.biz/linkcheck.php"
+
+ urls = [url.replace("https://", "http://") for url in urls]
+
+ for chunk in chunks(urls, 90):
+ api_param_file = {"links": "\n".join(x.replace("http://www.share-online.biz/dl/", "").rstrip("/") for x in
+ chunk)} # api only supports old style links
+ src = getURL(api_url_base, post=api_param_file, decode=True)
+ result = []
+ for i, res in enumerate(src.split("\n")):
+ if not res:
+ continue
+ fields = res.split(";")
+
+ if fields[1] == "OK":
+ status = 2
+ elif fields[1] in ("DELETED", "NOT FOUND"):
+ status = 1
+ else:
+ status = 3
+
+ result.append((fields[2], int(fields[3]), status, chunk[i]))
+ yield result
+
+
+class ShareonlineBiz(Hoster):
+ __name__ = "ShareonlineBiz"
+ __type__ = "hoster"
+ __version__ = "0.40"
+
+ __pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download.php\?id=|dl/)(?P<ID>\w+)'
+
+ __description__ = """Shareonline.biz hoster plugin"""
+ __author_name__ = ("spoob", "mkaay", "zoidberg", "Walter Purcaro")
+ __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", "vuolter@gmail.com")
+
+ ERROR_INFO_PATTERN = r'<p class="b">Information:</p>\s*<div>\s*<strong>(.*?)</strong>'
+
+
+ def setup(self):
+ # range request not working?
+ # api supports resume, only one chunk
+ # website isn't supporting resuming in first place
+ self.file_id = re.match(self.__pattern__, self.pyfile.url).group("ID")
+ self.pyfile.url = "http://www.share-online.biz/dl/" + self.file_id
+
+ self.resumeDownload = self.premium
+ self.multiDL = False
+ #self.chunkLimit = 1
+
+ self.check_data = None
+
+ def process(self, pyfile):
+ if self.premium:
+ self.handlePremium()
+ #web-download fallback removed - didn't work anyway
+ else:
+ self.handleFree()
+
+ # check = self.checkDownload({"failure": re.compile(self.ERROR_INFO_PATTERN)})
+ # if check == "failure":
+ # try:
+ # self.retry(reason=self.lastCheck.group(1).decode("utf8"))
+ # except:
+ # self.retry(reason="Unknown error")
+
+ if self.api_data:
+ self.check_data = {"size": int(self.api_data['size']), "md5": self.api_data['md5']}
+
+ def loadAPIData(self):
+ api_url_base = "http://api.share-online.biz/linkcheck.php?md5=1"
+ api_param_file = {"links": self.file_id} # api only supports old style links
+ src = self.load(api_url_base, cookies=False, post=api_param_file, decode=True)
+
+ fields = src.split(";")
+ self.api_data = {"fileid": fields[0],
+ "status": fields[1]}
+ if not self.api_data['status'] == "OK":
+ self.offline()
+ else:
+ self.api_data['filename'] = fields[2]
+ self.api_data['size'] = fields[3] # in bytes
+ self.api_data['md5'] = fields[4].strip().lower().replace("\n\n", "") # md5
+
+ def handleFree(self):
+ self.loadAPIData()
+ self.pyfile.name = self.api_data['filename']
+ self.pyfile.size = int(self.api_data['size'])
+
+ self.html = self.load(self.pyfile.url, cookies=True) # refer, stuff
+ self.setWait(3)
+ self.wait()
+
+ self.html = self.load("%s/free/" % self.pyfile.url, post={"dl_free": "1", "choice": "free"}, decode=True)
+ self.checkErrors()
+
+ m = re.search(r'var wait=(\d+);', self.html)
+
+ recaptcha = ReCaptcha(self)
+ for _ in xrange(5):
+ challenge, response = recaptcha.challenge("6LdatrsSAAAAAHZrB70txiV5p-8Iv8BtVxlTtjKX")
+ self.setWait(int(m.group(1)) if m else 30)
+ response = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time() * 1000)), post={
+ 'dl_free': '1',
+ 'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response})
+
+ if not response == '0':
+ self.correctCaptcha()
+ break
+ else:
+ self.invalidCaptcha()
+ else:
+ self.invalidCaptcha()
+ self.fail("No valid captcha solution received")
+
+ download_url = response.decode("base64")
+ self.logDebug(download_url)
+ if not download_url.startswith("http://"):
+ self.parseError("download url")
+
+ self.wait()
+ self.download(download_url)
+ # check download
+ check = self.checkDownload({
+ "cookie": re.compile(r'<div id="dl_failure"'),
+ "fail": re.compile(r"<title>Share-Online")
+ })
+ if check == "cookie":
+ self.invalidCaptcha()
+ self.retry(5, 60, "Cookie failure")
+ elif check == "fail":
+ self.invalidCaptcha()
+ self.retry(5, 5 * 60, "Download failed")
+ else:
+ self.correctCaptcha()
+
+ def handlePremium(self): #: should be working better loading (account) api internally
+ self.account.getAccountInfo(self.user, True)
+ src = self.load("http://api.share-online.biz/account.php",
+ {"username": self.user, "password": self.account.accounts[self.user]['password'],
+ "act": "download", "lid": self.file_id})
+
+ self.api_data = dlinfo = {}
+ for line in src.splitlines():
+ key, value = line.split(": ")
+ dlinfo[key.lower()] = value
+
+ self.logDebug(dlinfo)
+ if not dlinfo['status'] == "online":
+ self.offline()
+ else:
+ self.pyfile.name = dlinfo['name']
+ self.pyfile.size = int(dlinfo['size'])
+
+ dlLink = dlinfo['url']
+ if dlLink == "server_under_maintenance":
+ self.tempOffline()
+ else:
+ self.multiDL = True
+ self.download(dlLink)
+
+ def checkErrors(self):
+ m = re.search(r"/failure/(.*?)/1", self.req.lastEffectiveURL)
+ if m is None:
+ return
+
+ err = m.group(1)
+ m = re.search(self.ERROR_INFO_PATTERN, self.html)
+ msg = m.group(1) if m else ""
+ self.logError(err, msg or "Unknown error occurred")
+
+ if err == "invalid":
+ self.fail(msg or "File not available")
+ elif err in ("freelimit", "size", "proxy"):
+ self.fail(msg or "Premium account needed")
+ else:
+ if err in 'server':
+ self.setWait(600, False)
+ elif err in 'expired':
+ self.setWait(30, False)
+ else:
+ self.setWait(300, True)
+
+ self.wait()
+ self.retry(max_tries=25, reason=msg)
diff --git a/pyload/plugins/hoster/ShareplaceCom.py b/pyload/plugins/hoster/ShareplaceCom.py
new file mode 100644
index 000000000..60bb596cc
--- /dev/null
+++ b/pyload/plugins/hoster/ShareplaceCom.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.Hoster import Hoster
+
+
+class ShareplaceCom(Hoster):
+ __name__ = "ShareplaceCom"
+ __type__ = "hoster"
+ __version__ = "0.11"
+
+ __pattern__ = r'(http://)?(?:www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+'
+
+ __description__ = """Shareplace.com hoster plugin"""
+ __author_name__ = "ACCakut"
+ __author_mail__ = None
+
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+ self.prepare()
+ self.download(self.get_file_url())
+
+ def prepare(self):
+ if not self.file_exists():
+ self.offline()
+
+ self.pyfile.name = self.get_file_name()
+
+ wait_time = self.get_waiting_time()
+ self.setWait(wait_time)
+ self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time))
+ self.wait()
+
+ def get_waiting_time(self):
+ if not self.html:
+ self.download_html()
+
+ #var zzipitime = 15;
+ m = re.search(r'var zzipitime = (\d+);', self.html)
+ if m:
+ sec = int(m.group(1))
+ else:
+ sec = 0
+
+ return sec
+
+ def download_html(self):
+ url = re.sub("shareplace.com\/\?", "shareplace.com//index1.php/?a=", self.pyfile.url)
+ self.html = self.load(url, decode=True)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ url = re.search(r"var beer = '(.*?)';", self.html)
+ if url:
+ url = url.group(1)
+ url = unquote(
+ url.replace("http://http:/", "").replace("vvvvvvvvv", "").replace("lllllllll", "").replace(
+ "teletubbies", ""))
+ self.logDebug("URL: %s" % url)
+ return url
+ else:
+ self.fail("absolute filepath could not be found. offline? ")
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1)
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+
+ if re.search(r"HTTP Status 404", self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/ShragleCom.py b/pyload/plugins/hoster/ShragleCom.py
new file mode 100644
index 000000000..0ec93fcdc
--- /dev/null
+++ b/pyload/plugins/hoster/ShragleCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class ShragleCom(DeadHoster):
+ __name__ = "ShragleCom"
+ __type__ = "hoster"
+ __version__ = "0.22"
+
+ __pattern__ = r'http://(?:www\.)?(cloudnator|shragle).com/files/(?P<ID>.*?)/'
+
+ __description__ = """Cloudnator.com (Shragle.com) hoster plugin"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+
+getInfo = create_getInfo(ShragleCom)
diff --git a/pyload/plugins/hoster/SimplyPremiumCom.py b/pyload/plugins/hoster/SimplyPremiumCom.py
new file mode 100644
index 000000000..760b7ff1b
--- /dev/null
+++ b/pyload/plugins/hoster/SimplyPremiumCom.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from datetime import datetime, timedelta
+
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+
+
+class SimplyPremiumCom(Hoster):
+ __name__ = "SimplyPremiumCom"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://.*(simply-premium)\.com'
+
+ __description__ = """Simply-Premium.com hoster plugin"""
+ __author_name__ = "EvolutionClip"
+ __author_mail__ = "evolutionclip@live.de"
+
+
+ def setup(self):
+ self.chunkLimit = 16
+ self.resumeDownload = False
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Simply-Premium.com")
+ self.fail("No Simply-Premium.com account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ for i in xrange(5):
+ page = self.load('http://www.simply-premium.com/premium.php?info&link=' + pyfile.url)
+ self.logDebug("JSON data: " + page)
+ if page != '':
+ break
+ else:
+ self.logInfo("Unable to get API data, waiting 1 minute and retry")
+ self.retry(5, 60, "Unable to get API data")
+
+ if '<valid>0</valid>' in page or (
+ "You are not allowed to download from this host" in page and self.premium):
+ self.account.relogin(self.user)
+ self.retry()
+ elif "NOTFOUND" in page:
+ self.offline()
+ elif "downloadlimit" in page:
+ self.logWarning("Reached maximum connctions")
+ self.retry(5, 60, "Reached maximum connctions")
+ elif "trafficlimit" in page:
+ self.logWarning("Reached daily limit for this host")
+ self.retry(1, secondsToMidnight(gmt=2), "Daily limit for this host reached")
+ elif "hostererror" in page:
+ self.logWarning("Hoster temporarily unavailable, waiting 1 minute and retry")
+ self.retry(5, 60, "Hoster is temporarily unavailable")
+ #page = json_loads(page)
+ #new_url = page.keys()[0]
+ #self.api_data = page[new_url]
+
+ try:
+ self.pyfile.name = re.search(r'<name>([^<]+)</name>', page).group(1)
+ except AttributeError:
+ self.pyfile.name = ""
+
+ try:
+ self.pyfile.size = re.search(r'<size>(\d+)</size>', page).group(1)
+ except AttributeError:
+ self.pyfile.size = 0
+
+ try:
+ new_url = re.search(r'<download>([^<]+)</download>', page).group(1)
+ except AttributeError:
+ new_url = 'http://www.simply-premium.com/premium.php?link=' + pyfile.url
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: " + new_url)
+
+ self.download(new_url, disposition=True)
diff --git a/pyload/plugins/hoster/SimplydebridCom.py b/pyload/plugins/hoster/SimplydebridCom.py
new file mode 100644
index 000000000..c6b03c124
--- /dev/null
+++ b/pyload/plugins/hoster/SimplydebridCom.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class SimplydebridCom(Hoster):
+ __name__ = "SimplydebridCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd.php/*'
+
+ __description__ = """Simply-debrid.com hoster plugin"""
+ __author_name__ = "Kagenoshin"
+ __author_mail__ = "kagenoshin@gmx.ch"
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "simply-debrid.com")
+ self.fail("No simply-debrid.com account provided")
+
+ self.logDebug("Old URL: %s" % pyfile.url)
+
+ #fix the links for simply-debrid.com!
+ new_url = pyfile.url
+ new_url = new_url.replace("clz.to", "cloudzer.net/file")
+ new_url = new_url.replace("http://share-online", "http://www.share-online")
+ new_url = new_url.replace("ul.to", "uploaded.net/file")
+ new_url = new_url.replace("uploaded.com", "uploaded.net")
+ new_url = new_url.replace("filerio.com", "filerio.in")
+ new_url = new_url.replace("lumfile.com", "lumfile.se")
+ if('fileparadox' in new_url):
+ new_url = new_url.replace("http://", "https://")
+
+ if re.match(self.__pattern__, new_url):
+ new_url = new_url
+
+ self.logDebug("New URL: %s" % new_url)
+
+ if not re.match(self.__pattern__, new_url):
+ page = self.load('http://simply-debrid.com/api.php', get={'dl': new_url}) # +'&u='+self.user+'&p='+self.account.getAccountData(self.user)['password'])
+ if 'tiger Link' in page or 'Invalid Link' in page or ('API' in page and 'ERROR' in page):
+ self.fail('Unable to unrestrict link')
+ new_url = page
+
+ self.setWait(5)
+ self.wait()
+ self.logDebug("Unrestricted URL: " + new_url)
+
+ self.download(new_url, disposition=True)
+
+ check = self.checkDownload({"bad1": "No address associated with hostname", "bad2": "<html"})
+
+ if check == "bad1" or check == "bad2":
+ self.retry(24, 3 * 60, "Bad file downloaded")
diff --git a/pyload/plugins/hoster/SockshareCom.py b/pyload/plugins/hoster/SockshareCom.py
new file mode 100644
index 000000000..36e03a5ae
--- /dev/null
+++ b/pyload/plugins/hoster/SockshareCom.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from os import rename
+
+from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class SockshareCom(SimpleHoster):
+ __name__ = "SockshareCom"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?sockshare\.com/(mobile/)?(file|embed)/(?P<ID>\w+)'
+
+ __description__ = """Sockshare.com hoster plugin"""
+ __author_name__ = ("jeix", "stickell", "Walter Purcaro")
+ __author_mail__ = ("jeix@hasnomail.de", "l.stickell@yahoo.it", "vuolter@gmail.com")
+
+ FILE_INFO_PATTERN = r'site-content">\s*<h1>(?P<N>.+)<strong>\( (?P<S>[^)]+) \)</strong></h1>'
+ OFFLINE_PATTERN = r'>This file doesn\'t exist, or has been removed.<'
+ TEMP_OFFLINE_PATTERN = r'(>This content server has been temporarily disabled for upgrades|Try again soon\\. You can still download it below\\.<)'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.sockshare.com/file/\g<ID>')]
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = True
+ self.chunkLimit = -1
+
+ def handleFree(self):
+ name = self.pyfile.name
+ link = self._getLink()
+ self.logDebug("Direct link: " + link)
+ self.download(link, disposition=True)
+ self.processName(name)
+
+ def _getLink(self):
+ hash_data = re.search(r'<input type="hidden" value="([a-z0-9]+)" name="hash">', self.html)
+ if not hash_data:
+ self.parseError("Unable to detect hash")
+
+ post_data = {"hash": hash_data.group(1), "confirm": "Continue+as+Free+User"}
+ self.html = self.load(self.pyfile.url, post=post_data)
+ if ">You have exceeded the daily stream limit for your country\\. You can wait until tomorrow" in self.html:
+ self.logWarning("You have exceeded your daily stream limit for today")
+ self.wait(secondsToMidnight(gmt=2), True)
+ elif re.search(self.TEMP_OFFLINE_PATTERN, self.html):
+ self.retry(wait_time=2 * 60 * 60, reason="Server temporarily offline") # 2 hours wait
+
+ patterns = (r'(/get_file\.php\?id=[A-Z0-9]+&key=[a-zA-Z0-9=]+&original=1)',
+ r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+)',
+ r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+&original=1)',
+ r'<a href="/gopro\.php">Tired of ads and waiting\? Go Pro!</a>[\t\n\rn ]+</div>[\t\n\rn ]+<a href="(/.*?)"')
+ for pattern in patterns:
+ link = re.search(pattern, self.html)
+ if link:
+ break
+ else:
+ link = re.search(r"playlist: '(/get_file\.php\?stream=[a-zA-Z0-9=]+)'", self.html)
+ if link:
+ self.html = self.load("http://www.sockshare.com" + link.group(1))
+ link = re.search(r'media:content url="(http://.*?)"', self.html)
+ if link is None:
+ link = re.search(r'\"(http://media\\-b\\d+\\.sockshare\\.com/download/\\d+/.*?)\"', self.html)
+ else:
+ self.parseError('Unable to detect a download link')
+
+ link = link.group(1).replace("&amp;", "&")
+ if link.startswith("http://"):
+ return link
+ else:
+ return "http://www.sockshare.com" + link
+
+ def processName(self, name_old):
+ name = self.pyfile.name
+ if name <= name_old:
+ return
+ name_new = re.sub(r'\.[^.]+$', "", name_old) + name[len(name_old):]
+ filename = self.lastDownload
+ self.pyfile.name = name_new
+ rename(filename, filename.rsplit(name)[0] + name_new)
+ self.logInfo("%(name)s renamed to %(newname)s" % {"name": name, "newname": name_new})
+
+
+getInfo = create_getInfo(SockshareCom)
diff --git a/pyload/plugins/hoster/SoundcloudCom.py b/pyload/plugins/hoster/SoundcloudCom.py
new file mode 100644
index 000000000..afe8eaf62
--- /dev/null
+++ b/pyload/plugins/hoster/SoundcloudCom.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+import pycurl
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class SoundcloudCom(Hoster):
+ __name__ = "SoundcloudCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)'
+
+ __description__ = """SoundCloud.com hoster plugin"""
+ __author_name__ = "Peekayy"
+ __author_mail__ = "peekayy.dev@gmail.com"
+
+
+ def process(self, pyfile):
+ # default UserAgent of HTTPRequest fails for this hoster so we use this one
+ self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0')
+ page = self.load(pyfile.url)
+ m = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>[0-9]*)"', page)
+ songId = clientId = ""
+ if m:
+ songId = m.group("ID")
+ if len(songId) <= 0:
+ self.logError("Could not find song id")
+ self.offline()
+ else:
+ m = re.search(r'"clientID":"(?P<CID>.*?)"', page)
+ if m:
+ clientId = m.group("CID")
+
+ if len(clientId) <= 0:
+ clientId = "b45b1aa10f1ac2941910a7f0d10f8e28"
+
+ m = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page)
+ if m:
+ pyfile.name = m.group("TITLE") + ".mp3"
+ else:
+ pyfile.name = re.match(self.__pattern__, pyfile.url).group("SID") + ".mp3"
+
+ # url to retrieve the actual song url
+ page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId})
+ # getting streams
+ # for now we choose the first stream found in all cases
+ # it could be improved if relevant for this hoster
+ streams = [
+ (result.group("QUALITY"), result.group("URL"))
+ for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page)
+ ]
+ self.logDebug("Found Streams", streams)
+ self.logDebug("Downloading", streams[0][0], streams[0][1])
+ self.download(streams[0][1])
diff --git a/pyload/plugins/hoster/SpeedLoadOrg.py b/pyload/plugins/hoster/SpeedLoadOrg.py
new file mode 100644
index 000000000..74753b029
--- /dev/null
+++ b/pyload/plugins/hoster/SpeedLoadOrg.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class SpeedLoadOrg(DeadHoster):
+ __name__ = "SpeedLoadOrg"
+ __type__ = "hoster"
+ __version__ = "1.02"
+
+ __pattern__ = r'http://(?:www\.)?speedload\.org/(?P<ID>\w+)'
+
+ __description__ = """Speedload.org hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/pyload/plugins/hoster/SpeedfileCz.py b/pyload/plugins/hoster/SpeedfileCz.py
new file mode 100644
index 000000000..85df88d85
--- /dev/null
+++ b/pyload/plugins/hoster/SpeedfileCz.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class SpeedfileCz(DeadHoster):
+ __name__ = "SpeedFileCz"
+ __type__ = "hoster"
+ __version__ = "0.32"
+
+ __pattern__ = r'http://(?:www\.)?speedfile.cz/.*'
+
+ __description__ = """Speedfile.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(SpeedfileCz)
diff --git a/pyload/plugins/hoster/SpeedyshareCom.py b/pyload/plugins/hoster/SpeedyshareCom.py
new file mode 100644
index 000000000..ed6fc443f
--- /dev/null
+++ b/pyload/plugins/hoster/SpeedyshareCom.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+# Testlink:
+# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class SpeedyshareCom(SimpleHoster):
+ __name__ = "SpeedyshareCom"
+ __type__ = "hoster"
+ __pattern__ = r"https?://(www\.)?(speedyshare.com|speedy.sh)/.*"
+ __version__ = "0.01"
+ __description__ = """speedyshare.com hoster plugin"""
+ __author_name__ = ("zapp-brannigan")
+ __author_mail__ = ("fuerst.reinje@web.de")
+
+ FILE_NAME_PATTERN = r'class=downloadfilename>(?P<N>.*)</span></td>'
+ FILE_SIZE_PATTERN = r'class=sizetagtext>(?P<S>.*) (?P<U>[kKmM]?[iI]?[bB]?)</div>'
+ LINK_PATTERN = r'<a href=\'(.*)\'><img src=/gf/slowdownload.png alt=\'Slow Download\' border=0'
+ FILE_OFFLINE_PATTERN = r'class=downloadfilenamenotfound>.*</span>'
+ BASE_URL = 'www.speedyshare.com'
+
+ def setup(self):
+ self.multiDL = False
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+ try:
+ dl_link = re.search(self.LINK_PATTERN, self.html).group(1)
+ self.logDebug("Link: " + dl_link)
+ except:
+ self.parseError("Unable to find download link")
+ self.download(self.BASE_URL + dl_link, disposition=True)
+ check = self.checkDownload({"is_html": re.compile("html")})
+ if check == "is_html":
+ self.fail("The downloaded file is html, maybe the plugin is out of date")
+
+
+getInfo = create_getInfo(SpeedyshareCom)
diff --git a/pyload/plugins/hoster/StreamCz.py b/pyload/plugins/hoster/StreamCz.py
new file mode 100644
index 000000000..7b20049be
--- /dev/null
+++ b/pyload/plugins/hoster/StreamCz.py
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+
+
+def getInfo(urls):
+ result = []
+
+ for url in urls:
+
+ html = getURL(url)
+ if re.search(StreamCz.OFFLINE_PATTERN, html):
+ # File offline
+ result.append((url, 0, 1, url))
+ else:
+ result.append((url, 0, 2, url))
+ yield result
+
+
+class StreamCz(Hoster):
+ __name__ = "StreamCz"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'https?://(?:www\.)?stream\.cz/[^/]+/\d+.*'
+
+ __description__ = """Stream.cz hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<link rel="video_src" href="http://www.stream.cz/\w+/(\d+)-([^"]+)" />'
+ OFFLINE_PATTERN = r'<h1 class="commonTitle">Str.nku nebylo mo.n. nal.zt \(404\)</h1>'
+
+ CDN_PATTERN = r'<param name="flashvars" value="[^"]*&id=(?P<ID>\d+)(?:&cdnLQ=(?P<cdnLQ>\d*))?(?:&cdnHQ=(?P<cdnHQ>\d*))?(?:&cdnHD=(?P<cdnHD>\d*))?&'
+
+
+ def setup(self):
+ self.multiDL = True
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+
+ self.html = self.load(pyfile.url, decode=True)
+
+ if re.search(self.OFFLINE_PATTERN, self.html):
+ self.offline()
+
+ m = re.search(self.CDN_PATTERN, self.html)
+ if m is None:
+ self.fail("Parse error (CDN)")
+ cdn = m.groupdict()
+ self.logDebug(cdn)
+ for cdnkey in ("cdnHD", "cdnHQ", "cdnLQ"):
+ if cdnkey in cdn and cdn[cdnkey] > '':
+ cdnid = cdn[cdnkey]
+ break
+ else:
+ self.fail("Stream URL not found")
+
+ m = re.search(self.FILE_NAME_PATTERN, self.html)
+ if m is None:
+ self.fail("Parse error (NAME)")
+ pyfile.name = "%s-%s.%s.mp4" % (m.group(2), m.group(1), cdnkey[-2:])
+
+ download_url = "http://cdn-dispatcher.stream.cz/?id=" + cdnid
+ self.logInfo("STREAM (%s): %s" % (cdnkey[-2:], download_url))
+ self.download(download_url)
diff --git a/pyload/plugins/hoster/StreamcloudEu.py b/pyload/plugins/hoster/StreamcloudEu.py
new file mode 100644
index 000000000..0e36a047c
--- /dev/null
+++ b/pyload/plugins/hoster/StreamcloudEu.py
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import sleep
+
+from pyload.network.HTTPRequest import HTTPRequest
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class StreamcloudEu(XFileSharingPro):
+ __name__ = "StreamcloudEu"
+ __type__ = "hoster"
+ __version__ = "0.04"
+
+ __pattern__ = r'http://(?:www\.)?streamcloud\.eu/\S+'
+
+ __description__ = """Streamcloud.eu hoster plugin"""
+ __author_name__ = "seoester"
+ __author_mail__ = "seoester@googlemail.com"
+
+ HOSTER_NAME = "streamcloud.eu"
+
+ LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud.eu:?\d*/.*/video\.(mp4|flv))",'
+
+
+ def setup(self):
+ super(StreamcloudEu, self).setup()
+ self.multiDL = True
+
+ def getDownloadLink(self):
+ m = re.search(self.LINK_PATTERN, self.html, re.S)
+ if m:
+ return m.group(1)
+
+ for i in xrange(5):
+ self.logDebug("Getting download link: #%d" % i)
+ data = self.getPostParameters()
+ httpRequest = HTTPRequest(options=self.req.options)
+ httpRequest.cj = self.req.cj
+ sleep(10)
+ self.html = httpRequest.load(self.pyfile.url, post=data, referer=False, cookies=True, decode=True)
+ self.header = httpRequest.header
+
+ m = re.search("Location\s*:\s*(.*)", self.header, re.I)
+ if m:
+ break
+
+ m = re.search(self.LINK_PATTERN, self.html, re.S)
+ if m:
+ break
+
+ else:
+ if self.errmsg and 'captcha' in self.errmsg:
+ self.fail("No valid captcha code entered")
+ else:
+ self.fail("Download link not found")
+
+ return m.group(1)
+
+ def getPostParameters(self):
+ for i in xrange(3):
+ if not self.errmsg:
+ self.checkErrors()
+
+ if hasattr(self, "FORM_PATTERN"):
+ action, inputs = self.parseHtmlForm(self.FORM_PATTERN)
+ else:
+ action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
+
+ if not inputs:
+ action, inputs = self.parseHtmlForm('F1')
+ if not inputs:
+ if self.errmsg:
+ self.retry()
+ else:
+ self.parseError("Form not found")
+
+ self.logDebug(self.HOSTER_NAME, inputs)
+
+ if 'op' in inputs and inputs['op'] in ("download1", "download2", "download3"):
+ if "password" in inputs:
+ if self.passwords:
+ inputs['password'] = self.passwords.pop(0)
+ else:
+ self.fail("No or invalid passport")
+
+ if not self.premium:
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ wait_time = int(m.group(1)) + 1
+ self.setWait(wait_time, False)
+ else:
+ wait_time = 0
+
+ self.captcha = self.handleCaptcha(inputs)
+
+ if wait_time:
+ self.wait()
+
+ self.errmsg = None
+ self.logDebug("getPostParameters {0}".format(i))
+ return inputs
+
+ else:
+ inputs['referer'] = self.pyfile.url
+
+ if self.premium:
+ inputs['method_premium'] = "Premium Download"
+ if 'method_free' in inputs:
+ del inputs['method_free']
+ else:
+ inputs['method_free'] = "Free Download"
+ if 'method_premium' in inputs:
+ del inputs['method_premium']
+
+ self.html = self.load(self.pyfile.url, post=inputs, ref=False)
+ self.errmsg = None
+
+ else:
+ self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN'))
+
+
+getInfo = create_getInfo(StreamcloudEu)
diff --git a/pyload/plugins/hoster/TurbobitNet.py b/pyload/plugins/hoster/TurbobitNet.py
new file mode 100644
index 000000000..1fbdf9e87
--- /dev/null
+++ b/pyload/plugins/hoster/TurbobitNet.py
@@ -0,0 +1,167 @@
+# -*- coding: utf-8 -*-
+
+import random
+import re
+import time
+
+from Crypto.Cipher import ARC4
+from binascii import hexlify, unhexlify
+from pycurl import HTTPHEADER
+from urllib import quote
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+
+
+class TurbobitNet(SimpleHoster):
+ __name__ = "TurbobitNet"
+ __type__ = "hoster"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?(turbobit.net|unextfiles.com)/(?!download/folder/)(?:download/free/)?(?P<ID>\w+).*'
+
+ __description__ = """Turbobit.net plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r"<span class='file-icon1[^>]*>(?P<N>[^<]+)</span>\s*\((?P<S>[^\)]+)\)\s*</h1>" #: long filenames are shortened
+ FILE_NAME_PATTERN = r'<meta name="keywords" content="\s+(?P<N>[^,]+)' #: full name but missing on page2
+ OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found'
+
+ FILE_URL_REPLACEMENTS = [(r"http://(?:www\.)?(turbobit.net|unextfiles.com)/(?:download/free/)?(?P<ID>\w+).*",
+ "http://turbobit.net/\g<ID>.html")]
+ SH_COOKIES = [(".turbobit.net", "user_lang", "en")]
+
+ LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)'
+ LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span>'
+ CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"'
+ CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.*?)"'
+
+
+ def handleFree(self):
+ self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID']
+ self.html = self.load(self.url)
+
+ rtUpdate = self.getRtUpdate()
+
+ self.solveCaptcha()
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
+ self.url = self.getDownloadUrl(rtUpdate)
+
+ self.wait()
+ self.html = self.load(self.url)
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"])
+ self.downloadFile()
+
+ def solveCaptcha(self):
+ for _ in xrange(5):
+ m = re.search(self.LIMIT_WAIT_PATTERN, self.html)
+ if m:
+ wait_time = int(m.group(1))
+ self.wait(wait_time, wait_time > 60)
+ self.retry()
+
+ action, inputs = self.parseHtmlForm("action='#'")
+ if not inputs:
+ self.parseError("captcha form")
+ self.logDebug(inputs)
+
+ if inputs['captcha_type'] == 'recaptcha':
+ recaptcha = ReCaptcha(self)
+ m = re.search(self.CAPTCHA_KEY_PATTERN, self.html)
+ captcha_key = m.group(1) if m else '6LcTGLoSAAAAAHCWY9TTIrQfjUlxu6kZlTYP50_c'
+ inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(
+ captcha_key)
+ else:
+ m = re.search(self.CAPTCHA_SRC_PATTERN, self.html)
+ if m is None:
+ self.parseError('captcha')
+ captcha_url = m.group(1)
+ inputs['captcha_response'] = self.decryptCaptcha(captcha_url)
+
+ self.logDebug(inputs)
+ self.html = self.load(self.url, post=inputs)
+
+ if not "<div class='download-timer-header'>" in self.html:
+ self.invalidCaptcha()
+ else:
+ self.correctCaptcha()
+ break
+ else:
+ self.fail("Invalid captcha")
+
+ def getRtUpdate(self):
+ rtUpdate = self.getStorage("rtUpdate")
+ if not rtUpdate:
+ if self.getStorage("version") != self.__version__ or int(
+ self.getStorage("timestamp", 0)) + 86400000 < timestamp():
+ # that's right, we are even using jdownloader updates
+ rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js")
+ rtUpdate = self.decrypt(rtUpdate.splitlines()[1])
+ # but we still need to fix the syntax to work with other engines than rhino
+ rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{',
+ r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate)
+ rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate)
+
+ self.logDebug("rtUpdate")
+ self.setStorage("rtUpdate", rtUpdate)
+ self.setStorage("timestamp", timestamp())
+ self.setStorage("version", self.__version__)
+ else:
+ self.logError("Unable to download, wait for update...")
+ self.tempOffline()
+
+ return rtUpdate
+
+ def getDownloadUrl(self, rtUpdate):
+ self.req.http.lastURL = self.url
+
+ m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html)
+ url = "http://turbobit.net%s%s" % (m.groups() if m else (
+ '/files/timeout.js?ver=', ''.join(random.choice('0123456789ABCDEF') for _ in xrange(32))))
+ fun = self.load(url)
+
+ self.setWait(65, False)
+
+ for b in [1, 3]:
+ self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % (
+ self.file_info['ID'], b, quote(fun), rtUpdate)
+
+ try:
+ out = self.js.eval(self.jscode)
+ self.logDebug("URL", self.js.engine, out)
+ if out.startswith('/download/'):
+ return "http://turbobit.net%s" % out.strip()
+ except Exception, e:
+ self.logError(e)
+ else:
+ if self.retries >= 2:
+ # retry with updated js
+ self.delStorage("rtUpdate")
+ self.retry()
+
+ def decrypt(self, data):
+ cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0'))
+ return unhexlify(cipher.encrypt(unhexlify(data)))
+
+ def getLocalTimeString(self):
+ lt = time.localtime()
+ tz = time.altzone if lt.tm_isdst else time.timezone
+ return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600)
+
+ def handlePremium(self):
+ self.logDebug("Premium download as user %s" % self.user)
+ self.html = self.load(self.pyfile.url) # Useless in 0.5
+ self.downloadFile()
+
+ def downloadFile(self):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("download link")
+ self.url = "http://turbobit.net" + m.group('url')
+ self.logDebug(self.url)
+ self.download(self.url)
+
+
+getInfo = create_getInfo(TurbobitNet)
diff --git a/pyload/plugins/hoster/TurbouploadCom.py b/pyload/plugins/hoster/TurbouploadCom.py
new file mode 100644
index 000000000..eb5978145
--- /dev/null
+++ b/pyload/plugins/hoster/TurbouploadCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class TurbouploadCom(DeadHoster):
+ __name__ = "TurbouploadCom"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?turboupload.com/(\w+).*'
+
+ __description__ = """Turboupload.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+getInfo = create_getInfo(TurbouploadCom)
diff --git a/pyload/plugins/hoster/TusfilesNet.py b/pyload/plugins/hoster/TusfilesNet.py
new file mode 100644
index 000000000..0e01ec805
--- /dev/null
+++ b/pyload/plugins/hoster/TusfilesNet.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class TusfilesNet(XFileSharingPro):
+ __name__ = "TusfilesNet"
+ __type__ = "hoster"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?tusfiles\.net/(?P<ID>\w+)'
+
+ __description__ = """Tusfiles.net hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ HOSTER_NAME = "tusfiles.net"
+
+ FILE_INFO_PATTERN = r'\](?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)\['
+ OFFLINE_PATTERN = r'>File Not Found|<Title>TusFiles - Fast Sharing Files!'
+
+ SH_COOKIES = [(".tusfiles.net", "lang", "english")]
+
+
+ def setup(self):
+ self.multiDL = False
+ self.chunkLimit = -1
+ self.resumeDownload = True
+
+
+getInfo = create_getInfo(TusfilesNet)
diff --git a/pyload/plugins/hoster/TwoSharedCom.py b/pyload/plugins/hoster/TwoSharedCom.py
new file mode 100644
index 000000000..108d31c6f
--- /dev/null
+++ b/pyload/plugins/hoster/TwoSharedCom.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class TwoSharedCom(SimpleHoster):
+ __name__ = "TwoSharedCom"
+ __type__ = "hoster"
+ __version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?2shared.com/(account/)?(download|get|file|document|photo|video|audio)/.*'
+
+ __description__ = """2Shared.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<h1>(?P<N>.*)</h1>'
+ FILE_SIZE_PATTERN = r'<span class="dtitle">File size:</span>\s*(?P<S>[0-9,.]+) (?P<U>[kKMG])i?B'
+ OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted\.'
+
+ LINK_PATTERN = r"window.location ='([^']+)';"
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def handleFree(self):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('Download link')
+ link = m.group(1)
+ self.logDebug("Download URL %s" % link)
+
+ self.download(link)
+
+
+getInfo = create_getInfo(TwoSharedCom)
diff --git a/pyload/plugins/hoster/UlozTo.py b/pyload/plugins/hoster/UlozTo.py
new file mode 100644
index 000000000..2f1fdc595
--- /dev/null
+++ b/pyload/plugins/hoster/UlozTo.py
@@ -0,0 +1,158 @@
+# -*- coding: utf-8 -*-
+
+import re
+import time
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+def convertDecimalPrefix(m):
+ # decimal prefixes used in filesize and traffic
+ return ("%%.%df" % {'k': 3, 'M': 6, 'G': 9}[m.group(2)] % float(m.group(1))).replace('.', '')
+
+
+class UlozTo(SimpleHoster):
+ __name__ = "UlozTo"
+ __type__ = "hoster"
+ __version__ = "0.98"
+
+ __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\w+/[^/?]*)'
+
+ __description__ = """Uloz.to hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>'
+ FILE_NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz.to</title>'
+ FILE_SIZE_PATTERN = r'<span id="fileSize">.*?(?P<S>[0-9.]+\s[kMG]?B)</span>'
+ OFFLINE_PATTERN = r'<title>404 - Page not found</title>|<h1 class="h1">File (has been deleted|was banned)</h1>'
+
+ FILE_SIZE_REPLACEMENTS = [('([0-9.]+)\s([kMG])B', convertDecimalPrefix)]
+ FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "www.ulozto.net")]
+
+ ADULT_PATTERN = r'<form action="(?P<link>[^\"]*)" method="post" id="frm-askAgeForm">'
+ PASSWD_PATTERN = r'<div class="passwordProtectedFile">'
+ VIPLINK_PATTERN = r'<a href="[^"]*\?disclaimer=1" class="linkVip">'
+ FREE_URL_PATTERN = r'<div class="freeDownloadForm"><form action="([^"]+)"'
+ PREMIUM_URL_PATTERN = r'<div class="downloadForm"><form action="([^"]+)"'
+ TOKEN_PATTERN = r'<input type="hidden" name="_token_" id="[^\"]*" value="(?P<token>[^\"]*)" />'
+
+
+ def setup(self):
+ self.multiDL = self.premium
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ pyfile.url = re.sub(r"(?<=http://)([^/]+)", "www.ulozto.net", pyfile.url)
+ self.html = self.load(pyfile.url, decode=True, cookies=True)
+
+ if re.search(self.ADULT_PATTERN, self.html):
+ self.logInfo("Adult content confirmation needed. Proceeding..")
+
+ m = re.search(self.TOKEN_PATTERN, self.html)
+ if m is None:
+ self.parseError('TOKEN')
+ token = m.group(1)
+
+ self.html = self.load(pyfile.url, get={"do": "askAgeForm-submit"},
+ post={"agree": "Confirm", "_token_": token}, cookies=True)
+
+ passwords = self.getPassword().splitlines()
+ while self.PASSWD_PATTERN in self.html:
+ if passwords:
+ password = passwords.pop(0)
+ self.logInfo("Password protected link, trying " + password)
+ self.html = self.load(pyfile.url, get={"do": "passwordProtectedForm-submit"},
+ post={"password": password, "password_send": 'Send'}, cookies=True)
+ else:
+ self.fail("No or incorrect password")
+
+ if re.search(self.VIPLINK_PATTERN, self.html):
+ self.html = self.load(pyfile.url, get={"disclaimer": "1"})
+
+ self.file_info = self.getFileInfo()
+
+ if self.premium and self.checkTrafficLeft():
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ self.doCheckDownload()
+
+ def handleFree(self):
+ action, inputs = self.parseHtmlForm('id="frm-downloadDialog-freeDownloadForm"')
+ if not action or not inputs:
+ self.parseError("free download form")
+
+ self.logDebug('inputs.keys() = ' + str(inputs.keys()))
+ # get and decrypt captcha
+ if all(key in inputs for key in ("captcha_value", "captcha_id", "captcha_key")):
+ # Old version - last seen 9.12.2013
+ self.logDebug('Using "old" version')
+
+ captcha_value = self.decryptCaptcha("http://img.uloz.to/captcha/%s.png" % inputs['captcha_id'])
+ self.logDebug('CAPTCHA ID: ' + inputs['captcha_id'] + ", CAPTCHA VALUE: " + captcha_value)
+
+ inputs.update({'captcha_id': inputs['captcha_id'], 'captcha_key': inputs['captcha_key'], 'captcha_value': captcha_value})
+
+ elif all(key in inputs for key in ("captcha_value", "timestamp", "salt", "hash")):
+ # New version - better to get new parameters (like captcha reload) because of image url - since 6.12.2013
+ self.logDebug('Using "new" version')
+
+ xapca = self.load("http://www.ulozto.net/reloadXapca.php", get={"rnd": str(int(time.time()))})
+ self.logDebug('xapca = ' + str(xapca))
+
+ data = json_loads(xapca)
+ captcha_value = self.decryptCaptcha(str(data['image']))
+ self.logDebug("CAPTCHA HASH: " + data['hash'] + ", CAPTCHA SALT: " + str(data['salt']) + ", CAPTCHA VALUE: " + captcha_value)
+
+ inputs.update({'timestamp': data['timestamp'], 'salt': data['salt'], 'hash': data['hash'], 'captcha_value': captcha_value})
+ else:
+ self.parseError("CAPTCHA form changed")
+
+ self.multiDL = True
+ self.download("http://www.ulozto.net" + action, post=inputs, cookies=True, disposition=True)
+
+ def handlePremium(self):
+ self.download(self.pyfile.url + "?do=directDownload", disposition=True)
+ #parsed_url = self.findDownloadURL(premium=True)
+ #self.download(parsed_url, post={"download": "Download"})
+
+ def findDownloadURL(self, premium=False):
+ msg = "%s link" % ("Premium" if premium else "Free")
+ m = re.search(self.PREMIUM_URL_PATTERN if premium else self.FREE_URL_PATTERN, self.html)
+ if m is None:
+ self.parseError(msg)
+ parsed_url = "http://www.ulozto.net" + m.group(1)
+ self.logDebug("%s: %s" % (msg, parsed_url))
+ return parsed_url
+
+ def doCheckDownload(self):
+ check = self.checkDownload({
+ "wrong_captcha": re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'),
+ "offline": re.compile(self.OFFLINE_PATTERN),
+ "passwd": self.PASSWD_PATTERN,
+ "server_error": 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', # paralell dl, server overload etc.
+ "not_found": "<title>UloÅŸ.to</title>"
+ })
+
+ if check == "wrong_captcha":
+ #self.delStorage("captcha_id")
+ #self.delStorage("captcha_text")
+ self.invalidCaptcha()
+ self.retry(reason="Wrong captcha code")
+ elif check == "offline":
+ self.offline()
+ elif check == "passwd":
+ self.fail("Wrong password")
+ elif check == "server_error":
+ self.logError("Server error, try downloading later")
+ self.multiDL = False
+ self.wait(1 * 60 * 60, True)
+ self.retry()
+ elif check == "not_found":
+ self.fail("Server error - file not downloadable")
+
+
+getInfo = create_getInfo(UlozTo)
diff --git a/pyload/plugins/hoster/UloziskoSk.py b/pyload/plugins/hoster/UloziskoSk.py
new file mode 100644
index 000000000..f78a6e29a
--- /dev/null
+++ b/pyload/plugins/hoster/UloziskoSk.py
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UloziskoSk(SimpleHoster):
+ __name__ = "UloziskoSk"
+ __type__ = "hoster"
+ __version__ = "0.23"
+
+ __pattern__ = r'http://(?:www\.)?ulozisko.sk/.*'
+
+ __description__ = """Ulozisko.sk hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'<div class="down1">(?P<N>[^<]+)</div>'
+ FILE_SIZE_PATTERN = ur'Veğkosť súboru: <strong>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong><br />'
+ OFFLINE_PATTERN = ur'<span class = "red">ZadanÜ súbor neexistuje z jedného z nasledujúcich dÎvodov:</span>'
+
+ LINK_PATTERN = r'<form name = "formular" action = "([^"]+)" method = "post">'
+ ID_PATTERN = r'<input type = "hidden" name = "id" value = "([^"]+)" />'
+ CAPTCHA_PATTERN = r'<img src="(/obrazky/obrazky.php\?fid=[^"]+)" alt="" />'
+ IMG_PATTERN = ur'<strong>PRE ZVÄČŠENIE KLIKNITE NA OBRÁZOK</strong><br /><a href = "([^"]+)">'
+
+
+ def process(self, pyfile):
+ self.html = self.load(pyfile.url, decode=True)
+ self.getFileInfo()
+
+ m = re.search(self.IMG_PATTERN, self.html)
+ if m:
+ url = "http://ulozisko.sk" + m.group(1)
+ self.download(url)
+ else:
+ self.handleFree()
+
+ def handleFree(self):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('URL')
+ parsed_url = 'http://www.ulozisko.sk' + m.group(1)
+
+ m = re.search(self.ID_PATTERN, self.html)
+ if m is None:
+ self.parseError('ID')
+ id = m.group(1)
+
+ self.logDebug('URL:' + parsed_url + ' ID:' + id)
+
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is None:
+ self.parseError('CAPTCHA')
+ captcha_url = 'http://www.ulozisko.sk' + m.group(1)
+
+ captcha = self.decryptCaptcha(captcha_url, cookies=True)
+
+ self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + captcha)
+
+ self.download(parsed_url, post={
+ "antispam": captcha,
+ "id": id,
+ "name": self.pyfile.name,
+ "but": "++++STIAHNI+S%DABOR++++"
+ })
+
+
+getInfo = create_getInfo(UloziskoSk)
diff --git a/pyload/plugins/hoster/UnibytesCom.py b/pyload/plugins/hoster/UnibytesCom.py
new file mode 100644
index 000000000..1541265d9
--- /dev/null
+++ b/pyload/plugins/hoster/UnibytesCom.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UnibytesCom(SimpleHoster):
+ __name__ = "UnibytesCom"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?unibytes\.com/[a-zA-Z0-9-._ ]{11}B'
+
+ __description__ = """UniBytes.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_INFO_PATTERN = r'<span[^>]*?id="fileName"[^>]*>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)'
+
+ HOSTER_NAME = "unibytes.com"
+ WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec'
+ LINK_PATTERN = r'<a href="([^"]+)">Download</a>'
+
+
+ def handleFree(self):
+ domain = "http://www." + self.HOSTER_NAME
+ action, post_data = self.parseHtmlForm('id="startForm"')
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+
+ for _ in xrange(8):
+ self.logDebug(action, post_data)
+ self.html = self.load(domain + action, post=post_data)
+
+ m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I)
+ if m:
+ url = m.group(1)
+ break
+
+ if '>Somebody else is already downloading using your IP-address<' in self.html:
+ self.wait(10 * 60, True)
+ self.retry()
+
+ if post_data['step'] == 'last':
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m:
+ url = m.group(1)
+ self.correctCaptcha()
+ break
+ else:
+ self.invalidCaptcha()
+
+ last_step = post_data['step']
+ action, post_data = self.parseHtmlForm('id="stepForm"')
+
+ if last_step == 'timer':
+ m = re.search(self.WAIT_PATTERN, self.html)
+ self.wait(int(m.group(1)) if m else 60, False)
+ elif last_step in ("captcha", "last"):
+ post_data['captcha'] = self.decryptCaptcha(domain + '/captcha.jpg')
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.logDebug('Download link: ' + url)
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+ self.download(url)
+
+
+getInfo = create_getInfo(UnibytesCom)
diff --git a/pyload/plugins/hoster/UnrestrictLi.py b/pyload/plugins/hoster/UnrestrictLi.py
new file mode 100644
index 000000000..2cad6616f
--- /dev/null
+++ b/pyload/plugins/hoster/UnrestrictLi.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from datetime import datetime, timedelta
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+def secondsToMidnight(gmt=0):
+ now = datetime.utcnow() + timedelta(hours=gmt)
+ if now.hour is 0 and now.minute < 10:
+ midnight = now
+ else:
+ midnight = now + timedelta(days=1)
+ midnight = midnight.replace(hour=0, minute=10, second=0, microsecond=0)
+ return int((midnight - now).total_seconds())
+
+
+class UnrestrictLi(Hoster):
+ __name__ = "UnrestrictLi"
+ __type__ = "hoster"
+ __version__ = "0.12"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?(unrestrict|unr)\.li'
+
+ __description__ = """Unrestrict.li hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def setup(self):
+ self.chunkLimit = 16
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ elif not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li")
+ self.fail("No Unrestrict.li account provided")
+ else:
+ self.logDebug("Old URL: %s" % pyfile.url)
+ for _ in xrange(5):
+ page = self.req.load('https://unrestrict.li/unrestrict.php',
+ post={'link': pyfile.url, 'domain': 'long'})
+ self.logDebug("JSON data: " + page)
+ if page != '':
+ break
+ else:
+ self.logInfo("Unable to get API data, waiting 1 minute and retry")
+ self.retry(5, 60, "Unable to get API data")
+
+ if 'Expired session' in page or ("You are not allowed to "
+ "download from this host" in page and self.premium):
+ self.account.relogin(self.user)
+ self.retry()
+ elif "File offline" in page:
+ self.offline()
+ elif "You are not allowed to download from this host" in page:
+ self.fail("You are not allowed to download from this host")
+ elif "You have reached your daily limit for this host" in page:
+ self.logWarning("Reached daily limit for this host")
+ self.retry(5, secondsToMidnight(gmt=2), "Daily limit for this host reached")
+ elif "ERROR_HOSTER_TEMPORARILY_UNAVAILABLE" in page:
+ self.logInfo("Hoster temporarily unavailable, waiting 1 minute and retry")
+ self.retry(5, 60, "Hoster is temporarily unavailable")
+ page = json_loads(page)
+ new_url = page.keys()[0]
+ self.api_data = page[new_url]
+
+ if new_url != pyfile.url:
+ self.logDebug("New URL: " + new_url)
+
+ if hasattr(self, 'api_data'):
+ self.setNameSize()
+
+ self.download(new_url, disposition=True)
+
+ if self.getConfig("history"):
+ self.load("https://unrestrict.li/history/&delete=all")
+ self.logInfo("Download history deleted")
+
+ def setNameSize(self):
+ if 'name' in self.api_data:
+ self.pyfile.name = self.api_data['name']
+ if 'size' in self.api_data:
+ self.pyfile.size = self.api_data['size']
diff --git a/pyload/plugins/hoster/UploadStationCom.py b/pyload/plugins/hoster/UploadStationCom.py
new file mode 100644
index 000000000..4671b2dc5
--- /dev/null
+++ b/pyload/plugins/hoster/UploadStationCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class UploadStationCom(DeadHoster):
+ __name__ = "UploadStationCom"
+ __type__ = "hoster"
+ __version__ = "0.52"
+
+ __pattern__ = r'http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)'
+
+ __description__ = """UploadStation.com hoster plugin"""
+ __author_name__ = ("fragonib", "zoidberg")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz")
+
+
+getInfo = create_getInfo(UploadStationCom)
diff --git a/pyload/plugins/hoster/UploadedTo.py b/pyload/plugins/hoster/UploadedTo.py
new file mode 100644
index 000000000..db620eea6
--- /dev/null
+++ b/pyload/plugins/hoster/UploadedTo.py
@@ -0,0 +1,240 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://ul.to/044yug9o
+# http://ul.to/gzfhd0xs
+
+import re
+
+from time import sleep
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.Plugin import chunks
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.utils import html_unescape, parseFileSize
+
+
+key = "bGhGMkllZXByd2VEZnU5Y2NXbHhYVlZ5cEE1bkEzRUw=".decode('base64')
+
+
+def getID(url):
+ """ returns id from file url"""
+ m = re.match(UploadedTo.__pattern__, url)
+ return m.group('ID')
+
+
+def getAPIData(urls):
+ post = {"apikey": key}
+
+ idMap = {}
+
+ for i, url in enumerate(urls):
+ id = getID(url)
+ post['id_%s' % i] = id
+ idMap[id] = url
+
+ for _ in xrange(5):
+ api = unicode(getURL("http://uploaded.net/api/filemultiple", post=post, decode=False), 'iso-8859-1')
+ if api != "can't find request":
+ break
+ else:
+ sleep(3)
+
+ result = {}
+
+ if api:
+ for line in api.splitlines():
+ data = line.split(",", 4)
+ if data[1] in idMap:
+ result[data[1]] = (data[0], data[2], data[4], data[3], idMap[data[1]])
+
+ return result
+
+
+def parseFileInfo(self, url='', html=''):
+ if not html and hasattr(self, "html"):
+ html = self.html
+
+ name = url
+ size = 0
+ fileid = None
+
+ if re.search(self.OFFLINE_PATTERN, html):
+ # File offline
+ status = 1
+ else:
+ m = re.search(self.FILE_INFO_PATTERN, html)
+ if m:
+ name, fileid = html_unescape(m.group('N')), m.group('ID')
+ size = parseFileSize(m.group('S'))
+ status = 2
+ else:
+ status = 3
+
+ return name, size, status, fileid
+
+
+def getInfo(urls):
+ for chunk in chunks(urls, 80):
+ result = []
+
+ api = getAPIData(chunk)
+
+ for data in api.itervalues():
+ if data[0] == "online":
+ result.append((html_unescape(data[2]), data[1], 2, data[4]))
+
+ elif data[0] == "offline":
+ result.append((data[4], 0, 1, data[4]))
+
+ yield result
+
+
+class UploadedTo(Hoster):
+ __name__ = "UploadedTo"
+ __type__ = "hoster"
+ __version__ = "0.73"
+
+ __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
+
+ __description__ = """Uploaded.net hoster plugin"""
+ __author_name__ = ("spoob", "mkaay", "zoidberg", "netpok", "stickell")
+ __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz",
+ "netpok@gmail.com", "l.stickell@yahoo.it")
+
+ FILE_INFO_PATTERN = r'<a href="file/(?P<ID>\w+)" id="filename">(?P<N>[^<]+)</a> &nbsp;\s*<small[^>]*>(?P<S>[^<]+)</small>'
+ OFFLINE_PATTERN = r'<small class="cL">Error: 404</small>'
+ DL_LIMIT_PATTERN = r'You have reached the max. number of possible free downloads for this hour'
+
+
+ def setup(self):
+ self.multiDL = self.resumeDownload = self.premium
+ self.chunkLimit = 1 # critical problems with more chunks
+
+ self.fileID = getID(self.pyfile.url)
+ self.pyfile.url = "http://uploaded.net/file/%s" % self.fileID
+
+ def process(self, pyfile):
+ self.load("http://uploaded.net/language/en", just_header=True)
+
+ api = getAPIData([pyfile.url])
+
+ # TODO: fallback to parse from site, because api sometimes delivers wrong status codes
+
+ if not api:
+ self.logWarning("No response for API call")
+
+ self.html = unicode(self.load(pyfile.url, decode=False), 'iso-8859-1')
+ name, size, status, self.fileID = parseFileInfo(self)
+ self.logDebug(name, size, status, self.fileID)
+ if status == 1:
+ self.offline()
+ elif status == 2:
+ pyfile.name, pyfile.size = name, size
+ else:
+ self.fail('Parse error - file info')
+ elif api == 'Access denied':
+ self.fail(_("API key invalid"))
+
+ else:
+ if self.fileID not in api:
+ self.offline()
+
+ self.data = api[self.fileID]
+ if self.data[0] != "online":
+ self.offline()
+
+ pyfile.name = html_unescape(self.data[2])
+
+ # pyfile.name = self.get_file_name()
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def handlePremium(self):
+ info = self.account.getAccountInfo(self.user, True)
+ self.logDebug("%(name)s: Use Premium Account (%(left)sGB left)" % {"name": self.__name__,
+ "left": info['trafficleft'] / 1024 / 1024})
+ if int(self.data[1]) / 1024 > info['trafficleft']:
+ self.logInfo(_("%s: Not enough traffic left" % self.__name__))
+ self.account.empty(self.user)
+ self.resetAccount()
+ self.fail(_("Traffic exceeded"))
+
+ header = self.load("http://uploaded.net/file/%s" % self.fileID, just_header=True)
+ if "location" in header:
+ #Direct download
+ print "Direct Download: " + header['location']
+ self.download(header['location'])
+ else:
+ #Indirect download
+ self.html = self.load("http://uploaded.net/file/%s" % self.fileID)
+ m = re.search(r'<div class="tfree".*\s*<form method="post" action="(.*?)"', self.html)
+ if m is None:
+ self.fail("Download URL not m. Try to enable direct downloads.")
+ url = m.group(1)
+ print "Premium URL: " + url
+ self.download(url, post={})
+
+ def handleFree(self):
+ self.html = self.load(self.pyfile.url, decode=True)
+
+ if 'var free_enabled = false;' in self.html:
+ self.logError("Free-download capacities exhausted.")
+ self.retry(max_tries=24, wait_time=5 * 60)
+
+ m = re.search(r"Current waiting period: <span>(\d+)</span> seconds", self.html)
+ if m is None:
+ self.fail("File not downloadable for free users")
+ self.setWait(int(m.group(1)))
+
+ js = self.load("http://uploaded.net/js/download.js", decode=True)
+
+ challengeId = re.search(r'Recaptcha\.create\("([^"]+)', js)
+
+ url = "http://uploaded.net/io/ticket/captcha/%s" % self.fileID
+ downloadURL = ""
+
+ for _ in xrange(5):
+ re_captcha = ReCaptcha(self)
+ challenge, result = re_captcha.challenge(challengeId.group(1))
+ options = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": result}
+ self.wait()
+
+ result = self.load(url, post=options)
+ self.logDebug("result: %s" % result)
+
+ if "limit-size" in result:
+ self.fail("File too big for free download")
+ elif "limit-slot" in result: # Temporary restriction so just wait a bit
+ self.setWait(30 * 60, True)
+ self.wait()
+ self.retry()
+ elif "limit-parallel" in result:
+ self.fail("Cannot download in parallel")
+ elif self.DL_LIMIT_PATTERN in result: # limit-dl
+ self.setWait(3 * 60 * 60, True)
+ self.wait()
+ self.retry()
+ elif '"err":"captcha"' in result:
+ self.logError("ul.net captcha is disabled")
+ self.invalidCaptcha()
+ elif "type:'download'" in result:
+ self.correctCaptcha()
+ downloadURL = re.search("url:'([^']+)", result).group(1)
+ break
+ else:
+ self.fail("Unknown error '%s'" % result)
+
+ if not downloadURL:
+ self.fail("No Download url retrieved/all captcha attempts failed")
+
+ self.download(downloadURL, disposition=True)
+ check = self.checkDownload({"limit-dl": self.DL_LIMIT_PATTERN})
+ if check == "limit-dl":
+ self.setWait(3 * 60 * 60, True)
+ self.wait()
+ self.retry()
diff --git a/pyload/plugins/hoster/UploadheroCom.py b/pyload/plugins/hoster/UploadheroCom.py
new file mode 100644
index 000000000..f1f893c30
--- /dev/null
+++ b/pyload/plugins/hoster/UploadheroCom.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://uploadhero.co/dl/wQBRAVSM
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UploadheroCom(SimpleHoster):
+ __name__ = "UploadheroCom"
+ __type__ = "hoster"
+ __version__ = "0.15"
+
+ __pattern__ = r'http://(?:www\.)?uploadhero\.com?/dl/\w+'
+
+ __description__ = """UploadHero.co plugin"""
+ __author_name__ = ("mcmyst", "zoidberg")
+ __author_mail__ = ("mcmyst@hotmail.fr", "zoidberg@mujmail.cz")
+
+ FILE_NAME_PATTERN = r'<div class="nom_de_fichier">(?P<N>.*?)</div>'
+ FILE_SIZE_PATTERN = r'Taille du fichier : </span><strong>(?P<S>.*?)</strong>'
+ OFFLINE_PATTERN = r'<p class="titre_dl_2">|<div class="raison"><strong>Le lien du fichier ci-dessus n\'existe plus.'
+
+ SH_COOKIES = [(".uploadhero.co", "lang", "en")]
+
+ IP_BLOCKED_PATTERN = r'href="(/lightbox_block_download.php\?min=.*?)"'
+ IP_WAIT_PATTERN = r'<span id="minutes">(\d+)</span>.*\s*<span id="seconds">(\d+)</span>'
+
+ CAPTCHA_PATTERN = r'"(/captchadl\.php\?[a-z0-9]+)"'
+ FREE_URL_PATTERN = r'var magicomfg = \'<a href="(http://[^<>"]*?)"|"(http://storage\d+\.uploadhero\.co/\?d=[A-Za-z0-9]+/[^<>"/]+)"'
+ PREMIUM_URL_PATTERN = r'<a href="([^"]+)" id="downloadnow"'
+
+
+ def handleFree(self):
+ self.checkErrors()
+
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is None:
+ self.parseError("Captcha URL")
+ captcha_url = "http://uploadhero.co" + m.group(1)
+
+ for _ in xrange(5):
+ captcha = self.decryptCaptcha(captcha_url)
+ self.html = self.load(self.pyfile.url, get={"code": captcha})
+ m = re.search(self.FREE_URL_PATTERN, self.html)
+ if m:
+ self.correctCaptcha()
+ download_url = m.group(1) or m.group(2)
+ break
+ else:
+ self.invalidCaptcha()
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.download(download_url)
+
+ def handlePremium(self):
+ self.logDebug("%s: Use Premium Account" % self.__name__)
+ self.html = self.load(self.pyfile.url)
+ link = re.search(self.PREMIUM_URL_PATTERN, self.html).group(1)
+ self.logDebug("Downloading link : '%s'" % link)
+ self.download(link)
+
+ def checkErrors(self):
+ m = re.search(self.IP_BLOCKED_PATTERN, self.html)
+ if m:
+ self.html = self.load("http://uploadhero.co%s" % m.group(1))
+
+ m = re.search(self.IP_WAIT_PATTERN, self.html)
+ wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60
+ self.wait(wait_time, True)
+ self.retry()
+
+
+getInfo = create_getInfo(UploadheroCom)
diff --git a/pyload/plugins/hoster/UploadingCom.py b/pyload/plugins/hoster/UploadingCom.py
new file mode 100644
index 000000000..a7c328eec
--- /dev/null
+++ b/pyload/plugins/hoster/UploadingCom.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import HTTPHEADER
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+
+
+class UploadingCom(SimpleHoster):
+ __name__ = "UploadingCom"
+ __type__ = "hoster"
+ __version__ = "0.36"
+
+ __pattern__ = r'http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)'
+
+ __description__ = """Uploading.com hoster plugin"""
+ __author_name__ = ("jeix", "mkaay", "zoidberg")
+ __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
+
+ FILE_NAME_PATTERN = r'id="file_title">(?P<N>.+)</'
+ FILE_SIZE_PATTERN = r'size tip_container">(?P<S>[\d.]+) (?P<U>\w+)<'
+ OFFLINE_PATTERN = r'(Page|file) not found'
+
+
+ def process(self, pyfile):
+ # set lang to english
+ self.req.cj.setCookie(".uploading.com", "lang", "1")
+ self.req.cj.setCookie(".uploading.com", "language", "1")
+ self.req.cj.setCookie(".uploading.com", "setlang", "en")
+ self.req.cj.setCookie(".uploading.com", "_lang", "en")
+
+ if not "/get/" in pyfile.url:
+ pyfile.url = pyfile.url.replace("/files", "/files/get")
+
+ self.html = self.load(pyfile.url, decode=True)
+ self.file_info = self.getFileInfo()
+
+ if self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def handlePremium(self):
+ postData = {'action': 'get_link',
+ 'code': self.file_info['ID'],
+ 'pass': 'undefined'}
+
+ self.html = self.load('http://uploading.com/files/get/?JsHttpRequest=%d-xml' % timestamp(), post=postData)
+ url = re.search(r'"link"\s*:\s*"(.*?)"', self.html)
+ if url:
+ url = url.group(1).replace("\\/", "/")
+ self.download(url)
+
+ raise Exception("Plugin defect.")
+
+ def handleFree(self):
+ m = re.search('<h2>((Daily )?Download Limit)</h2>', self.html)
+ if m:
+ self.pyfile.error = m.group(1)
+ self.logWarning(self.pyfile.error)
+ self.retry(max_tries=6, wait_time=6 * 60 * 60 if m.group(2) else 15 * 60, reason=self.pyfile.error)
+
+ ajax_url = "http://uploading.com/files/get/?ajax"
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
+ self.req.http.lastURL = self.pyfile.url
+
+ response = json_loads(self.load(ajax_url, post={'action': 'second_page', 'code': self.file_info['ID']}))
+ if 'answer' in response and 'wait_time' in response['answer']:
+ wait_time = int(response['answer']['wait_time'])
+ self.logInfo("%s: Waiting %d seconds." % (self.__name__, wait_time))
+ self.wait(wait_time)
+ else:
+ self.parseError("AJAX/WAIT")
+
+ response = json_loads(
+ self.load(ajax_url, post={'action': 'get_link', 'code': self.file_info['ID'], 'pass': 'false'}))
+ if 'answer' in response and 'link' in response['answer']:
+ url = response['answer']['link']
+ else:
+ self.parseError("AJAX/URL")
+
+ self.html = self.load(url)
+ m = re.search(r'<form id="file_form" action="(.*?)"', self.html)
+ if m:
+ url = m.group(1)
+ else:
+ self.parseError("URL")
+
+ self.download(url)
+
+ check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")})
+ if check == "html":
+ self.logWarning("Redirected to a HTML page, wait 10 minutes and retry")
+ self.wait(10 * 60, True)
+
+
+getInfo = create_getInfo(UploadingCom)
diff --git a/pyload/plugins/hoster/UpstoreNet.py b/pyload/plugins/hoster/UpstoreNet.py
new file mode 100644
index 000000000..bd084612c
--- /dev/null
+++ b/pyload/plugins/hoster/UpstoreNet.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.CaptchaService import ReCaptcha
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UpstoreNet(SimpleHoster):
+ __name__ = "UpstoreNet"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?upstore\.net/'
+
+ __description__ = """Upstore.Net File Download Hoster"""
+ __author_name__ = "igel"
+ __author_mail__ = "igelkun@myopera.com"
+
+ FILE_INFO_PATTERN = r'<div class="comment">.*?</div>\s*\n<h2 style="margin:0">(?P<N>.*?)</h2>\s*\n<div class="comment">\s*\n\s*(?P<S>[\d.]+) (?P<U>\w+)'
+ OFFLINE_PATTERN = r'<span class="error">File not found</span>'
+
+ WAIT_PATTERN = r'var sec = (\d+)'
+ CHASH_PATTERN = r'<input type="hidden" name="hash" value="([^"]*)">'
+ LINK_PATTERN = r'<a href="(https?://.*?)" target="_blank"><b>'
+
+
+ def handleFree(self):
+ # STAGE 1: get link to continue
+ m = re.search(self.CHASH_PATTERN, self.html)
+ if m is None:
+ self.parseError("could not detect hash")
+ chash = m.group(1)
+ self.logDebug("read hash " + chash)
+ # continue to stage2
+ post_data = {'hash': chash, 'free': 'Slow download'}
+ self.html = self.load(self.pyfile.url, post=post_data, decode=True)
+
+ # STAGE 2: solv captcha and wait
+ # first get the infos we need: recaptcha key and wait time
+ recaptcha = ReCaptcha(self)
+ if not recaptcha.detect_key(self.html):
+ self.parseError("could not find recaptcha pattern")
+ self.logDebug("using captcha key " + recaptcha.recaptcha_key)
+ # try the captcha 5 times
+ for i in xrange(5):
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m is None:
+ self.parseError("could not find wait pattern")
+ wait_time = m.group(1)
+
+ # then, do the waiting
+ self.wait(wait_time)
+
+ # then, handle the captcha
+ challenge, code = recaptcha.challenge()
+ post_data['recaptcha_challenge_field'] = challenge
+ post_data['recaptcha_response_field'] = code
+
+ self.html = self.load(self.pyfile.url, post=post_data, decode=True)
+
+ # STAGE 3: get direct link
+ m = re.search(self.LINK_PATTERN, self.html, re.DOTALL)
+ if m:
+ break
+
+ if m is None:
+ self.parseError("could not detect direct link")
+
+ direct = m.group(1)
+ self.logDebug('found direct link: ' + direct)
+ self.download(direct, disposition=True)
+
+
+getInfo = create_getInfo(UpstoreNet)
diff --git a/pyload/plugins/hoster/UptoboxCom.py b/pyload/plugins/hoster/UptoboxCom.py
new file mode 100644
index 000000000..8fd5e6fa7
--- /dev/null
+++ b/pyload/plugins/hoster/UptoboxCom.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from pyload.plugins.internal.CaptchaService import ReCaptcha, SolveMedia
+from pyload.utils import html_unescape
+
+
+class UptoboxCom(XFileSharingPro):
+ __name__ = "UptoboxCom"
+ __type__ = "hoster"
+ __version__ = "0.09"
+
+ __pattern__ = r'https?://(?:www\.)?uptobox\.com/\w+'
+
+ __description__ = """Uptobox.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ HOSTER_NAME = "uptobox.com"
+
+ FILE_INFO_PATTERN = r'"para_title">(?P<N>.+) \((?P<S>[\d\.]+) (?P<U>\w+)\)'
+ OFFLINE_PATTERN = r'>(File not found|Access Denied|404 Not Found)'
+ TEMP_OFFLINE_PATTERN = r'>This server is in maintenance mode'
+
+ WAIT_PATTERN = r'>(\d+)</span> seconds<'
+
+ LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"'
+
+
+ def handleCaptcha(self, inputs):
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ captcha = SolveMedia(self)
+ inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key)
+ return 4
+ else:
+ m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
+ if m:
+ captcha_url = m.group(1)
+ inputs['code'] = self.decryptCaptcha(captcha_url)
+ return 2
+ else:
+ m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL)
+ if m:
+ captcha_div = m.group(1)
+ self.logDebug(captcha_div)
+ numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>',
+ html_unescape(captcha_div))
+ inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
+ self.logDebug("CAPTCHA", inputs['code'], numerals)
+ return 3
+ else:
+ m = re.search(self.RECAPTCHA_URL_PATTERN, self.html)
+ if m:
+ recaptcha_key = unquote(m.group(1))
+ self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key)
+ recaptcha = ReCaptcha(self)
+ inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(
+ recaptcha_key)
+ return 1
+ return 0
+
+
+getInfo = create_getInfo(UptoboxCom)
diff --git a/pyload/plugins/hoster/VeehdCom.py b/pyload/plugins/hoster/VeehdCom.py
new file mode 100644
index 000000000..4d76c3525
--- /dev/null
+++ b/pyload/plugins/hoster/VeehdCom.py
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class VeehdCom(Hoster):
+ __name__ = "VeehdCom"
+ __type__ = "hoster"
+ __version__ = "0.23"
+
+ __pattern__ = r'http://veehd\.com/video/\d+_\S+'
+ __config__ = [("filename_spaces", "bool", "Allow spaces in filename", False),
+ ("replacement_char", "str", "Filename replacement character", "_")]
+
+ __description__ = """Veehd.com hoster plugin"""
+ __author_name__ = "cat"
+ __author_mail__ = "cat@pyload"
+
+
+ def _debug(self, msg):
+ self.logDebug('[%s] %s' % (self.__name__, msg))
+
+ def setup(self):
+ self.multiDL = True
+ self.req.canContinue = True
+
+ def process(self, pyfile):
+ self.download_html()
+ if not self.file_exists():
+ self.offline()
+
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ url = self.pyfile.url
+ self._debug("Requesting page: %s" % (repr(url),))
+ self.html = self.load(url)
+
+ def file_exists(self):
+ if not self.html:
+ self.download_html()
+
+ if '<title>Veehd</title>' in self.html:
+ return False
+ return True
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ m = re.search(r'<title[^>]*>([^<]+) on Veehd</title>', self.html)
+ if m is None:
+ self.fail("video title not found")
+
+ name = m.group(1)
+
+ # replace unwanted characters in filename
+ if self.getConfig('filename_spaces'):
+ pattern = '[^0-9A-Za-z\.\ ]+'
+ else:
+ pattern = '[^0-9A-Za-z\.]+'
+
+ return re.sub(pattern, self.getConfig('replacement_char'), name) + '.avi'
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ m = re.search(r'<embed type="video/divx" src="(http://([^/]*\.)?veehd\.com/dl/[^"]+)"',
+ self.html)
+ if m is None:
+ self.fail("embedded video url not found")
+
+ return m.group(1)
diff --git a/pyload/plugins/hoster/VeohCom.py b/pyload/plugins/hoster/VeohCom.py
new file mode 100644
index 000000000..31b21420a
--- /dev/null
+++ b/pyload/plugins/hoster/VeohCom.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class VeohCom(SimpleHoster):
+ __name__ = "VeohCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?veoh\.com/(tv/)?(watch|videos)/(?P<ID>v\w+)'
+ __config__ = [("quality", "Low;High;Auto", "Quality", "Auto")]
+
+ __description__ = """Veoh.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.*?)"'
+ OFFLINE_PATTERN = r'>Sorry, we couldn\'t find the video you were looking for'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.veoh.com/watch/\g<ID>')]
+
+ SH_COOKIES = [(".veoh.com", "lassieLocale", "en")]
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = -1
+
+ def handleFree(self):
+ quality = self.getConfig("quality")
+ if quality == "Auto":
+ quality = ("High", "Low")
+ for q in quality:
+ pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q
+ m = re.search(pattern, self.html)
+ if m:
+ self.pyfile.name += ".mp4"
+ link = m.group(1).replace("\\", "")
+ self.logDebug("Download link: " + link)
+ self.download(link)
+ return
+ else:
+ self.logInfo("No %s quality video found" % q.upper())
+ else:
+ self.fail("No video found!")
+
+
+getInfo = create_getInfo(VeohCom)
diff --git a/pyload/plugins/hoster/VidPlayNet.py b/pyload/plugins/hoster/VidPlayNet.py
new file mode 100644
index 000000000..82afde07d
--- /dev/null
+++ b/pyload/plugins/hoster/VidPlayNet.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0
+
+from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class VidPlayNet(XFileSharingPro):
+ __name__ = "VidPlayNet"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?vidplay\.net/\w{12}'
+
+ __description__ = """VidPlay.net hoster plugin"""
+ __author_name__ = "t4skforce"
+ __author_mail__ = "t4skforce1337[AT]gmail[DOT]com"
+
+ HOSTER_NAME = "vidplay.net"
+
+ OFFLINE_PATTERN = r'<b>File Not Found</b><br>\s*<br>'
+ FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h[1-6]>(?P<N>[^<]+)</h[1-6]>'
+ LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<&]+)' % HOSTER_NAME
+
+
+getInfo = create_getInfo(VidPlayNet)
diff --git a/pyload/plugins/hoster/VimeoCom.py b/pyload/plugins/hoster/VimeoCom.py
new file mode 100644
index 000000000..aebf1c344
--- /dev/null
+++ b/pyload/plugins/hoster/VimeoCom.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class VimeoCom(SimpleHoster):
+ __name__ = "VimeoCom"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?(player\.)?vimeo\.com/(video/)?(?P<ID>\d+)'
+ __config__ = [("quality", "Lowest;Mobile;SD;HD;Highest", "Quality", "Highest"),
+ ("original", "bool", "Try to download the original file first", True)]
+
+ __description__ = """Vimeo.com hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ FILE_NAME_PATTERN = r'<title>(?P<N>.+) on Vimeo<'
+ OFFLINE_PATTERN = r'class="exception_header"'
+ TEMP_OFFLINE_PATTERN = r'Please try again in a few minutes.<'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__, r'https://www.vimeo.com/\g<ID>')]
+
+ SH_COOKIES = [(".vimeo.com", "language", "en")]
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = -1
+
+ def handleFree(self):
+ password = self.getPassword()
+
+ if self.js and 'class="btn iconify_down_b"' in self.html:
+ html = self.js.eval(self.load(self.pyfile.url, get={'action': "download", 'password': password}, decode=True))
+ pattern = r'href="(?P<URL>http://vimeo\.com.+?)".*?\>(?P<QL>.+?) '
+ else:
+ id = re.match(self.__pattern__, self.pyfile.url).group("ID")
+ html = self.load("https://player.vimeo.com/video/" + id, get={'password': password})
+ pattern = r'"(?P<QL>\w+)":{"profile".*?"(?P<URL>http://pdl\.vimeocdn\.com.+?)"'
+
+ link = dict([(l.group('QL').lower(), l.group('URL')) for l in re.finditer(pattern, html)])
+
+ if self.getConfig("original"):
+ if "original" in link:
+ self.download(link[q])
+ return
+ else:
+ self.logInfo("Original file not downloadable")
+
+ quality = self.getConfig("quality")
+ if quality == "Highest":
+ qlevel = ("hd", "sd", "mobile")
+ elif quality == "Lowest":
+ qlevel = ("mobile", "sd", "hd")
+ else:
+ qlevel = quality.lower()
+
+ for q in qlevel:
+ if q in link:
+ self.download(link[q])
+ return
+ else:
+ self.logInfo("No %s quality video found" % q.upper())
+ else:
+ self.fail("No video found!")
+
+
+getInfo = create_getInfo(VimeoCom)
diff --git a/pyload/plugins/hoster/Vipleech4uCom.py b/pyload/plugins/hoster/Vipleech4uCom.py
new file mode 100644
index 000000000..436b7d484
--- /dev/null
+++ b/pyload/plugins/hoster/Vipleech4uCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class Vipleech4uCom(DeadHoster):
+ __name__ = "Vipleech4uCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?vipleech4u\.com/manager\.php'
+
+ __description__ = """Vipleech4u.com hoster plugin"""
+ __author_name__ = "Kagenoshin"
+ __author_mail__ = "kagenoshin@gmx.ch"
+
+
+getInfo = create_getInfo(Vipleech4uCom)
diff --git a/pyload/plugins/hoster/WarserverCz.py b/pyload/plugins/hoster/WarserverCz.py
new file mode 100644
index 000000000..365f0f0fa
--- /dev/null
+++ b/pyload/plugins/hoster/WarserverCz.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class WarserverCz(DeadHoster):
+ __name__ = "WarserverCz"
+ __type__ = "hoster"
+ __version__ = "0.13"
+
+ __pattern__ = r'http://(?:www\.)?warserver\.cz/stahnout/\d+'
+
+ __description__ = """Warserver.cz hoster plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+
+getInfo = create_getInfo(WarserverCz)
diff --git a/pyload/plugins/hoster/WebshareCz.py b/pyload/plugins/hoster/WebshareCz.py
new file mode 100644
index 000000000..6ca8d8882
--- /dev/null
+++ b/pyload/plugins/hoster/WebshareCz.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.network.RequestFactory import getRequest
+from pyload.plugins.internal.SimpleHoster import SimpleHoster
+
+
+def getInfo(urls):
+ h = getRequest()
+ for url in urls:
+ h.load(url)
+ fid = re.search(WebshareCz.__pattern__, url).group('ID')
+ api_data = h.load('https://webshare.cz/api/file_info/', post={'ident': fid})
+ if 'File not found' in api_data:
+ file_info = (url, 0, 1, url)
+ else:
+ name = re.search('<name>(.+)</name>', api_data).group(1)
+ size = re.search('<size>(.+)</size>', api_data).group(1)
+ file_info = (name, size, 2, url)
+ yield file_info
+
+
+class WebshareCz(SimpleHoster):
+ __name__ = "WebshareCz"
+ __type__ = "hoster"
+ __version__ = "0.13"
+
+ __pattern__ = r'https?://(?:www\.)?webshare.cz/(?:#/)?file/(?P<ID>\w+)'
+
+ __description__ = """WebShare.cz hoster plugin"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def handleFree(self):
+ api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid})
+ self.logDebug("API data: " + api_data)
+ m = re.search('<link>(.+)</link>', api_data)
+ if m is None:
+ self.parseError('Unable to detect direct link')
+ direct = m.group(1)
+ self.logDebug("Direct link: " + direct)
+ self.download(direct, disposition=True)
+
+ def getFileInfo(self):
+ self.logDebug("URL: %s" % self.pyfile.url)
+
+ self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID')
+
+ self.load(self.pyfile.url)
+ api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid})
+
+ if 'File not found' in api_data:
+ self.offline()
+ else:
+ self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1)
+ self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1)
+
+ self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size))
diff --git a/pyload/plugins/hoster/WrzucTo.py b/pyload/plugins/hoster/WrzucTo.py
new file mode 100644
index 000000000..b766ea785
--- /dev/null
+++ b/pyload/plugins/hoster/WrzucTo.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import HTTPHEADER
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class WrzucTo(SimpleHoster):
+ __name__ = "WrzucTo"
+ __type__ = "hoster"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?wrzuc\.to/([a-zA-Z0-9]+(\.wt|\.html)|(\w+/?linki/[a-zA-Z0-9]+))'
+
+ __description__ = """Wrzuc.to hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r'id="file_info">\s*<strong>(?P<N>.*?)</strong>'
+ FILE_SIZE_PATTERN = r'class="info">\s*<tr>\s*<td>(?P<S>.*?)</td>'
+
+ SH_COOKIES = [(".wrzuc.to", "language", "en")]
+
+
+ def setup(self):
+ self.multiDL = True
+
+ def handleFree(self):
+ data = dict(re.findall(r'(md5|file): "(.*?)"', self.html))
+ if len(data) != 2:
+ self.parseError('File ID')
+
+ self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"])
+ self.req.http.lastURL = self.pyfile.url
+ self.load("http://www.wrzuc.to/ajax/server/prepair", post={"md5": data['md5']})
+
+ self.req.http.lastURL = self.pyfile.url
+ self.html = self.load("http://www.wrzuc.to/ajax/server/download_link", post={"file": data['file']})
+
+ data.update(re.findall(r'"(download_link|server_id)":"(.*?)"', self.html))
+ if len(data) != 4:
+ self.parseError('Download URL')
+
+ download_url = "http://%s.wrzuc.to/pobierz/%s" % (data['server_id'], data['download_link'])
+ self.logDebug("Download URL: %s" % download_url)
+ self.download(download_url)
+
+
+getInfo = create_getInfo(WrzucTo)
diff --git a/pyload/plugins/hoster/WuploadCom.py b/pyload/plugins/hoster/WuploadCom.py
new file mode 100644
index 000000000..5bc933ae5
--- /dev/null
+++ b/pyload/plugins/hoster/WuploadCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class WuploadCom(DeadHoster):
+ __name__ = "WuploadCom"
+ __type__ = "hoster"
+ __version__ = "0.23"
+
+ __pattern__ = r'http://(?:www\.)?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?'
+
+ __description__ = """Wupload.com hoster plugin"""
+ __author_name__ = ("jeix", "Paul King")
+ __author_mail__ = ("jeix@hasnomail.de", "")
+
+
+getInfo = create_getInfo(WuploadCom)
diff --git a/pyload/plugins/hoster/X7To.py b/pyload/plugins/hoster/X7To.py
new file mode 100644
index 000000000..8df1d0ab3
--- /dev/null
+++ b/pyload/plugins/hoster/X7To.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo
+
+
+class X7To(DeadHoster):
+ __name__ = "X7To"
+ __type__ = "hoster"
+ __version__ = "0.41"
+
+ __pattern__ = r'http://(?:www\.)?x7.to/'
+
+ __description__ = """X7.to hoster plugin"""
+ __author_name__ = "ernieb"
+ __author_mail__ = "ernieb"
+
+
+getInfo = create_getInfo(X7To)
diff --git a/pyload/plugins/hoster/XFileSharingPro.py b/pyload/plugins/hoster/XFileSharingPro.py
new file mode 100644
index 000000000..c7733600b
--- /dev/null
+++ b/pyload/plugins/hoster/XFileSharingPro.py
@@ -0,0 +1,324 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pycurl import FOLLOWLOCATION, LOW_SPEED_TIME
+from random import random
+from urllib import unquote
+from urlparse import urlparse
+
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.internal.CaptchaService import ReCaptcha, SolveMedia
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, PluginParseError, replace_patterns
+from pyload.utils import html_unescape
+
+
+class XFileSharingPro(SimpleHoster):
+ """
+ Common base for XFileSharingPro hosters like EasybytezCom, CramitIn, FiledinoCom...
+ Some hosters may work straight away when added to __pattern__
+ However, most of them will NOT work because they are either down or running a customized version
+ """
+ __name__ = "XFileSharingPro"
+ __type__ = "hoster"
+ __version__ = "0.32"
+
+ __pattern__ = r'^unmatchable$'
+
+ __description__ = """XFileSharingPro base hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ FILE_INFO_PATTERN = r'<tr><td align=right><b>Filename:</b></td><td nowrap>(?P<N>[^<]+)</td></tr>\s*.*?<small>\((?P<S>[^<]+)\)</small>'
+ FILE_NAME_PATTERN = r'<input type="hidden" name="fname" value="(?P<N>[^"]+)"'
+ FILE_SIZE_PATTERN = r'You have requested .*\((?P<S>[\d\.\,]+) ?(?P<U>\w+)?\)</font>'
+ OFFLINE_PATTERN = r'>\w+ (Not Found|file (was|has been) removed)'
+
+ WAIT_PATTERN = r'<span id="countdown_str">.*?>(\d+)</span>'
+
+ OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)'
+
+ CAPTCHA_URL_PATTERN = r'(http://[^"\']+?/captchas?/[^"\']+)'
+ RECAPTCHA_URL_PATTERN = r'http://[^"\']+?recaptcha[^"\']+?\?k=([^"\']+)"'
+ CAPTCHA_DIV_PATTERN = r'>Enter code.*?<div.*?>(.*?)</div>'
+ SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"'
+
+ ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</'
+
+
+ def setup(self):
+ if self.__name__ == "XFileSharingPro":
+ self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern']
+ self.multiDL = True
+ else:
+ self.resumeDownload = self.multiDL = self.premium
+
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ self.prepare()
+
+ pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
+
+ if not re.match(self.__pattern__, pyfile.url):
+ if self.premium:
+ self.handleOverriden()
+ else:
+ self.fail("Only premium users can download from other hosters with %s" % self.HOSTER_NAME)
+ else:
+ try:
+ # Due to a 0.4.9 core bug self.load would use cookies even if
+ # cookies=False. Workaround using getURL to avoid cookies.
+ # Can be reverted in 0.5 as the cookies bug has been fixed.
+ self.html = getURL(pyfile.url, decode=True)
+ self.file_info = self.getFileInfo()
+ except PluginParseError:
+ self.file_info = None
+
+ self.location = self.getDirectDownloadLink()
+
+ if not self.file_info:
+ pyfile.name = html_unescape(unquote(urlparse(
+ self.location if self.location else pyfile.url).path.split("/")[-1]))
+
+ if self.location:
+ self.startDownload(self.location)
+ elif self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
+ def prepare(self):
+ """ Initialize important variables """
+ if not hasattr(self, "HOSTER_NAME"):
+ self.HOSTER_NAME = re.match(self.__pattern__, self.pyfile.url).group(1)
+ if not hasattr(self, "LINK_PATTERN"):
+ self.LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+)' % self.HOSTER_NAME
+
+ self.captcha = self.errmsg = None
+ self.passwords = self.getPassword().splitlines()
+
+ def getDirectDownloadLink(self):
+ """ Get download link for premium users with direct download enabled """
+ self.req.http.lastURL = self.pyfile.url
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+ self.html = self.load(self.pyfile.url, cookies=True, decode=True)
+ self.header = self.req.http.header
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+
+ location = None
+ m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
+ if m and re.match(self.LINK_PATTERN, m.group(1)):
+ location = m.group(1).strip()
+
+ return location
+
+ def handleFree(self):
+ url = self.getDownloadLink()
+ self.logDebug("Download URL: %s" % url)
+ self.startDownload(url)
+
+ def getDownloadLink(self):
+ for i in xrange(5):
+ self.logDebug("Getting download link: #%d" % i)
+ data = self.getPostParameters()
+
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+ self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True)
+ self.header = self.req.http.header
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+
+ m = re.search(r"Location\s*:\s*(.*)", self.header, re.I)
+ if m:
+ break
+
+ m = re.search(self.LINK_PATTERN, self.html, re.S)
+ if m:
+ break
+
+ else:
+ if self.errmsg and 'captcha' in self.errmsg:
+ self.fail("No valid captcha code entered")
+ else:
+ self.fail("Download link not found")
+
+ return m.group(1)
+
+ def handlePremium(self):
+ self.html = self.load(self.pyfile.url, post=self.getPostParameters())
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('DIRECT LINK')
+ self.startDownload(m.group(1))
+
+ def handleOverriden(self):
+ #only tested with easybytez.com
+ self.html = self.load("http://www.%s/" % self.HOSTER_NAME)
+ action, inputs = self.parseHtmlForm('')
+ upload_id = "%012d" % int(random() * 10 ** 12)
+ action += upload_id + "&js_on=1&utype=prem&upload_type=url"
+ inputs['tos'] = '1'
+ inputs['url_mass'] = self.pyfile.url
+ inputs['up1oad_type'] = 'url'
+
+ self.logDebug(self.HOSTER_NAME, action, inputs)
+ #wait for file to upload to easybytez.com
+ self.req.http.c.setopt(LOW_SPEED_TIME, 600)
+ self.html = self.load(action, post=inputs)
+
+ action, inputs = self.parseHtmlForm('F1')
+ if not inputs:
+ self.parseError('TEXTAREA')
+ self.logDebug(self.HOSTER_NAME, inputs)
+ if inputs['st'] == 'OK':
+ self.html = self.load(action, post=inputs)
+ elif inputs['st'] == 'Can not leech file':
+ self.retry(max_tries=20, wait_time=3 * 60, reason=inputs['st'])
+ else:
+ self.fail(inputs['st'])
+
+ #get easybytez.com link for uploaded file
+ m = re.search(self.OVR_LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError('DIRECT LINK (OVR)')
+ self.pyfile.url = m.group(1)
+ header = self.load(self.pyfile.url, just_header=True)
+ if 'location' in header: # Direct link
+ self.startDownload(self.pyfile.url)
+ else:
+ self.retry()
+
+ def startDownload(self, link):
+ link = link.strip()
+ if self.captcha:
+ self.correctCaptcha()
+ self.logDebug('DIRECT LINK: %s' % link)
+ self.download(link, disposition=True)
+
+ def checkErrors(self):
+ m = re.search(self.ERROR_PATTERN, self.html)
+ if m:
+ self.errmsg = m.group(1)
+ self.logWarning(re.sub(r"<.*?>", " ", self.errmsg))
+
+ if 'wait' in self.errmsg:
+ wait_time = sum([int(v) * {"hour": 3600, "minute": 60, "second": 1}[u] for v, u in
+ re.findall(r'(\d+)\s*(hour|minute|second)', self.errmsg)])
+ self.wait(wait_time, True)
+ elif 'captcha' in self.errmsg:
+ self.invalidCaptcha()
+ elif 'premium' in self.errmsg and 'require' in self.errmsg:
+ self.fail("File can be downloaded by premium users only")
+ elif 'limit' in self.errmsg:
+ self.wait(1 * 60 * 60, True)
+ self.retry(25)
+ elif 'countdown' in self.errmsg or 'Expired' in self.errmsg:
+ self.retry()
+ elif 'maintenance' in self.errmsg:
+ self.tempOffline()
+ elif 'download files up to' in self.errmsg:
+ self.fail("File too large for free download")
+ else:
+ self.fail(self.errmsg)
+
+ else:
+ self.errmsg = None
+
+ return self.errmsg
+
+ def getPostParameters(self):
+ for _ in xrange(3):
+ if not self.errmsg:
+ self.checkErrors()
+
+ if hasattr(self, "FORM_PATTERN"):
+ action, inputs = self.parseHtmlForm(self.FORM_PATTERN)
+ else:
+ action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
+
+ if not inputs:
+ action, inputs = self.parseHtmlForm('F1')
+ if not inputs:
+ if self.errmsg:
+ self.retry()
+ else:
+ self.parseError("Form not found")
+
+ self.logDebug(self.HOSTER_NAME, inputs)
+
+ if 'op' in inputs and inputs['op'] in ("download2", "download3"):
+ if "password" in inputs:
+ if self.passwords:
+ inputs['password'] = self.passwords.pop(0)
+ else:
+ self.fail("No or invalid passport")
+
+ if not self.premium:
+ m = re.search(self.WAIT_PATTERN, self.html)
+ if m:
+ wait_time = int(m.group(1)) + 1
+ self.setWait(wait_time, False)
+ else:
+ wait_time = 0
+
+ self.captcha = self.handleCaptcha(inputs)
+
+ if wait_time:
+ self.wait()
+
+ self.errmsg = None
+ return inputs
+
+ else:
+ inputs['referer'] = self.pyfile.url
+
+ if self.premium:
+ inputs['method_premium'] = "Premium Download"
+ if 'method_free' in inputs:
+ del inputs['method_free']
+ else:
+ inputs['method_free'] = "Free Download"
+ if 'method_premium' in inputs:
+ del inputs['method_premium']
+
+ self.html = self.load(self.pyfile.url, post=inputs, ref=True)
+ self.errmsg = None
+
+ else:
+ self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN'))
+
+ def handleCaptcha(self, inputs):
+ m = re.search(self.RECAPTCHA_URL_PATTERN, self.html)
+ if m:
+ recaptcha_key = unquote(m.group(1))
+ self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key)
+ recaptcha = ReCaptcha(self)
+ inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key)
+ return 1
+ else:
+ m = re.search(self.CAPTCHA_URL_PATTERN, self.html)
+ if m:
+ captcha_url = m.group(1)
+ inputs['code'] = self.decryptCaptcha(captcha_url)
+ return 2
+ else:
+ m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL)
+ if m:
+ captcha_div = m.group(1)
+ self.logDebug(captcha_div)
+ numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div))
+ inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))])
+ self.logDebug("CAPTCHA", inputs['code'], numerals)
+ return 3
+ else:
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
+ if m:
+ captcha_key = m.group(1)
+ captcha = SolveMedia(self)
+ inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key)
+ return 4
+ return 0
+
+
+getInfo = create_getInfo(XFileSharingPro)
diff --git a/pyload/plugins/hoster/XHamsterCom.py b/pyload/plugins/hoster/XHamsterCom.py
new file mode 100644
index 000000000..0afb94b74
--- /dev/null
+++ b/pyload/plugins/hoster/XHamsterCom.py
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.Hoster import Hoster
+
+
+def clean_json(json_expr):
+ json_expr = re.sub('[\n\r]', '', json_expr)
+ json_expr = re.sub(' +', '', json_expr)
+ json_expr = re.sub('\'', '"', json_expr)
+
+ return json_expr
+
+
+class XHamsterCom(Hoster):
+ __name__ = "XHamsterCom"
+ __type__ = "hoster"
+ __version__ = "0.12"
+
+ __pattern__ = r'http://(?:www\.)?xhamster\.com/movies/.+'
+ __config__ = [("type", ".mp4;.flv", "Preferred type", ".mp4")]
+
+ __description__ = """XHamster.com hoster plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+
+ if not self.file_exists():
+ self.offline()
+
+ if self.getConfig("type"):
+ self.desired_fmt = self.getConfig("type")
+
+ pyfile.name = self.get_file_name() + self.desired_fmt
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ flashvar_pattern = re.compile('flashvars = ({.*?});', re.DOTALL)
+ json_flashvar = flashvar_pattern.search(self.html)
+
+ if not json_flashvar:
+ self.fail("Parse error (flashvars)")
+
+ j = clean_json(json_flashvar.group(1))
+ flashvars = json_loads(j)
+
+ if flashvars['srv']:
+ srv_url = flashvars['srv'] + '/'
+ else:
+ self.fail("Parse error (srv_url)")
+
+ if flashvars['url_mode']:
+ url_mode = flashvars['url_mode']
+ else:
+ self.fail("Parse error (url_mode)")
+
+ if self.desired_fmt == ".mp4":
+ file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html)
+ if file_url is None:
+ self.fail("Parse error (file_url)")
+ file_url = file_url.group(1)
+ long_url = srv_url + file_url
+ self.logDebug("long_url: %s" % long_url)
+ else:
+ if flashvars['file']:
+ file_url = unquote(flashvars['file'])
+ else:
+ self.fail("Parse error (file_url)")
+
+ if url_mode == '3':
+ long_url = file_url
+ self.logDebug("long_url: %s" % long_url)
+ else:
+ long_url = srv_url + "key=" + file_url
+ self.logDebug("long_url: %s" % long_url)
+
+ return long_url
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ pattern = r"<title>(.*?) - xHamster\.com</title>"
+ name = re.search(pattern, self.html)
+ if name is None:
+ pattern = r"<h1 >(.*)</h1>"
+ name = re.search(pattern, self.html)
+ if name is None:
+ pattern = r"http://[www.]+xhamster\.com/movies/.*/(.*?)\.html?"
+ name = re.match(file_name_pattern, self.pyfile.url)
+ if name is None:
+ pattern = r"<div id=\"element_str_id\" style=\"display:none;\">(.*)</div>"
+ name = re.search(pattern, self.html)
+ if name is None:
+ return "Unknown"
+
+ return name.group(1)
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+ if re.search(r"(.*Video not found.*)", self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/XVideosCom.py b/pyload/plugins/hoster/XVideosCom.py
new file mode 100644
index 000000000..75162955a
--- /dev/null
+++ b/pyload/plugins/hoster/XVideosCom.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.Hoster import Hoster
+
+
+class XVideosCom(Hoster):
+ __name__ = "XVideos.com"
+ __type__ = "hoster"
+ __version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?xvideos\.com/video([0-9]+)/.*'
+
+ __description__ = """XVideos.com hoster plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+
+ def process(self, pyfile):
+ site = self.load(pyfile.url)
+ pyfile.name = "%s (%s).flv" % (
+ re.search(r"<h2>([^<]+)<span", site).group(1),
+ re.match(self.__pattern__, pyfile.url).group(1),
+ )
+ self.download(unquote(re.search(r"flv_url=([^&]+)&", site).group(1)))
diff --git a/pyload/plugins/hoster/Xdcc.py b/pyload/plugins/hoster/Xdcc.py
new file mode 100644
index 000000000..8b427cfdc
--- /dev/null
+++ b/pyload/plugins/hoster/Xdcc.py
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+
+import re
+import socket
+import struct
+import sys
+import time
+
+from os import makedirs
+from os.path import exists, join
+from select import select
+
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import safe_join
+
+
+class Xdcc(Hoster):
+ __name__ = "Xdcc"
+ __type__ = "hoster"
+ __version__ = "0.32"
+
+ __config__ = [("nick", "str", "Nickname", "pyload"),
+ ("ident", "str", "Ident", "pyloadident"),
+ ("realname", "str", "Realname", "pyloadreal")]
+
+ __description__ = """Download from IRC XDCC bot"""
+ __author_name__ = "jeix"
+ __author_mail__ = "jeix@hasnomail.com"
+
+
+ def setup(self):
+ self.debug = 0 # 0,1,2
+ self.timeout = 30
+ self.multiDL = False
+
+ def process(self, pyfile):
+ # change request type
+ self.req = pyfile.m.core.requestFactory.getRequest(self.__name__, type="XDCC")
+
+ self.pyfile = pyfile
+ for _ in xrange(0, 3):
+ try:
+ nmn = self.doDownload(pyfile.url)
+ self.logDebug("%s: Download of %s finished." % (self.__name__, nmn))
+ return
+ except socket.error, e:
+ if hasattr(e, "errno"):
+ errno = e.errno
+ else:
+ errno = e.args[0]
+
+ if errno == 10054:
+ self.logDebug("XDCC: Server blocked our ip, retry in 5 min")
+ self.setWait(300)
+ self.wait()
+ continue
+
+ self.fail("Failed due to socket errors. Code: %d" % errno)
+
+ self.fail("Server blocked our ip, retry again later manually")
+
+ def doDownload(self, url):
+ self.pyfile.setStatus("waiting") # real link
+
+ m = re.match(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url)
+ server = m.group(1)
+ chan = m.group(2)
+ bot = m.group(3)
+ pack = m.group(4)
+ nick = self.getConfig('nick')
+ ident = self.getConfig('ident')
+ real = self.getConfig('realname')
+
+ temp = server.split(':')
+ ln = len(temp)
+ if ln == 2:
+ host, port = temp
+ elif ln == 1:
+ host, port = temp[0], 6667
+ else:
+ self.fail("Invalid hostname for IRC Server (%s)" % server)
+
+ #######################
+ # CONNECT TO IRC AND IDLE FOR REAL LINK
+ dl_time = time.time()
+
+ sock = socket.socket()
+ sock.connect((host, int(port)))
+ if nick == "pyload":
+ nick = "pyload-%d" % (time.time() % 1000) # last 3 digits
+ sock.send("NICK %s\r\n" % nick)
+ sock.send("USER %s %s bla :%s\r\n" % (ident, host, real))
+ time.sleep(3)
+ sock.send("JOIN #%s\r\n" % chan)
+ sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack))
+
+ # IRC recv loop
+ readbuffer = ""
+ done = False
+ retry = None
+ m = None
+ while True:
+
+ # done is set if we got our real link
+ if done:
+ break
+
+ if retry:
+ if time.time() > retry:
+ retry = None
+ dl_time = time.time()
+ sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack))
+
+ else:
+ if (dl_time + self.timeout) < time.time(): # todo: add in config
+ sock.send("QUIT :byebye\r\n")
+ sock.close()
+ self.fail("XDCC Bot did not answer")
+
+ fdset = select([sock], [], [], 0)
+ if sock not in fdset[0]:
+ continue
+
+ readbuffer += sock.recv(1024)
+ temp = readbuffer.split("\n")
+ readbuffer = temp.pop()
+
+ for line in temp:
+ if self.debug is 2:
+ print "*> " + unicode(line, errors='ignore')
+ line = line.rstrip()
+ first = line.split()
+
+ if first[0] == "PING":
+ sock.send("PONG %s\r\n" % first[1])
+
+ if first[0] == "ERROR":
+ self.fail("IRC-Error: %s" % line)
+
+ msg = line.split(None, 3)
+ if len(msg) != 4:
+ continue
+
+ msg = {
+ "origin": msg[0][1:],
+ "action": msg[1],
+ "target": msg[2],
+ "text": msg[3][1:]
+ }
+
+ if nick == msg['target'][0:len(nick)] and "PRIVMSG" == msg['action']:
+ if msg['text'] == "\x01VERSION\x01":
+ self.logDebug("XDCC: Sending CTCP VERSION.")
+ sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
+ elif msg['text'] == "\x01TIME\x01":
+ self.logDebug("Sending CTCP TIME.")
+ sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time()))
+ elif msg['text'] == "\x01LAG\x01":
+ pass # don't know how to answer
+
+ if not (bot == msg['origin'][0:len(bot)]
+ and nick == msg['target'][0:len(nick)]
+ and msg['action'] in ("PRIVMSG", "NOTICE")):
+ continue
+
+ if self.debug is 1:
+ print "%s: %s" % (msg['origin'], msg['text'])
+
+ if "You already requested that pack" in msg['text']:
+ retry = time.time() + 300
+
+ if "you must be on a known channel to request a pack" in msg['text']:
+ self.fail("Wrong channel")
+
+ m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text'])
+ if m:
+ done = True
+
+ # get connection data
+ ip = socket.inet_ntoa(struct.pack('L', socket.ntohl(int(m.group(2)))))
+ port = int(m.group(3))
+ packname = m.group(1)
+
+ if len(m.groups()) > 3:
+ self.req.filesize = int(m.group(4))
+
+ self.pyfile.name = packname
+
+ download_folder = self.config['general']['download_folder']
+ filename = safe_join(download_folder, packname)
+
+ self.logInfo("XDCC: Downloading %s from %s:%d" % (packname, ip, port))
+
+ self.pyfile.setStatus("downloading")
+ newname = self.req.download(ip, port, filename, sock, self.pyfile.setProgress)
+ if newname and newname != filename:
+ self.logInfo("%(name)s saved as %(newname)s" % {"name": self.pyfile.name, "newname": newname})
+ filename = newname
+
+ # kill IRC socket
+ # sock.send("QUIT :byebye\r\n")
+ sock.close()
+
+ self.lastDownload = filename
+ return self.lastDownload
diff --git a/pyload/plugins/hoster/YibaishiwuCom.py b/pyload/plugins/hoster/YibaishiwuCom.py
new file mode 100644
index 000000000..b6d06d234
--- /dev/null
+++ b/pyload/plugins/hoster/YibaishiwuCom.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.common.json_layer import json_loads
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class YibaishiwuCom(SimpleHoster):
+ __name__ = "YibaishiwuCom"
+ __type__ = "hoster"
+ __version__ = "0.12"
+
+ __pattern__ = r'http://(?:www\.)?(?:u\.)?115.com/file/(?P<ID>\w+)'
+
+ __description__ = """115.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ FILE_NAME_PATTERN = r"file_name: '(?P<N>[^']+)'"
+ FILE_SIZE_PATTERN = r"file_size: '(?P<S>[^']+)'"
+ OFFLINE_PATTERN = ur'<h3><i style="color:red;">哎呀提取码䞍存圚䞍劚搜搜看吧</i></h3>'
+
+ LINK_PATTERN = r'(/\?ct=(pickcode|download)[^"\']+)'
+
+
+ def handleFree(self):
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
+ self.parseError("AJAX URL")
+ url = m.group(1)
+ self.logDebug(('FREEUSER' if m.group(2) == 'download' else 'GUEST') + ' URL', url)
+
+ response = json_loads(self.load("http://115.com" + url, decode=False))
+ if "urls" in response:
+ mirrors = response['urls']
+ elif "data" in response:
+ mirrors = response['data']
+ else:
+ mirrors = None
+
+ for mr in mirrors:
+ try:
+ url = mr['url'].replace("\\", "")
+ self.logDebug("Trying URL: " + url)
+ self.download(url)
+ break
+ except:
+ continue
+ else:
+ self.fail('No working link found')
+
+
+getInfo = create_getInfo(YibaishiwuCom)
diff --git a/pyload/plugins/hoster/YoupornCom.py b/pyload/plugins/hoster/YoupornCom.py
new file mode 100644
index 000000000..de23780c3
--- /dev/null
+++ b/pyload/plugins/hoster/YoupornCom.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hoster import Hoster
+
+
+class YoupornCom(Hoster):
+ __name__ = "YoupornCom"
+ __type__ = "hoster"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?youporn\.com/watch/.+'
+
+ __description__ = """Youporn.com hoster plugin"""
+ __author_name__ = "willnix"
+ __author_mail__ = "willnix@pyload.org"
+
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+
+ if not self.file_exists():
+ self.offline()
+
+ pyfile.name = self.get_file_name()
+ self.download(self.get_file_url())
+
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url, post={"user_choice": "Enter"}, cookies=False)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ if not self.html:
+ self.download_html()
+
+ return re.search(r'(http://download\.youporn\.com/download/\d+\?save=1)">', self.html).group(1)
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ file_name_pattern = r"<title>(.*) - Free Porn Videos - YouPorn</title>"
+ return re.search(file_name_pattern, self.html).group(1).replace("&amp;", "&").replace("/", "") + '.flv'
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+ if re.search(r"(.*invalid video_id.*)", self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/YourfilesTo.py b/pyload/plugins/hoster/YourfilesTo.py
new file mode 100644
index 000000000..2de636b4b
--- /dev/null
+++ b/pyload/plugins/hoster/YourfilesTo.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from urllib import unquote
+
+from pyload.plugins.Hoster import Hoster
+
+
+class YourfilesTo(Hoster):
+ __name__ = "YourfilesTo"
+ __type__ = "hoster"
+ __version__ = "0.21"
+
+ __pattern__ = r'(http://)?(?:www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+'
+
+ __description__ = """Youfiles.to hoster plugin"""
+ __author_name__ = ("jeix", "skydancer")
+ __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de")
+
+
+ def process(self, pyfile):
+ self.pyfile = pyfile
+ self.prepare()
+ self.download(self.get_file_url())
+
+ def prepare(self):
+ if not self.file_exists():
+ self.offline()
+
+ self.pyfile.name = self.get_file_name()
+
+ wait_time = self.get_waiting_time()
+ self.setWait(wait_time)
+ self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time))
+ self.wait()
+
+ def get_waiting_time(self):
+ if not self.html:
+ self.download_html()
+
+ #var zzipitime = 15;
+ m = re.search(r'var zzipitime = (\d+);', self.html)
+ if m:
+ sec = int(m.group(1))
+ else:
+ sec = 0
+
+ return sec
+
+ def download_html(self):
+ url = self.pyfile.url
+ self.html = self.load(url)
+
+ def get_file_url(self):
+ """ returns the absolute downloadable filepath
+ """
+ url = re.search(r"var bla = '(.*?)';", self.html)
+ if url:
+ url = url.group(1)
+ url = unquote(url.replace("http://http:/http://", "http://").replace("dumdidum", ""))
+ return url
+ else:
+ self.fail("absolute filepath could not be found. offline? ")
+
+ def get_file_name(self):
+ if not self.html:
+ self.download_html()
+
+ return re.search("<title>(.*)</title>", self.html).group(1)
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if not self.html:
+ self.download_html()
+
+ if re.search(r"HTTP Status 404", self.html) is not None:
+ return False
+ else:
+ return True
diff --git a/pyload/plugins/hoster/YoutubeCom.py b/pyload/plugins/hoster/YoutubeCom.py
new file mode 100644
index 000000000..6869d8b86
--- /dev/null
+++ b/pyload/plugins/hoster/YoutubeCom.py
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+
+import os
+import re
+import subprocess
+
+from urllib import unquote
+
+from pyload.plugins.Hoster import Hoster
+from pyload.plugins.internal.SimpleHoster import replace_patterns
+from pyload.utils import html_unescape
+
+
+def which(program):
+ """Works exactly like the unix command which
+
+ Courtesy of http://stackoverflow.com/a/377028/675646"""
+
+ def is_exe(fpath):
+ return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+ fpath, fname = os.path.split(program)
+ if fpath:
+ if is_exe(program):
+ return program
+ else:
+ for path in os.environ['PATH'].split(os.pathsep):
+ path = path.strip('"')
+ exe_file = os.path.join(path, program)
+ if is_exe(exe_file):
+ return exe_file
+
+ return None
+
+
+class YoutubeCom(Hoster):
+ __name__ = "YoutubeCom"
+ __type__ = "hoster"
+ __version__ = "0.40"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?(?:youtube\.com|youtu\.be)/watch.*?[?&]v=.*'
+ __config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting", "hd"),
+ ("fmt", "int", "FMT/ITAG Number (5-102, 0 for auto)", 0),
+ (".mp4", "bool", "Allow .mp4", True),
+ (".flv", "bool", "Allow .flv", True),
+ (".webm", "bool", "Allow .webm", False),
+ (".3gp", "bool", "Allow .3gp", False),
+ ("3d", "bool", "Prefer 3D", False)]
+
+ __description__ = """Youtube.com hoster plugin"""
+ __author_name__ = ("spoob", "zoidberg")
+ __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz")
+
+ FILE_URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')]
+
+ # Invalid characters that must be removed from the file name
+ invalidChars = u'\u2605:?><"|\\'
+
+ # name, width, height, quality ranking, 3D
+ formats = {5: (".flv", 400, 240, 1, False),
+ 6: (".flv", 640, 400, 4, False),
+ 17: (".3gp", 176, 144, 0, False),
+ 18: (".mp4", 480, 360, 2, False),
+ 22: (".mp4", 1280, 720, 8, False),
+ 43: (".webm", 640, 360, 3, False),
+ 34: (".flv", 640, 360, 4, False),
+ 35: (".flv", 854, 480, 6, False),
+ 36: (".3gp", 400, 240, 1, False),
+ 37: (".mp4", 1920, 1080, 9, False),
+ 38: (".mp4", 4096, 3072, 10, False),
+ 44: (".webm", 854, 480, 5, False),
+ 45: (".webm", 1280, 720, 7, False),
+ 46: (".webm", 1920, 1080, 9, False),
+ 82: (".mp4", 640, 360, 3, True),
+ 83: (".mp4", 400, 240, 1, True),
+ 84: (".mp4", 1280, 720, 8, True),
+ 85: (".mp4", 1920, 1080, 9, True),
+ 100: (".webm", 640, 360, 3, True),
+ 101: (".webm", 640, 360, 4, True),
+ 102: (".webm", 1280, 720, 8, True)}
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+
+ def process(self, pyfile):
+ pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
+ html = self.load(pyfile.url, decode=True)
+
+ if re.search(r'<div id="player-unavailable" class="\s*player-width player-height\s*">', html):
+ self.offline()
+
+ if "We have been receiving a large volume of requests from your network." in html:
+ self.tempOffline()
+
+ #get config
+ use3d = self.getConfig("3d")
+ if use3d:
+ quality = {"sd": 82, "hd": 84, "fullhd": 85, "240p": 83, "360p": 82,
+ "480p": 82, "720p": 84, "1080p": 85, "3072p": 85}
+ else:
+ quality = {"sd": 18, "hd": 22, "fullhd": 37, "240p": 5, "360p": 18,
+ "480p": 35, "720p": 22, "1080p": 37, "3072p": 38}
+ desired_fmt = self.getConfig("fmt")
+ if desired_fmt and desired_fmt not in self.formats:
+ self.logWarning("FMT %d unknown - using default." % desired_fmt)
+ desired_fmt = 0
+ if not desired_fmt:
+ desired_fmt = quality.get(self.getConfig("quality"), 18)
+
+ #parse available streams
+ streams = re.search(r'"url_encoded_fmt_stream_map": "(.*?)",', html).group(1)
+ streams = [x.split('\u0026') for x in streams.split(',')]
+ streams = [dict((y.split('=', 1)) for y in x) for x in streams]
+ streams = [(int(x['itag']), unquote(x['url'])) for x in streams]
+ #self.logDebug("Found links: %s" % streams)
+ self.logDebug("AVAILABLE STREAMS: %s" % [x[0] for x in streams])
+
+ #build dictionary of supported itags (3D/2D)
+ allowed = lambda x: self.getConfig(self.formats[x][0])
+ streams = [x for x in streams if x[0] in self.formats and allowed(x[0])]
+ if not streams:
+ self.fail("No available stream meets your preferences")
+ fmt_dict = dict([x for x in streams if self.formats[x[0]][4] == use3d] or streams)
+
+ self.logDebug("DESIRED STREAM: ITAG:%d (%s) %sfound, %sallowed" %
+ (desired_fmt, "%s %dx%d Q:%d 3D:%s" % self.formats[desired_fmt],
+ "" if desired_fmt in fmt_dict else "NOT ", "" if allowed(desired_fmt) else "NOT "))
+
+ #return fmt nearest to quality index
+ if desired_fmt in fmt_dict and allowed(desired_fmt):
+ fmt = desired_fmt
+ else:
+ sel = lambda x: self.formats[x][3] # select quality index
+ comp = lambda x, y: abs(sel(x) - sel(y))
+
+ self.logDebug("Choosing nearest fmt: %s" % [(x, allowed(x), comp(x, desired_fmt)) for x in fmt_dict.keys()])
+ fmt = reduce(lambda x, y: x if comp(x, desired_fmt) <= comp(y, desired_fmt) and
+ sel(x) > sel(y) else y, fmt_dict.keys())
+
+ self.logDebug("Chosen fmt: %s" % fmt)
+ url = fmt_dict[fmt]
+ self.logDebug("URL: %s" % url)
+
+ #set file name
+ file_suffix = self.formats[fmt][0] if fmt in self.formats else ".flv"
+ file_name_pattern = '<meta name="title" content="(.+?)">'
+ name = re.search(file_name_pattern, html).group(1).replace("/", "")
+
+ # Cleaning invalid characters from the file name
+ name = name.encode('ascii', 'replace')
+ for c in self.invalidChars:
+ name = name.replace(c, '_')
+
+ pyfile.name = html_unescape(name)
+
+ time = re.search(r"t=((\d+)m)?(\d+)s", pyfile.url)
+ ffmpeg = which("ffmpeg")
+ if ffmpeg and time:
+ m, s = time.groups()[1:]
+ if m is None:
+ m = "0"
+
+ pyfile.name += " (starting at %s:%s)" % (m, s)
+ pyfile.name += file_suffix
+
+ filename = self.download(url)
+
+ if ffmpeg and time:
+ inputfile = filename + "_"
+ os.rename(filename, inputfile)
+
+ subprocess.call([
+ ffmpeg,
+ "-ss", "00:%s:%s" % (m, s),
+ "-i", inputfile,
+ "-vcodec", "copy",
+ "-acodec", "copy",
+ filename])
+ os.remove(inputfile)
diff --git a/pyload/plugins/hoster/ZDF.py b/pyload/plugins/hoster/ZDF.py
new file mode 100644
index 000000000..d7bd5469a
--- /dev/null
+++ b/pyload/plugins/hoster/ZDF.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from xml.etree.ElementTree import fromstring
+
+from pyload.plugins.Hoster import Hoster
+
+
+# Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/)
+class ZDF(Hoster):
+ __name__ = "ZDF Mediathek"
+ __type__ = "hoster"
+ __version__ = "0.8"
+
+ __pattern__ = r'http://(?:www\.)?zdf\.de/ZDFmediathek/[^0-9]*([0-9]+)[^0-9]*'
+
+ __description__ = """ZDF.de hoster plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
+ XML_API = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=%i"
+
+
+ @staticmethod
+ def video_key(video):
+ return (
+ int(video.findtext("videoBitrate", "0")),
+ any(f.text == "progressive" for f in video.iter("facet")),
+ )
+
+ @staticmethod
+ def video_valid(video):
+ return video.findtext("url").startswith("http") and video.findtext("url").endswith(".mp4") and \
+ video.findtext("facets/facet").startswith("progressive")
+
+ @staticmethod
+ def get_id(url):
+ return int(re.search(r"[^0-9]*([0-9]{4,})[^0-9]*", url).group(1))
+
+ def process(self, pyfile):
+ xml = fromstring(self.load(self.XML_API % self.get_id(pyfile.url)))
+
+ status = xml.findtext("./status/statuscode")
+ if status != "ok":
+ self.fail("Error retrieving manifest.")
+
+ video = xml.find("video")
+ title = video.findtext("information/title")
+
+ pyfile.name = title
+
+ target_url = sorted((v for v in video.iter("formitaet") if self.video_valid(v)),
+ key=self.video_key)[-1].findtext("url")
+
+ self.download(target_url)
diff --git a/pyload/plugins/hoster/ZeveraCom.py b/pyload/plugins/hoster/ZeveraCom.py
new file mode 100644
index 000000000..f76290ea5
--- /dev/null
+++ b/pyload/plugins/hoster/ZeveraCom.py
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Hoster import Hoster
+
+
+class ZeveraCom(Hoster):
+ __name__ = "ZeveraCom"
+ __type__ = "hoster"
+ __version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?zevera.com/.*'
+
+ __description__ = """Zevera.com hoster plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = True
+ self.chunkLimit = 1
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError(_("Please enter your %s account or deactivate this plugin") % "zevera.com")
+ self.fail("No zevera.com account provided")
+
+ self.logDebug("zevera.com: Old URL: %s" % pyfile.url)
+
+ if self.account.getAPIData(self.req, cmd="checklink", olink=pyfile.url) != "Alive":
+ self.fail("Offline or not downloadable - contact Zevera support")
+
+ header = self.account.getAPIData(self.req, just_header=True, cmd="generatedownloaddirect", olink=pyfile.url)
+ if not "location" in header:
+ self.fail("Unable to initialize download - contact Zevera support")
+
+ self.download(header['location'], disposition=True)
+
+ check = self.checkDownload({"error": 'action="ErrorDownload.aspx'})
+ if check == "error":
+ self.fail("Error response received - contact Zevera support")
+
+ # BitAPI not used - defunct, probably abandoned by Zevera
+ #
+ # api_url = "http://zevera.com/API.ashx"
+ #
+ # def process(self, pyfile):
+ # if not self.account:
+ # self.logError(_("Please enter your zevera.com account or deactivate this plugin"))
+ # self.fail("No zevera.com account provided")
+ #
+ # self.logDebug("zevera.com: Old URL: %s" % pyfile.url)
+ #
+ # last_size = retries = 0
+ # olink = pyfile.url #quote(pyfile.url.encode('utf_8'))
+ #
+ # for _ in xrange(100):
+ # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_request', olink = olink)
+ # self.checkAPIErrors(self.retData)
+ #
+ # if self.retData['FileInfo']['StatusID'] == 100:
+ # break
+ # elif self.retData['FileInfo']['StatusID'] == 99:
+ # self.fail('Failed to initialize download (99)')
+ # else:
+ # if self.retData['FileInfo']['Progress']['BytesReceived'] <= last_size:
+ # if retries >= 6:
+ # self.fail('Failed to initialize download (%d)' % self.retData['FileInfo']['StatusID'] )
+ # retries += 1
+ # else:
+ # retries = 0
+ #
+ # last_size = self.retData['FileInfo']['Progress']['BytesReceived']
+ #
+ # self.setWait(self.retData['Update_Wait'])
+ # self.wait()
+ #
+ # pyfile.name = self.retData['FileInfo']['RealFileName']
+ # pyfile.size = self.retData['FileInfo']['FileSizeInBytes']
+ #
+ # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_start',
+ # FileID = self.retData['FileInfo']['FileID'])
+ # self.checkAPIErrors(self.retData)
+ #
+ # self.download(self.api_url, get = {
+ # 'cmd': "open_stream",
+ # 'login': self.account.loginname,
+ # 'pass': self.account.password,
+ # 'FileID': self.retData['FileInfo']['FileID'],
+ # 'startBytes': 0
+ # }
+ # )
+ #
+ # def checkAPIErrors(self, retData):
+ # if not retData:
+ # self.fail('Unknown API response')
+ #
+ # if retData['ErrorCode']:
+ # self.logError(retData['ErrorCode'], retData['ErrorMessage'])
+ # #self.fail('ERROR: ' + retData['ErrorMessage'])
+ #
+ # if pyfile.size / 1024000 > retData['AccountInfo']['AvailableTODAYTrafficForUseInMBytes']:
+ # self.logWarning("Not enough data left to download the file")
+ #
+ # def crazyDecode(self, ustring):
+ # # accepts decoded ie. unicode string - API response is double-quoted, double-utf8-encoded
+ # # no idea what the proper order of calling these functions would be :-/
+ # return html_unescape(unquote(unquote(ustring.replace(
+ # '@DELIMITER@','#'))).encode('raw_unicode_escape').decode('utf-8'))
diff --git a/pyload/plugins/hoster/ZippyshareCom.py b/pyload/plugins/hoster/ZippyshareCom.py
new file mode 100644
index 000000000..d6b7375e2
--- /dev/null
+++ b/pyload/plugins/hoster/ZippyshareCom.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://www13.zippyshare.com/v/18665333/file.html
+
+import re
+
+from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class ZippyshareCom(SimpleHoster):
+ __name__ = "ZippyshareCom"
+ __type__ = "hoster"
+ __version__ = "0.49"
+
+ __pattern__ = r'(?P<HOST>http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(?P<KEY>\d+)'
+
+ __description__ = """Zippyshare.com hoster plugin"""
+ __author_name__ = ("spoob", "zoidberg", "stickell", "skylab")
+ __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "development@sky-lab.de")
+
+ FILE_NAME_PATTERN = r'<title>Zippyshare\.com - (?P<N>[^<]+)</title>'
+ FILE_SIZE_PATTERN = r'>Size:</font>\s*<font [^>]*>(?P<S>[0-9.,]+) (?P<U>[kKMG]+)i?B</font><br />'
+ FILE_INFO_PATTERN = r'document\.getElementById\(\'dlbutton\'\)\.href = "[^;]*/(?P<N>[^"]+)";'
+ OFFLINE_PATTERN = r'>File does not exist on this server</div>'
+
+ SH_COOKIES = [(".zippyshare.com", "ziplocale", "en")]
+
+
+ def setup(self):
+ self.multiDL = True
+
+ def handleFree(self):
+ url = self.get_file_url()
+ if not url:
+ self.fail("Download URL not found.")
+ self.logDebug("Download URL: %s" % url)
+ self.download(url)
+
+ def get_file_url(self):
+ """returns the absolute downloadable filepath"""
+ url_parts = re.search(r'(addthis:url="(http://www(\d+).zippyshare.com/v/(\d*)/file.html))', self.html)
+ number = url_parts.group(4)
+ check = re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html)
+ if check:
+ a = int(re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html).group(3))
+ k = int(re.search(r'<script type="text/javascript">([^<]*?)(\d*%(\d*))', self.html).group(3))
+ checksum = ((a + 3) % k) * ((a + 3) % 3) + 18
+ else:
+ # This might work but is insecure
+ # checksum = eval(re.search("((\d*)\s\%\s(\d*)\s\+\s(\d*)\s\%\s(\d*))", self.html).group(0))
+
+ m = re.search(r"((?P<a>\d*)\s%\s(?P<b>\d*)\s\+\s(?P<c>\d*)\s%\s(?P<k>\d*))", self.html)
+ if m is None:
+ self.parseError("Unable to detect values to calculate direct link")
+ a = int(m.group("a"))
+ b = int(m.group("b"))
+ c = int(m.group("c"))
+ k = int(m.group("k"))
+ if a == c:
+ checksum = ((a % b) + (a % k))
+ else:
+ checksum = ((a % b) + (c % k))
+
+ self.logInfo('Checksum: %s' % checksum)
+
+ filename = re.search(r'>Name:</font>\s*<font [^>]*>(?P<N>[^<]+)</font><br />', self.html).group('N')
+
+ url = "/d/%s/%s/%s" % (number, checksum, filename)
+ self.logInfo(self.file_info['HOST'] + url)
+ return self.file_info['HOST'] + url
+
+
+getInfo = create_getInfo(ZippyshareCom)
diff --git a/module/plugins/hoster/__init__.py b/pyload/plugins/hoster/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/hoster/__init__.py
+++ b/pyload/plugins/hoster/__init__.py
diff --git a/module/plugins/internal/AbstractExtractor.py b/pyload/plugins/internal/AbstractExtractor.py
index d1d1a09cb..d1d1a09cb 100644
--- a/module/plugins/internal/AbstractExtractor.py
+++ b/pyload/plugins/internal/AbstractExtractor.py
diff --git a/module/plugins/internal/CaptchaService.py b/pyload/plugins/internal/CaptchaService.py
index b247ba654..b247ba654 100644
--- a/module/plugins/internal/CaptchaService.py
+++ b/pyload/plugins/internal/CaptchaService.py
diff --git a/pyload/plugins/internal/DeadCrypter.py b/pyload/plugins/internal/DeadCrypter.py
new file mode 100644
index 000000000..ea9c414cb
--- /dev/null
+++ b/pyload/plugins/internal/DeadCrypter.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Crypter import Crypter as _Crypter
+
+
+class DeadCrypter(_Crypter):
+ __name__ = "DeadCrypter"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = None
+
+ __description__ = """Crypter is no longer available"""
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+
+ def setup(self):
+ self.fail("Crypter is no longer available")
diff --git a/pyload/plugins/internal/DeadHoster.py b/pyload/plugins/internal/DeadHoster.py
new file mode 100644
index 000000000..0b2398020
--- /dev/null
+++ b/pyload/plugins/internal/DeadHoster.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.Hoster import Hoster as _Hoster
+
+
+def create_getInfo(plugin):
+
+ def getInfo(urls):
+ yield [('#N/A: ' + url, 0, 1, url) for url in urls]
+
+ return getInfo
+
+
+class DeadHoster(_Hoster):
+ __name__ = "DeadHoster"
+ __type__ = "hoster"
+ __version__ = "0.11"
+
+ __pattern__ = None
+
+ __description__ = """Hoster is no longer available"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+
+ def setup(self):
+ self.fail("Hoster is no longer available")
diff --git a/pyload/plugins/internal/MultiHoster.py b/pyload/plugins/internal/MultiHoster.py
new file mode 100644
index 000000000..d99ae6ff9
--- /dev/null
+++ b/pyload/plugins/internal/MultiHoster.py
@@ -0,0 +1,192 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Hook import Hook
+from pyload.utils import remove_chars
+
+
+class MultiHoster(Hook):
+ __name__ = "MultiHoster"
+ __type__ = "hook"
+ __version__ = "0.20"
+
+ __description__ = """Generic MultiHoster plugin"""
+ __author_name__ = "pyLoad Team"
+ __author_mail__ = "admin@pyload.org"
+
+ replacements = [("2shared.com", "twoshared.com"), ("4shared.com", "fourshared.com"), ("cloudnator.com", "shragle.com"),
+ ("ifile.it", "filecloud.io"), ("easy-share.com", "crocko.com"), ("freakshare.net", "freakshare.com"),
+ ("hellshare.com", "hellshare.cz"), ("share-rapid.cz", "sharerapid.com"), ("sharerapid.cz", "sharerapid.com"),
+ ("ul.to", "uploaded.to"), ("uploaded.net", "uploaded.to"), ("1fichier.com", "onefichier.com")]
+ ignored = []
+ interval = 24 * 60 * 60 #: reload hosters daily
+
+
+ def setup(self):
+ self.hosters = []
+ self.supported = []
+ self.new_supported = []
+
+ def getConfig(self, option, default=''):
+ """getConfig with default value - subclass may not implements all config options"""
+ try:
+ # Fixed loop due to getConf deprecation in 0.4.10
+ return super(MultiHoster, self).getConfig(option)
+ except KeyError:
+ return default
+
+ def getHosterCached(self):
+ if not self.hosters:
+ try:
+ hosterSet = self.toHosterSet(self.getHoster()) - set(self.ignored)
+ except Exception, e:
+ self.logError("%s" % str(e))
+ return []
+
+ try:
+ configMode = self.getConfig('hosterListMode', 'all')
+ if configMode in ("listed", "unlisted"):
+ configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(','))
+
+ if configMode == "listed":
+ hosterSet &= configSet
+ else:
+ hosterSet -= configSet
+
+ except Exception, e:
+ self.logError("%s" % str(e))
+
+ self.hosters = list(hosterSet)
+
+ return self.hosters
+
+ def toHosterSet(self, hosters):
+ hosters = set((str(x).strip().lower() for x in hosters))
+
+ for rep in self.replacements:
+ if rep[0] in hosters:
+ hosters.remove(rep[0])
+ hosters.add(rep[1])
+
+ hosters.discard('')
+ return hosters
+
+ def getHoster(self):
+ """Load list of supported hoster
+
+ :return: List of domain names
+ """
+ raise NotImplementedError
+
+ def coreReady(self):
+ if self.cb:
+ self.core.scheduler.removeJob(self.cb)
+
+ self.setConfig("activated", True) #: config not in sync after plugin reload
+
+ cfg_interval = self.getConfig("interval", None) #: reload interval in hours
+ if cfg_interval is not None:
+ self.interval = cfg_interval * 60 * 60
+
+ if self.interval:
+ self._periodical()
+ else:
+ self.periodical()
+
+ def initPeriodical(self):
+ pass
+
+ def periodical(self):
+ """reload hoster list periodically"""
+ self.logInfo("Reloading supported hoster list")
+
+ old_supported = self.supported
+ self.supported, self.new_supported, self.hosters = [], [], []
+
+ self.overridePlugins()
+
+ old_supported = [hoster for hoster in old_supported if hoster not in self.supported]
+ if old_supported:
+ self.logDebug("UNLOAD: %s" % ", ".join(old_supported))
+ for hoster in old_supported:
+ self.unloadHoster(hoster)
+
+ def overridePlugins(self):
+ pluginMap = {}
+ for name in self.core.pluginManager.hosterPlugins.keys():
+ pluginMap[name.lower()] = name
+
+ accountList = [name.lower() for name, data in self.core.accountManager.accounts.items() if data]
+ excludedList = []
+
+ for hoster in self.getHosterCached():
+ name = remove_chars(hoster.lower(), "-.")
+
+ if name in accountList:
+ excludedList.append(hoster)
+ else:
+ if name in pluginMap:
+ self.supported.append(pluginMap[name])
+ else:
+ self.new_supported.append(hoster)
+
+ if not self.supported and not self.new_supported:
+ self.logError(_("No Hoster loaded"))
+ return
+
+ module = self.core.pluginManager.getPlugin(self.__name__)
+ klass = getattr(module, self.__name__)
+
+ # inject plugin plugin
+ self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported)))
+ for hoster in self.supported:
+ dict = self.core.pluginManager.hosterPlugins[hoster]
+ dict['new_module'] = module
+ dict['new_name'] = self.__name__
+
+ if excludedList:
+ self.logInfo("The following hosters were not overwritten - account exists: %s" % ", ".join(sorted(excludedList)))
+
+ if self.new_supported:
+ self.logDebug("New Hosters: %s" % ", ".join(sorted(self.new_supported)))
+
+ # create new regexp
+ regexp = r".*(%s).*" % "|".join([x.replace(".", "\\.") for x in self.new_supported])
+ if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__:
+ regexp = r"%s|%s" % (klass.__pattern__, regexp)
+
+ self.logDebug("Regexp: %s" % regexp)
+
+ dict = self.core.pluginManager.hosterPlugins[self.__name__]
+ dict['pattern'] = regexp
+ dict['re'] = re.compile(regexp)
+
+ def unloadHoster(self, hoster):
+ dict = self.core.pluginManager.hosterPlugins[hoster]
+ if "module" in dict:
+ del dict['module']
+
+ if "new_module" in dict:
+ del dict['new_module']
+ del dict['new_name']
+
+ def unload(self):
+ """Remove override for all hosters. Scheduler job is removed by hookmanager"""
+ for hoster in self.supported:
+ self.unloadHoster(hoster)
+
+ # reset pattern
+ klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__)
+ dict = self.core.pluginManager.hosterPlugins[self.__name__]
+ dict['pattern'] = getattr(klass, "__pattern__", r'^unmatchable$')
+ dict['re'] = re.compile(dict['pattern'])
+
+ def downloadFailed(self, pyfile):
+ """remove plugin override if download fails but not if file is offline/temp.offline"""
+ if pyfile.hasStatus("failed") and self.getConfig("unloadFailing", True):
+ hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname]
+ if "new_name" in hdict and hdict['new_name'] == self.__name__:
+ self.logDebug("Unload MultiHoster", pyfile.pluginname, hdict)
+ self.unloadHoster(pyfile.pluginname)
+ pyfile.setStatus("queued")
diff --git a/pyload/plugins/internal/SimpleCrypter.py b/pyload/plugins/internal/SimpleCrypter.py
new file mode 100644
index 000000000..6e639c946
--- /dev/null
+++ b/pyload/plugins/internal/SimpleCrypter.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from pyload.plugins.Crypter import Crypter
+from pyload.plugins.internal.SimpleHoster import PluginParseError, replace_patterns, set_cookies
+from pyload.utils import html_unescape
+
+
+class SimpleCrypter(Crypter):
+ __name__ = "SimpleCrypter"
+ __type__ = "crypter"
+ __version__ = "0.10"
+
+ __pattern__ = None
+
+ __description__ = """Simple decrypter plugin"""
+ __author_name__ = ("stickell", "zoidberg", "Walter Purcaro")
+ __author_mail__ = ("l.stickell@yahoo.it", "zoidberg@mujmail.cz", "vuolter@gmail.com")
+
+ """
+ Following patterns should be defined by each crypter:
+
+ LINK_PATTERN: group(1) must be a download link or a regex to catch more links
+ example: LINK_PATTERN = r'<div class="link"><a href="(http://speedload.org/\w+)'
+
+ TITLE_PATTERN: (optional) The group defined by 'title' should be the title
+ example: TITLE_PATTERN = r'<title>Files of: (?P<title>[^<]+) folder</title>'
+
+ OFFLINE_PATTERN: (optional) Checks if the file is yet available online
+ example: OFFLINE_PATTERN = r'File (deleted|not found)'
+
+ TEMP_OFFLINE_PATTERN: (optional) Checks if the file is temporarily offline
+ example: TEMP_OFFLINE_PATTERN = r'Server maintainance'
+
+
+ If it's impossible to extract the links using the LINK_PATTERN only you can override the getLinks method.
+
+ If the links are disposed on multiple pages you need to define a pattern:
+
+ PAGES_PATTERN: The group defined by 'pages' must be the total number of pages
+ example: PAGES_PATTERN = r'Pages: (?P<pages>\d+)'
+
+ and a function:
+
+ loadPage(self, page_n):
+ return the html of the page number 'page_n'
+ """
+
+ URL_REPLACEMENTS = []
+
+ SH_COOKIES = True # or False or list of tuples [(domain, name, value)]
+
+
+ def setup(self):
+ if isinstance(self.SH_COOKIES, list):
+ set_cookies(self.req.cj, self.SH_COOKIES)
+
+ def decrypt(self, pyfile):
+ pyfile.url = replace_patterns(pyfile.url, self.URL_REPLACEMENTS)
+
+ self.html = self.load(pyfile.url, decode=True)
+
+ self.checkOnline()
+
+ package_name, folder_name = self.getPackageNameAndFolder()
+
+ self.package_links = self.getLinks()
+
+ if hasattr(self, 'PAGES_PATTERN') and hasattr(self, 'loadPage'):
+ self.handleMultiPages()
+
+ self.logDebug('Package has %d links' % len(self.package_links))
+
+ if self.package_links:
+ self.packages = [(package_name, self.package_links, folder_name)]
+ else:
+ self.fail('Could not extract any links')
+
+ def getLinks(self):
+ """
+ Returns the links extracted from self.html
+ You should override this only if it's impossible to extract links using only the LINK_PATTERN.
+ """
+ return re.findall(self.LINK_PATTERN, self.html)
+
+ def checkOnline(self):
+ if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, self.html):
+ self.offline()
+ elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, self.html):
+ self.tempOffline()
+
+ def getPackageNameAndFolder(self):
+ if hasattr(self, 'TITLE_PATTERN'):
+ m = re.search(self.TITLE_PATTERN, self.html)
+ if m:
+ name = folder = html_unescape(m.group('title').strip())
+ self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder))
+ return name, folder
+
+ name = self.pyfile.package().name
+ folder = self.pyfile.package().folder
+ self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
+ return name, folder
+
+ def handleMultiPages(self):
+ pages = re.search(self.PAGES_PATTERN, self.html)
+ if pages:
+ pages = int(pages.group('pages'))
+ else:
+ pages = 1
+
+ for p in xrange(2, pages + 1):
+ self.html = self.loadPage(p)
+ self.package_links += self.getLinks()
+
+ def parseError(self, msg):
+ raise PluginParseError(msg)
diff --git a/pyload/plugins/internal/SimpleHoster.py b/pyload/plugins/internal/SimpleHoster.py
new file mode 100644
index 000000000..ca320732f
--- /dev/null
+++ b/pyload/plugins/internal/SimpleHoster.py
@@ -0,0 +1,292 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import time
+from urlparse import urlparse
+
+from pyload.network.CookieJar import CookieJar
+from pyload.network.RequestFactory import getURL
+from pyload.plugins.Hoster import Hoster
+from pyload.utils import fixup, html_unescape, parseFileSize
+
+
+def replace_patterns(string, ruleslist):
+ for r in ruleslist:
+ rf, rt = r
+ string = re.sub(rf, rt, string)
+ #self.logDebug(rf, rt, string)
+ return string
+
+
+def set_cookies(cj, cookies):
+ for cookie in cookies:
+ if isinstance(cookie, tuple) and len(cookie) == 3:
+ domain, name, value = cookie
+ cj.setCookie(domain, name, value)
+
+
+def parseHtmlTagAttrValue(attr_name, tag):
+ m = re.search(r"%s\s*=\s*([\"']?)((?<=\")[^\"]+|(?<=')[^']+|[^>\s\"'][^>\s]*)\1" % attr_name, tag, re.I)
+ return m.group(2) if m else None
+
+
+def parseHtmlForm(attr_str, html, input_names=None):
+ for form in re.finditer(r"(?P<tag><form[^>]*%s[^>]*>)(?P<content>.*?)</?(form|body|html)[^>]*>" % attr_str,
+ html, re.S | re.I):
+ inputs = {}
+ action = parseHtmlTagAttrValue("action", form.group('tag'))
+ for inputtag in re.finditer(r'(<(input|textarea)[^>]*>)([^<]*(?=</\2)|)', form.group('content'), re.S | re.I):
+ name = parseHtmlTagAttrValue("name", inputtag.group(1))
+ if name:
+ value = parseHtmlTagAttrValue("value", inputtag.group(1))
+ if not value:
+ inputs[name] = inputtag.group(3) or ''
+ else:
+ inputs[name] = value
+
+ if isinstance(input_names, dict):
+ # check input attributes
+ for key, val in input_names.items():
+ if key in inputs:
+ if isinstance(val, basestring) and inputs[key] == val:
+ continue
+ elif isinstance(val, tuple) and inputs[key] in val:
+ continue
+ elif hasattr(val, "search") and re.match(val, inputs[key]):
+ continue
+ break # attibute value does not match
+ else:
+ break # attibute name does not match
+ else:
+ return action, inputs # passed attribute check
+ else:
+ # no attribute check
+ return action, inputs
+
+ return {}, None # no matching form found
+
+
+def parseFileInfo(self, url='', html=''):
+ info = {"name": url, "size": 0, "status": 3}
+
+ if hasattr(self, "pyfile"):
+ url = self.pyfile.url
+
+ if hasattr(self, "req") and self.req.http.code == '404':
+ info['status'] = 1
+ else:
+ if not html and hasattr(self, "html"):
+ html = self.html
+ if isinstance(self.SH_BROKEN_ENCODING, (str, unicode)):
+ html = unicode(html, self.SH_BROKEN_ENCODING)
+ if hasattr(self, "html"):
+ self.html = html
+
+ if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, html):
+ info['status'] = 1
+ elif hasattr(self, "FILE_OFFLINE_PATTERN") and re.search(self.FILE_OFFLINE_PATTERN, html): #@TODO: Remove in 0.4.10
+ info['status'] = 1
+ elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, html):
+ info['status'] = 6
+ else:
+ online = False
+ try:
+ info.update(re.match(self.__pattern__, url).groupdict())
+ except:
+ pass
+
+ for pattern in ("FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"):
+ try:
+ info.update(re.search(getattr(self, pattern), html).groupdict())
+ online = True
+ except AttributeError:
+ continue
+
+ if online:
+ # File online, return name and size
+ info['status'] = 2
+ if 'N' in info:
+ info['name'] = replace_patterns(info['N'], self.FILE_NAME_REPLACEMENTS)
+ if 'S' in info:
+ size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'],
+ self.FILE_SIZE_REPLACEMENTS)
+ info['size'] = parseFileSize(size)
+ elif isinstance(info['size'], (str, unicode)):
+ if 'units' in info:
+ info['size'] += info['units']
+ info['size'] = parseFileSize(info['size'])
+
+ if hasattr(self, "file_info"):
+ self.file_info = info
+
+ return info['name'], info['size'], info['status'], url
+
+
+def create_getInfo(plugin):
+
+ def getInfo(urls):
+ for url in urls:
+ cj = CookieJar(plugin.__name__)
+ if isinstance(plugin.SH_COOKIES, list):
+ set_cookies(cj, plugin.SH_COOKIES)
+ file_info = parseFileInfo(plugin, url, getURL(replace_patterns(url, plugin.FILE_URL_REPLACEMENTS),
+ decode=not plugin.SH_BROKEN_ENCODING, cookies=cj))
+ yield file_info
+
+ return getInfo
+
+
+def timestamp():
+ return int(time() * 1000)
+
+
+class PluginParseError(Exception):
+
+ def __init__(self, msg):
+ Exception.__init__(self)
+ self.value = 'Parse error (%s) - plugin may be out of date' % msg
+
+ def __str__(self):
+ return repr(self.value)
+
+
+class SimpleHoster(Hoster):
+ __name__ = "SimpleHoster"
+ __type__ = "hoster"
+ __version__ = "0.35"
+
+ __pattern__ = None
+
+ __description__ = """Simple hoster plugin"""
+ __author_name__ = ("zoidberg", "stickell")
+ __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it")
+
+ """
+ Following patterns should be defined by each hoster:
+
+ FILE_INFO_PATTERN: Name and Size of the file
+ example: FILE_INFO_PATTERN = r'(?P<N>file_name) (?P<S>file_size) (?P<U>size_unit)'
+ or
+ FILE_NAME_PATTERN: Name that will be set for the file
+ example: FILE_NAME_PATTERN = r'(?P<N>file_name)'
+ FILE_SIZE_PATTERN: Size that will be checked for the file
+ example: FILE_SIZE_PATTERN = r'(?P<S>file_size) (?P<U>size_unit)'
+
+ OFFLINE_PATTERN: Checks if the file is yet available online
+ example: OFFLINE_PATTERN = r'File (deleted|not found)'
+
+ TEMP_OFFLINE_PATTERN: Checks if the file is temporarily offline
+ example: TEMP_OFFLINE_PATTERN = r'Server maintainance'
+
+ PREMIUM_ONLY_PATTERN: (optional) Checks if the file can be downloaded only with a premium account
+ example: PREMIUM_ONLY_PATTERN = r'Premium account required'
+ """
+
+ FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup)]
+ FILE_SIZE_REPLACEMENTS = []
+ FILE_URL_REPLACEMENTS = []
+
+ SH_BROKEN_ENCODING = False # Set to True or encoding name if encoding in http header is not correct
+ SH_COOKIES = True # or False or list of tuples [(domain, name, value)]
+ SH_CHECK_TRAFFIC = False # True = force check traffic left for a premium account
+
+
+ def init(self):
+ self.file_info = {}
+
+ def setup(self):
+ self.resumeDownload = self.multiDL = self.premium
+ if isinstance(self.SH_COOKIES, list):
+ set_cookies(self.req.cj, self.SH_COOKIES)
+
+ def process(self, pyfile):
+ pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS)
+ self.req.setOption("timeout", 120)
+ # Due to a 0.4.9 core bug self.load would keep previous cookies even if overridden by cookies parameter.
+ # Workaround using getURL. Can be reverted in 0.5 as the cookies bug has been fixed.
+ self.html = getURL(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
+ premium_only = hasattr(self, 'PREMIUM_ONLY_PATTERN') and re.search(self.PREMIUM_ONLY_PATTERN, self.html)
+ if not premium_only: # Usually premium only pages doesn't show the file information
+ self.getFileInfo()
+
+ if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):
+ self.handlePremium()
+ elif premium_only:
+ self.fail("This link require a premium account")
+ else:
+ # This line is required due to the getURL workaround. Can be removed in 0.5
+ self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)
+ self.handleFree()
+
+ def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False):
+ if type(url) == unicode:
+ url = url.encode('utf8')
+ return Hoster.load(self, url=url, get=get, post=post, ref=ref, cookies=cookies,
+ just_header=just_header, decode=decode)
+
+ def getFileInfo(self):
+ self.logDebug("URL: %s" % self.pyfile.url)
+
+ name, size, status = parseFileInfo(self)[:3]
+
+ if status == 1:
+ self.offline()
+ elif status == 6:
+ self.tempOffline()
+ elif status != 2:
+ self.logDebug(self.file_info)
+ self.parseError('File info')
+
+ if name:
+ self.pyfile.name = name
+ else:
+ self.pyfile.name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1])
+
+ if size:
+ self.pyfile.size = size
+ else:
+ self.logError("File size not parsed")
+
+ self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size))
+ return self.file_info
+
+ def handleFree(self):
+ self.fail("Free download not implemented")
+
+ def handlePremium(self):
+ self.fail("Premium download not implemented")
+
+ def parseError(self, msg):
+ raise PluginParseError(msg)
+
+ def longWait(self, wait_time=None, max_tries=3):
+ if wait_time and isinstance(wait_time, (int, long, float)):
+ time_str = "%dh %dm" % divmod(wait_time / 60, 60)
+ else:
+ wait_time = 900
+ time_str = "(unknown time)"
+ max_tries = 100
+
+ self.logInfo("Download limit reached, reconnect or wait %s" % time_str)
+
+ self.setWait(wait_time, True)
+ self.wait()
+ self.retry(max_tries=max_tries, reason="Download limit reached")
+
+ def parseHtmlForm(self, attr_str='', input_names=None):
+ return parseHtmlForm(attr_str, self.html, input_names)
+
+ def checkTrafficLeft(self):
+ traffic = self.account.getAccountInfo(self.user, True)['trafficleft']
+ if traffic == -1:
+ return True
+ size = self.pyfile.size / 1024
+ self.logInfo("Filesize: %i KiB, Traffic left for user %s: %i KiB" % (size, self.user, traffic))
+ return size <= traffic
+
+ # TODO: Remove in 0.5
+ def wait(self, seconds=False, reconnect=False):
+ if seconds:
+ self.setWait(seconds, reconnect)
+ super(SimpleHoster, self).wait()
diff --git a/pyload/plugins/internal/UnRar.py b/pyload/plugins/internal/UnRar.py
new file mode 100644
index 000000000..ed8478a3a
--- /dev/null
+++ b/pyload/plugins/internal/UnRar.py
@@ -0,0 +1,212 @@
+# -*- coding: utf-8 -*-
+
+import os
+import re
+
+from glob import glob
+from os.path import join
+from string import digits
+from subprocess import Popen, PIPE
+
+from pyload.plugins.internal.AbstractExtractor import AbtractExtractor, WrongPassword, ArchiveError, CRCError
+from pyload.utils import safe_join, decode
+
+
+class UnRar(AbtractExtractor):
+ __name__ = "UnRar"
+ __version__ = "0.16"
+
+ __description__ = """Rar extractor plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+ CMD = "unrar"
+
+ # there are some more uncovered rar formats
+ re_version = re.compile(r"(UNRAR 5[\.\d]+(.*?)freeware)")
+ re_splitfile = re.compile(r"(.*)\.part(\d+)\.rar$", re.I)
+ re_partfiles = re.compile(r".*\.(rar|r[0-9]+)", re.I)
+ re_filelist = re.compile(r"(.+)\s+(\d+)\s+(\d+)\s+")
+ re_filelist5 = re.compile(r"(.+)\s+(\d+)\s+\d\d-\d\d-\d\d\s+\d\d:\d\d\s+(.+)")
+ re_wrongpwd = re.compile("(Corrupt file or wrong password|password incorrect)", re.I)
+
+
+ @staticmethod
+ def checkDeps():
+ if os.name == "nt":
+ UnRar.CMD = join(pypath, "UnRAR.exe")
+ p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
+ p.communicate()
+ else:
+ try:
+ p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
+ p.communicate()
+ except OSError:
+
+ # fallback to rar
+ UnRar.CMD = "rar"
+ p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE)
+ p.communicate()
+
+ return True
+
+ @staticmethod
+ def getTargets(files_ids):
+ result = []
+
+ for file, id in files_ids:
+ if not file.endswith(".rar"):
+ continue
+
+ match = UnRar.re_splitfile.findall(file)
+ if match:
+ # only add first parts
+ if int(match[0][1]) == 1:
+ result.append((file, id))
+ else:
+ result.append((file, id))
+
+ return result
+
+ def init(self):
+ self.passwordProtected = False
+ self.headerProtected = False #: list files will not work without password
+ self.smallestFile = None #: small file to test passwords
+ self.password = "" #: save the correct password
+
+ def checkArchive(self):
+ p = self.call_unrar("l", "-v", self.file)
+ out, err = p.communicate()
+ if self.re_wrongpwd.search(err):
+ self.passwordProtected = True
+ self.headerProtected = True
+ return True
+
+ # output only used to check if passworded files are present
+ if self.re_version.search(out):
+ for attr, size, name in self.re_filelist5.findall(out):
+ if attr.startswith("*"):
+ self.passwordProtected = True
+ return True
+ else:
+ for name, size, packed in self.re_filelist.findall(out):
+ if name.startswith("*"):
+ self.passwordProtected = True
+ return True
+
+ self.listContent()
+ if not self.files:
+ raise ArchiveError("Empty Archive")
+
+ return False
+
+ def checkPassword(self, password):
+ # at this point we can only verify header protected files
+ if self.headerProtected:
+ p = self.call_unrar("l", "-v", self.file, password=password)
+ out, err = p.communicate()
+ if self.re_wrongpwd.search(err):
+ return False
+
+ return True
+
+ def extract(self, progress, password=None):
+ command = "x" if self.fullpath else "e"
+
+ p = self.call_unrar(command, self.file, self.out, password=password)
+ renice(p.pid, self.renice)
+
+ progress(0)
+ progressstring = ""
+ while True:
+ c = p.stdout.read(1)
+ # quit loop on eof
+ if not c:
+ break
+ # reading a percentage sign -> set progress and restart
+ if c == '%':
+ progress(int(progressstring))
+ progressstring = ""
+ # not reading a digit -> therefore restart
+ elif c not in digits:
+ progressstring = ""
+ # add digit to progressstring
+ else:
+ progressstring = progressstring + c
+ progress(100)
+
+ # retrieve stderr
+ err = p.stderr.read()
+
+ if "CRC failed" in err and not password and not self.passwordProtected:
+ raise CRCError
+ elif "CRC failed" in err:
+ raise WrongPassword
+ if err.strip(): #: raise error if anything is on stderr
+ raise ArchiveError(err.strip())
+ if p.returncode:
+ raise ArchiveError("Process terminated")
+
+ if not self.files:
+ self.password = password
+ self.listContent()
+
+ def getDeleteFiles(self):
+ if ".part" in self.file:
+ return glob(re.sub("(?<=\.part)([01]+)", "*", self.file, re.IGNORECASE))
+ # get files which matches .r* and filter unsuited files out
+ parts = glob(re.sub(r"(?<=\.r)ar$", "*", self.file, re.IGNORECASE))
+ return filter(lambda x: self.re_partfiles.match(x), parts)
+
+ def listContent(self):
+ command = "vb" if self.fullpath else "lb"
+ p = self.call_unrar(command, "-v", self.file, password=self.password)
+ out, err = p.communicate()
+
+ if "Cannot open" in err:
+ raise ArchiveError("Cannot open file")
+
+ if err.strip(): #: only log error at this point
+ self.m.logError(err.strip())
+
+ result = set()
+
+ for f in decode(out).splitlines():
+ f = f.strip()
+ result.add(safe_join(self.out, f))
+
+ self.files = result
+
+ def call_unrar(self, command, *xargs, **kwargs):
+ args = []
+ # overwrite flag
+ args.append("-o+") if self.overwrite else args.append("-o-")
+
+ if self.excludefiles:
+ for word in self.excludefiles.split(';'):
+ args.append("-x%s" % word)
+
+ # assume yes on all queries
+ args.append("-y")
+
+ # set a password
+ if "password" in kwargs and kwargs['password']:
+ args.append("-p%s" % kwargs['password'])
+ else:
+ args.append("-p-")
+
+ # NOTE: return codes are not reliable, some kind of threading, cleanup whatever issue
+ call = [self.CMD, command] + args + list(xargs)
+ self.m.logDebug(" ".join(call))
+
+ p = Popen(call, stdout=PIPE, stderr=PIPE)
+
+ return p
+
+
+def renice(pid, value):
+ if os.name != "nt" and value:
+ try:
+ Popen(["renice", str(value), str(pid)], stdout=PIPE, stderr=PIPE, bufsize=-1)
+ except:
+ print "Renice failed"
diff --git a/pyload/plugins/internal/UnZip.py b/pyload/plugins/internal/UnZip.py
new file mode 100644
index 000000000..65a5a82bb
--- /dev/null
+++ b/pyload/plugins/internal/UnZip.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import zipfile
+
+from pyload.plugins.internal.AbstractExtractor import AbtractExtractor
+
+
+class UnZip(AbtractExtractor):
+ __name__ = "UnZip"
+ __version__ = "0.1"
+
+ __description__ = """Zip extractor plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ @staticmethod
+ def checkDeps():
+ return sys.version_info[:2] >= (2, 6)
+
+ @staticmethod
+ def getTargets(files_ids):
+ result = []
+
+ for file, id in files_ids:
+ if file.endswith(".zip"):
+ result.append((file, id))
+
+ return result
+
+ def extract(self, progress, password=None):
+ z = zipfile.ZipFile(self.file)
+ self.files = z.namelist()
+ z.extractall(self.out)
+
+ def getDeleteFiles(self):
+ return [self.file]
diff --git a/pyload/plugins/internal/XFSPAccount.py b/pyload/plugins/internal/XFSPAccount.py
new file mode 100644
index 000000000..aec9b7dbc
--- /dev/null
+++ b/pyload/plugins/internal/XFSPAccount.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from time import mktime, strptime
+
+from pyload.plugins.Account import Account
+from pyload.plugins.internal.SimpleHoster import parseHtmlForm
+from pyload.utils import parseFileSize
+
+
+class XFSPAccount(Account):
+ __name__ = "XFSPAccount"
+ __type__ = "account"
+ __version__ = "0.06"
+
+ __description__ = """XFileSharingPro base account plugin"""
+ __author_name__ = "zoidberg"
+ __author_mail__ = "zoidberg@mujmail.cz"
+
+ MAIN_PAGE = None
+
+ VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire:</TD><TD><b>([^<]+)</b>'
+ TRAFFIC_LEFT_PATTERN = r'>Traffic available today:</TD><TD><b>([^<]+)</b>'
+ LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|>Error<'
+ PREMIUM_PATTERN = r'>Renew premium<'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load(self.MAIN_PAGE + "?op=my_account", decode=True)
+
+ validuntil = trafficleft = None
+ premium = True if re.search(self.PREMIUM_PATTERN, html) else False
+
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+ if m:
+ premium = True
+ trafficleft = -1
+ try:
+ self.logDebug(m.group(1))
+ validuntil = mktime(strptime(m.group(1), "%d %B %Y"))
+ except Exception, e:
+ self.logError(e)
+ else:
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ if m:
+ trafficleft = m.group(1)
+ if "Unlimited" in trafficleft:
+ premium = True
+ else:
+ trafficleft = parseFileSize(trafficleft) / 1024
+
+ return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}
+
+ def login(self, user, data, req):
+ html = req.load('%slogin.html' % self.MAIN_PAGE, decode=True)
+
+ action, inputs = parseHtmlForm('name="FL"', html)
+ if not inputs:
+ inputs = {"op": "login",
+ "redirect": self.MAIN_PAGE}
+
+ inputs.update({"login": user,
+ "password": data['password']})
+
+ html = req.load(self.MAIN_PAGE, post=inputs, decode=True)
+
+ if re.search(self.LOGIN_FAIL_PATTERN, html):
+ self.wrongPassword()
diff --git a/module/plugins/internal/__init__.py b/pyload/plugins/internal/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/internal/__init__.py
+++ b/pyload/plugins/internal/__init__.py
diff --git a/pyload/plugins/ocr/GigasizeCom.py b/pyload/plugins/ocr/GigasizeCom.py
new file mode 100644
index 000000000..b139c304e
--- /dev/null
+++ b/pyload/plugins/ocr/GigasizeCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.OCR import OCR
+
+
+class GigasizeCom(OCR):
+ __name__ = "GigasizeCom"
+ __type__ = "ocr"
+ __version__ = "0.1"
+
+ __description__ = """Gigasize.com ocr plugin"""
+ __author_name__ = "pyLoad Team"
+ __author_mail__ = "admin@pyload.org"
+
+
+ def __init__(self):
+ OCR.__init__(self)
+
+ def get_captcha(self, image):
+ self.load_image(image)
+ self.threshold(2.8)
+ self.run_tesser(True, False, False, True)
+ return self.result_captcha
diff --git a/pyload/plugins/ocr/LinksaveIn.py b/pyload/plugins/ocr/LinksaveIn.py
new file mode 100644
index 000000000..1eb8bd796
--- /dev/null
+++ b/pyload/plugins/ocr/LinksaveIn.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+
+from glob import glob
+from PIL import Image
+from os import sep
+from os.path import abspath, dirname
+
+from pyload.plugins.OCR import OCR
+
+
+class LinksaveIn(OCR):
+ __name__ = "LinksaveIn"
+ __type__ = "ocr"
+ __version__ = "0.1"
+
+ __description__ = """Linksave.in ocr plugin"""
+ __author_name__ = "pyLoad Team"
+ __author_mail__ = "admin@pyload.org"
+
+
+ def __init__(self):
+ OCR.__init__(self)
+ self.data_dir = dirname(abspath(__file__)) + sep + "LinksaveIn" + sep
+
+ def load_image(self, image):
+ im = Image.open(image)
+ frame_nr = 0
+
+ lut = im.resize((256, 1))
+ lut.putdata(range(256))
+ lut = list(lut.convert("RGB").getdata())
+
+ new = Image.new("RGB", im.size)
+ npix = new.load()
+ while True:
+ try:
+ im.seek(frame_nr)
+ except EOFError:
+ break
+ frame = im.copy()
+ pix = frame.load()
+ for x in xrange(frame.size[0]):
+ for y in xrange(frame.size[1]):
+ if lut[pix[x, y]] != (0,0,0):
+ npix[x, y] = lut[pix[x, y]]
+ frame_nr += 1
+ new.save(self.data_dir+"unblacked.png")
+ self.image = new.copy()
+ self.pixels = self.image.load()
+ self.result_captcha = ''
+
+ def get_bg(self):
+ stat = {}
+ cstat = {}
+ img = self.image.convert("P")
+ for bgpath in glob(self.data_dir+"bg/*.gif"):
+ stat[bgpath] = 0
+ bg = Image.open(bgpath)
+
+ bglut = bg.resize((256, 1))
+ bglut.putdata(range(256))
+ bglut = list(bglut.convert("RGB").getdata())
+
+ lut = img.resize((256, 1))
+ lut.putdata(range(256))
+ lut = list(lut.convert("RGB").getdata())
+
+ bgpix = bg.load()
+ pix = img.load()
+ for x in xrange(bg.size[0]):
+ for y in xrange(bg.size[1]):
+ rgb_bg = bglut[bgpix[x, y]]
+ rgb_c = lut[pix[x, y]]
+ try:
+ cstat[rgb_c] += 1
+ except:
+ cstat[rgb_c] = 1
+ if rgb_bg == rgb_c:
+ stat[bgpath] += 1
+ max_p = 0
+ bg = ""
+ for bgpath, value in stat.items():
+ if max_p < value:
+ bg = bgpath
+ max_p = value
+ return bg
+
+ def substract_bg(self, bgpath):
+ bg = Image.open(bgpath)
+ img = self.image.convert("P")
+
+ bglut = bg.resize((256, 1))
+ bglut.putdata(range(256))
+ bglut = list(bglut.convert("RGB").getdata())
+
+ lut = img.resize((256, 1))
+ lut.putdata(range(256))
+ lut = list(lut.convert("RGB").getdata())
+
+ bgpix = bg.load()
+ pix = img.load()
+ orgpix = self.image.load()
+ for x in xrange(bg.size[0]):
+ for y in xrange(bg.size[1]):
+ rgb_bg = bglut[bgpix[x, y]]
+ rgb_c = lut[pix[x, y]]
+ if rgb_c == rgb_bg:
+ orgpix[x, y] = (255,255,255)
+
+ def eval_black_white(self):
+ new = Image.new("RGB", (140, 75))
+ pix = new.load()
+ orgpix = self.image.load()
+ thresh = 4
+ for x in xrange(new.size[0]):
+ for y in xrange(new.size[1]):
+ rgb = orgpix[x, y]
+ r, g, b = rgb
+ pix[x, y] = (255,255,255)
+ if r > max(b, g)+thresh:
+ pix[x, y] = (0,0,0)
+ if g < min(r, b):
+ pix[x, y] = (0,0,0)
+ if g > max(r, b)+thresh:
+ pix[x, y] = (0,0,0)
+ if b > max(r, g)+thresh:
+ pix[x, y] = (0,0,0)
+ self.image = new
+ self.pixels = self.image.load()
+
+ def get_captcha(self, image):
+ self.load_image(image)
+ bg = self.get_bg()
+ self.substract_bg(bg)
+ self.eval_black_white()
+ self.to_greyscale()
+ self.image.save(self.data_dir+"cleaned_pass1.png")
+ self.clean(4)
+ self.clean(4)
+ self.image.save(self.data_dir+"cleaned_pass2.png")
+ letters = self.split_captcha_letters()
+ final = ""
+ for n, letter in enumerate(letters):
+ self.image = letter
+ self.image.save(ocr.data_dir+"letter%d.png" % n)
+ self.run_tesser(True, True, False, False)
+ final += self.result_captcha
+
+ return final
diff --git a/pyload/plugins/ocr/NetloadIn.py b/pyload/plugins/ocr/NetloadIn.py
new file mode 100644
index 000000000..d31c30989
--- /dev/null
+++ b/pyload/plugins/ocr/NetloadIn.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.OCR import OCR
+
+class NetloadIn(OCR):
+ __name__ = "NetloadIn"
+ __type__ = "ocr"
+ __version__ = "0.1"
+
+ __description__ = """Netload.in ocr plugin"""
+ __author_name__ = "pyLoad Team"
+ __author_mail__ = "admin@pyload.org"
+
+
+ def __init__(self):
+ OCR.__init__(self)
+
+ def get_captcha(self, image):
+ self.load_image(image)
+ self.to_greyscale()
+ self.clean(3)
+ self.clean(3)
+ self.run_tesser(True, True, False, False)
+
+ self.result_captcha = self.result_captcha.replace(" ", "")[:4] # cut to 4 numbers
+
+ return self.result_captcha
diff --git a/pyload/plugins/ocr/ShareonlineBiz.py b/pyload/plugins/ocr/ShareonlineBiz.py
new file mode 100644
index 000000000..3cee0348e
--- /dev/null
+++ b/pyload/plugins/ocr/ShareonlineBiz.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+from pyload.plugins.OCR import OCR
+
+
+class ShareonlineBiz(OCR):
+ __name__ = "ShareonlineBiz"
+ __type__ = "ocr"
+ __version__ = "0.1"
+
+ __description__ = """Shareonline.biz ocr plugin"""
+ __author_name__ = "RaNaN"
+ __author_mail__ = "RaNaN@pyload.org"
+
+
+ def __init__(self):
+ OCR.__init__(self)
+
+ def get_captcha(self, image):
+ self.load_image(image)
+ self.to_greyscale()
+ self.image = self.image.resize((160, 50))
+ self.pixels = self.image.load()
+ self.threshold(1.85)
+ #self.eval_black_white(240)
+ #self.derotate_by_average()
+
+ letters = self.split_captcha_letters()
+
+ final = ""
+ for letter in letters:
+ self.image = letter
+ self.run_tesser(True, True, False, False)
+ final += self.result_captcha
+
+ return final
+
+ #tesseract at 60%
diff --git a/module/plugins/ocr/__init__.py b/pyload/plugins/ocr/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/ocr/__init__.py
+++ b/pyload/plugins/ocr/__init__.py
diff --git a/module/remote/ClickAndLoadBackend.py b/pyload/remote/ClickAndLoadBackend.py
index 82167f6e3..82167f6e3 100644
--- a/module/remote/ClickAndLoadBackend.py
+++ b/pyload/remote/ClickAndLoadBackend.py
diff --git a/pyload/remote/RemoteManager.py b/pyload/remote/RemoteManager.py
new file mode 100644
index 000000000..e53e317e3
--- /dev/null
+++ b/pyload/remote/RemoteManager.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: mkaay
+"""
+
+from threading import Thread
+from traceback import print_exc
+
+class BackendBase(Thread):
+ def __init__(self, manager):
+ Thread.__init__(self)
+ self.m = manager
+ self.core = manager.core
+ self.enabled = True
+ self.running = False
+
+ def run(self):
+ self.running = True
+ try:
+ self.serve()
+ except Exception, e:
+ self.core.log.error(_("Remote backend error: %s") % e)
+ if self.core.debug:
+ print_exc()
+ finally:
+ self.running = False
+
+ def setup(self, host, port):
+ pass
+
+ def checkDeps(self):
+ return True
+
+ def serve(self):
+ pass
+
+ def shutdown(self):
+ pass
+
+ def stop(self):
+ self.enabled = False# set flag and call shutdowm message, so thread can react
+ self.shutdown()
+
+
+class RemoteManager:
+ available = []
+
+ def __init__(self, core):
+ self.core = core
+ self.backends = []
+
+ if self.core.remote:
+ self.available.append("ThriftBackend")
+# else:
+# self.available.append("SocketBackend")
+
+
+ def startBackends(self):
+ host = self.core.config["remote"]["listenaddr"]
+ port = self.core.config["remote"]["port"]
+
+ for b in self.available:
+ klass = getattr(__import__("pyload.remote.%s" % b, globals(), locals(), [b], -1), b)
+ backend = klass(self)
+ if not backend.checkDeps():
+ continue
+ try:
+ backend.setup(host, port)
+ self.core.log.info(_("Starting %(name)s: %(addr)s:%(port)s") % {"name": b, "addr": host, "port": port})
+ except Exception, e:
+ self.core.log.error(_("Failed loading backend %(name)s | %(error)s") % {"name": b, "error": str(e)})
+ if self.core.debug:
+ print_exc()
+ else:
+ backend.start()
+ self.backends.append(backend)
+
+ port += 1
diff --git a/module/remote/SocketBackend.py b/pyload/remote/SocketBackend.py
index 1a157cf1d..1a157cf1d 100644
--- a/module/remote/SocketBackend.py
+++ b/pyload/remote/SocketBackend.py
diff --git a/pyload/remote/ThriftBackend.py b/pyload/remote/ThriftBackend.py
new file mode 100644
index 000000000..2c65578be
--- /dev/null
+++ b/pyload/remote/ThriftBackend.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: mkaay, RaNaN
+"""
+from os.path import exists
+
+from pyload.remote.RemoteManager import BackendBase
+
+from thriftbackend.Processor import Processor
+from thriftbackend.Protocol import ProtocolFactory
+from thriftbackend.Socket import ServerSocket
+from thriftbackend.Transport import TransportFactory
+#from thriftbackend.Transport import TransportFactoryCompressed
+
+from thrift.server import TServer
+
+class ThriftBackend(BackendBase):
+ def setup(self, host, port):
+ processor = Processor(self.core.api)
+
+ key = None
+ cert = None
+
+ if self.core.config['ssl']['activated']:
+ if exists(self.core.config['ssl']['cert']) and exists(self.core.config['ssl']['key']):
+ self.core.log.info(_("Using SSL ThriftBackend"))
+ key = self.core.config['ssl']['key']
+ cert = self.core.config['ssl']['cert']
+
+ transport = ServerSocket(port, host, key, cert)
+
+
+# tfactory = TransportFactoryCompressed()
+ tfactory = TransportFactory()
+ pfactory = ProtocolFactory()
+
+ self.server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
+ #self.server = TNonblockingServer.TNonblockingServer(processor, transport, tfactory, pfactory)
+
+ #server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
+
+ def serve(self):
+ self.server.serve()
diff --git a/module/remote/__init__.py b/pyload/remote/__init__.py
index 60dfa77c7..60dfa77c7 100644
--- a/module/remote/__init__.py
+++ b/pyload/remote/__init__.py
diff --git a/module/remote/socketbackend/__init__.py b/pyload/remote/socketbackend/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/remote/socketbackend/__init__.py
+++ b/pyload/remote/socketbackend/__init__.py
diff --git a/module/remote/socketbackend/create_ttypes.py b/pyload/remote/socketbackend/create_ttypes.py
index 64398c3e7..64398c3e7 100644
--- a/module/remote/socketbackend/create_ttypes.py
+++ b/pyload/remote/socketbackend/create_ttypes.py
diff --git a/module/remote/socketbackend/ttypes.py b/pyload/remote/socketbackend/ttypes.py
index 3fd02fac8..3fd02fac8 100644
--- a/module/remote/socketbackend/ttypes.py
+++ b/pyload/remote/socketbackend/ttypes.py
diff --git a/module/remote/thriftbackend/Processor.py b/pyload/remote/thriftbackend/Processor.py
index a8b87c82c..a8b87c82c 100644
--- a/module/remote/thriftbackend/Processor.py
+++ b/pyload/remote/thriftbackend/Processor.py
diff --git a/module/remote/thriftbackend/Protocol.py b/pyload/remote/thriftbackend/Protocol.py
index a5822df18..a5822df18 100644
--- a/module/remote/thriftbackend/Protocol.py
+++ b/pyload/remote/thriftbackend/Protocol.py
diff --git a/module/remote/thriftbackend/Socket.py b/pyload/remote/thriftbackend/Socket.py
index b9fa7edbf..b9fa7edbf 100644
--- a/module/remote/thriftbackend/Socket.py
+++ b/pyload/remote/thriftbackend/Socket.py
diff --git a/module/remote/thriftbackend/ThriftClient.py b/pyload/remote/thriftbackend/ThriftClient.py
index 913719ed9..913719ed9 100644
--- a/module/remote/thriftbackend/ThriftClient.py
+++ b/pyload/remote/thriftbackend/ThriftClient.py
diff --git a/module/remote/thriftbackend/ThriftTest.py b/pyload/remote/thriftbackend/ThriftTest.py
index aec20fa33..aec20fa33 100644
--- a/module/remote/thriftbackend/ThriftTest.py
+++ b/pyload/remote/thriftbackend/ThriftTest.py
diff --git a/module/remote/thriftbackend/Transport.py b/pyload/remote/thriftbackend/Transport.py
index b5b6c8104..b5b6c8104 100644
--- a/module/remote/thriftbackend/Transport.py
+++ b/pyload/remote/thriftbackend/Transport.py
diff --git a/module/remote/thriftbackend/__init__.py b/pyload/remote/thriftbackend/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/remote/thriftbackend/__init__.py
+++ b/pyload/remote/thriftbackend/__init__.py
diff --git a/module/remote/thriftbackend/pyload.thrift b/pyload/remote/thriftbackend/pyload.thrift
index 3aef7af00..3aef7af00 100644
--- a/module/remote/thriftbackend/pyload.thrift
+++ b/pyload/remote/thriftbackend/pyload.thrift
diff --git a/module/remote/thriftbackend/thriftgen/__init__.py b/pyload/remote/thriftbackend/thriftgen/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/remote/thriftbackend/thriftgen/__init__.py
+++ b/pyload/remote/thriftbackend/thriftgen/__init__.py
diff --git a/module/remote/thriftbackend/thriftgen/pyload/Pyload-remote b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload-remote
index ddc1dd451..ddc1dd451 100755..100644
--- a/module/remote/thriftbackend/thriftgen/pyload/Pyload-remote
+++ b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload-remote
diff --git a/module/remote/thriftbackend/thriftgen/pyload/Pyload.py b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload.py
index f0b356375..f0b356375 100644
--- a/module/remote/thriftbackend/thriftgen/pyload/Pyload.py
+++ b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload.py
diff --git a/module/remote/thriftbackend/thriftgen/pyload/__init__.py b/pyload/remote/thriftbackend/thriftgen/pyload/__init__.py
index 9a0fb88bf..9a0fb88bf 100644
--- a/module/remote/thriftbackend/thriftgen/pyload/__init__.py
+++ b/pyload/remote/thriftbackend/thriftgen/pyload/__init__.py
diff --git a/module/remote/thriftbackend/thriftgen/pyload/constants.py b/pyload/remote/thriftbackend/thriftgen/pyload/constants.py
index 3bdd64cc1..3bdd64cc1 100644
--- a/module/remote/thriftbackend/thriftgen/pyload/constants.py
+++ b/pyload/remote/thriftbackend/thriftgen/pyload/constants.py
diff --git a/module/remote/thriftbackend/thriftgen/pyload/ttypes.py b/pyload/remote/thriftbackend/thriftgen/pyload/ttypes.py
index c2c50924e..c2c50924e 100644
--- a/module/remote/thriftbackend/thriftgen/pyload/ttypes.py
+++ b/pyload/remote/thriftbackend/thriftgen/pyload/ttypes.py
diff --git a/pyload/setup.py b/pyload/setup.py
new file mode 100644
index 000000000..6a98cc6f3
--- /dev/null
+++ b/pyload/setup.py
@@ -0,0 +1,538 @@
+# -*- coding: utf-8 -*-
+
+import os
+import sys
+
+import pyload.common.pylgettext as gettext
+
+from getpass import getpass
+from os import makedirs
+from os.path import abspath, dirname, exists, join
+from subprocess import PIPE, call
+
+from pyload.utils import get_console_encoding, versiontuple
+
+
+class Setup:
+ """ pyLoads initial setup configuration assistant """
+
+ def __init__(self, path, config):
+ self.path = path
+ self.config = config
+ self.stdin_encoding = get_console_encoding(sys.stdin.encoding)
+
+
+ def start(self):
+ langs = self.config.getMetaData("general", "language")["type"].split(";")
+ lang = self.ask(u"Choose setup language", "en", langs)
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("setup", join(self.path, "locale"), languages=[lang, "en"], fallback=True)
+ translation.install(True)
+
+ #Input shorthand for yes
+ self.yes = _("y")
+ #Input shorthand for no
+ self.no = _("n")
+
+ # print
+ # print _("Would you like to configure pyLoad via Webinterface?")
+ # print _("You need a Browser and a connection to this PC for it.")
+ # viaweb = self.ask(_("Start initial webinterface for configuration?"), "y", bool=True)
+ # if viaweb:
+ # try:
+ # from pyload.threads import ServerThread
+ # ServerThread.setup = self
+ # import pyload.webui as webinterface
+ # webinterface.run_simple()
+ # return False
+ # except Exception, e:
+ # print "Setup failed with this error: ", e
+ # print "Falling back to commandline setup."
+
+ print
+ print
+ print _("Welcome to the pyLoad Configuration Assistant.")
+ print _("It will check your system and make a basic setup in order to run pyLoad.")
+ print
+ print _("The value in brackets [] always is the default value,")
+ print _("in case you don't want to change it or you are unsure what to choose, just hit enter.")
+ print _(
+ "Don't forget: You can always rerun this assistant with --setup or -s parameter, when you start pyload.py .")
+ print _("If you have any problems with this assistant hit STRG-C,")
+ print _("to abort and don't let him start with pyload.py automatically anymore.")
+ print
+ print
+ raw_input(_("When you are ready for system check, hit enter."))
+ print
+ print
+
+ basic, ssl, captcha, web, js = self.system_check()
+ print
+ print
+
+ if not basic:
+ print _("You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad.")
+ print _("Please correct this and re-run pyLoad.")
+ print
+ print _("Setup will now close.")
+ print
+ print
+ raw_input(_("Press Enter to exit."))
+ return False
+
+ raw_input(_("System check finished, hit enter to see your status report."))
+ print
+ print
+ print _("## Status ##")
+ print
+
+ avail = []
+ if self.check_module("Crypto"):
+ avail.append(_("container decrypting"))
+ if ssl:
+ avail.append(_("ssl connection"))
+ if captcha:
+ avail.append(_("automatic captcha decryption"))
+ if web:
+ avail.append(_("webinterface"))
+ if js:
+ avail.append(_("extended Click'N'Load"))
+
+ string = ""
+
+ for av in avail:
+ string += ", " + av
+
+ print _("AVAILABLE FEATURES:") + string[1:]
+ print
+
+ if len(avail) < 5:
+ print _("MISSING FEATURES: ")
+
+ if not self.check_module("Crypto"):
+ print _("- no py-crypto available")
+ print _("You need this if you want to decrypt container files.")
+ print
+
+ if not ssl:
+ print _("- no SSL available")
+ print _("This is needed if you want to establish a secure connection to core or webinterface.")
+ print _("If you only want to access locally to pyLoad ssl is not usefull.")
+ print
+
+ if not captcha:
+ print _("- no Captcha Recognition available")
+ print _("Only needed for some hosters and as freeuser.")
+ print
+
+ if not js:
+ print _("- no JavaScript engine found")
+ print _("You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino")
+ print
+
+ print
+ print _("You can abort the setup now and fix some dependicies if you want.")
+
+ print
+ con = self.ask(_("Continue with setup?"), self.yes, bool=True)
+
+ if not con:
+ return False
+
+ print
+ print
+ print _("CURRENT CONFIG PATH: %s") % abspath("")
+ print
+ print _("NOTE: If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it.")
+ path = self.ask(_("Do you want to change the config path?"), self.no, bool=True)
+ if path:
+ print
+ self.conf_path()
+ #calls exit when changed
+
+ print
+ print _("Do you want to configure login data and basic settings?")
+ print _("This is recommend for first run.")
+ con = self.ask(_("Make basic setup?"), self.yes, bool=True)
+
+ if con:
+ print
+ print
+ self.conf_basic()
+
+ if ssl:
+ print
+ print _("Do you want to configure ssl?")
+ ssl = self.ask(_("Configure ssl?"), self.no, bool=True)
+ if ssl:
+ print
+ print
+ self.conf_ssl()
+
+ if web:
+ print
+ print _("Do you want to configure webinterface?")
+ web = self.ask(_("Configure webinterface?"), self.yes, bool=True)
+ if web:
+ print
+ print
+ self.conf_web()
+
+ print
+ print
+ print _("Setup finished successfully!")
+ print
+ print
+ raw_input(_("Hit enter to exit and restart pyLoad."))
+ return True
+
+
+ def system_check(self):
+ """ make a systemcheck and return the results"""
+
+ print _("## System Information ##")
+ print
+ print _("Platform: %s") % sys.platform
+ print _("Operating System: %s") % os.name
+ print _("Python: %s") % sys.version.replace("\n", "")
+ print
+ print
+
+ print _("## System Check ##")
+ print
+
+ if sys.version_info[:2] > (2, 7):
+ print _("Your python version is to new, Please use Python 2.6/2.7")
+ python = False
+ elif sys.version_info[:2] < (2, 5):
+ print _("Your python version is to old, Please use at least Python 2.5")
+ python = False
+ else:
+ print _("Python Version: OK")
+ python = True
+
+ curl = self.check_module("pycurl")
+ self.print_dep("pycurl", curl)
+
+ sqlite = self.check_module("sqlite3")
+ self.print_dep("sqlite3", sqlite)
+
+ basic = python and curl and sqlite
+
+ print
+
+ crypto = self.check_module("Crypto")
+ self.print_dep("pycrypto", crypto)
+
+ ssl = self.check_module("OpenSSL")
+ self.print_dep("py-OpenSSL", ssl)
+
+ print
+
+ pil = self.check_module("PIL.Image")
+ self.print_dep("PIL/Pillow", pil)
+
+ if os.name == "nt":
+ tesser = self.check_prog([join(pypath, "tesseract", "tesseract.exe"), "-v"])
+ else:
+ tesser = self.check_prog(["tesseract", "-v"])
+
+ self.print_dep("tesseract", tesser)
+
+ captcha = pil and tesser
+
+ print
+
+ try:
+ import jinja2
+
+ v = jinja2.__version__
+ if v and versiontuple(v) < (2, 5, 0):
+ jinja = False
+ else:
+ jinja = True
+ except:
+ jinja = False
+
+ jinja = self.print_dep("jinja2", jinja)
+
+ beaker = self.check_module("beaker")
+ self.print_dep("beaker", beaker)
+
+ bjoern = self.check_module("bjoern")
+ self.print_dep("bjoern", bjoern)
+
+ web = sqlite and beaker
+
+ from pyload.common import JsEngine
+ js = True if JsEngine.ENGINE else False
+ self.print_dep(_("JS engine"), js)
+
+ if not jinja:
+ print
+ print
+ print _("WARNING: Your installed jinja2 version %s seems too old.") % jinja2.__version__
+ print _("You can safely continue but if the webinterface is not working,")
+ print _("please upgrade or uninstall it, because pyLoad self-includes jinja2 libary.")
+
+ return basic, ssl, captcha, web, js
+
+
+ def conf_basic(self):
+ print _("## Basic Setup ##")
+
+ print
+ print _("The following logindata is valid for CLI and webinterface.")
+
+ from pyload.database import DatabaseBackend
+
+ db = DatabaseBackend(None)
+ db.setup()
+ print _("NOTE: Consider a password of 10 or more symbols if you expect to access from outside your local network (ex. internet).")
+ print
+ username = self.ask(_("Username"), "User")
+ password = self.ask("", "", password=True)
+ db.addUser(username, password)
+ db.shutdown()
+
+ print
+ print _("External clients (GUI, CLI or other) need remote access to work over the network.")
+ print _("However, if you only want to use the webinterface you may disable it to save ram.")
+ self.config["remote"]["activated"] = self.ask(_("Enable remote access"), self.no, bool=True)
+
+ print
+ langs = self.config.getMetaData("general", "language")
+ self.config["general"]["language"] = self.ask(_("Choose pyLoad language"), "en", langs["type"].split(";"))
+
+ print
+ self.config["general"]["download_folder"] = self.ask(_("Download folder"), "Downloads")
+ print
+ self.config["download"]["max_downloads"] = self.ask(_("Max parallel downloads"), "3")
+ print
+ reconnect = self.ask(_("Use Reconnect?"), self.no, bool=True)
+ self.config["reconnect"]["activated"] = reconnect
+ if reconnect:
+ self.config["reconnect"]["method"] = self.ask(_("Reconnect script location"), "./reconnect.sh")
+
+
+ def conf_web(self):
+ print _("## Webinterface Setup ##")
+
+ print
+ self.config["webinterface"]["activated"] = self.ask(_("Activate webinterface?"), self.yes, bool=True)
+ print
+ print _("Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally.")
+ self.config["webinterface"]["host"] = self.ask(_("Address"), "0.0.0.0")
+ self.config["webinterface"]["port"] = self.ask(_("Port"), "8000")
+ print
+ print _("pyLoad offers several server backends, now following a short explanation.")
+ print "- builtin:", _("Default server; best choice if you plan to use pyLoad just for you.")
+ print "- threaded:", _("Support SSL connection and can serve simultaneously more client flawlessly.")
+ print "- fastcgi:", _(
+ "Can be used by apache, lighttpd, etc.; needs to be properly configured before.")
+ if os.name != "nt":
+ print "- lightweight:", _("Very fast alternative to builtin; requires libev and bjoern packages.")
+
+ print
+ print _("NOTE: In some rare cases the builtin server is not working, if you notice problems with the webinterface")
+ print _("come back here and change the builtin server to the threaded one here.")
+
+ if os.name == "nt":
+ servers = ["builtin", "threaded", "fastcgi"]
+ default = "threaded"
+ else:
+ servers = ["builtin", "threaded", "fastcgi", "lightweight"]
+ default = "lightweight" if self.check_module("bjoern") else "builtin"
+
+ self.config["webinterface"]["server"] = self.ask(_("Server"), default, servers)
+
+
+ def conf_ssl(self):
+ print _("## SSL Setup ##")
+ print
+ print _("Execute these commands from pyLoad config folder to make ssl certificates:")
+ print
+ print "openssl genrsa -out ssl.key 1024"
+ print "openssl req -new -key ssl.key -out ssl.csr"
+ print "openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt "
+ print
+ print _("If you're done and everything went fine, you can activate ssl now.")
+
+ self.config["ssl"]["activated"] = self.ask(_("Activate SSL?"), self.yes, bool=True)
+
+
+ def set_user(self):
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("setup", join(self.path, "locale"),
+ languages=[self.config["general"]["language"], "en"], fallback=True)
+ translation.install(True)
+
+ from pyload.database import DatabaseBackend
+
+ db = DatabaseBackend(None)
+ db.setup()
+
+ noaction = True
+ try:
+ while True:
+ print _("Select action")
+ print _("1 - Create/Edit user")
+ print _("2 - List users")
+ print _("3 - Remove user")
+ print _("4 - Quit")
+ action = raw_input("[1]/2/3/4: ")
+ if not action in ("1", "2", "3", "4"):
+ continue
+ elif action == "1":
+ print
+ username = self.ask(_("Username"), "User")
+ password = self.ask("", "", password=True)
+ db.addUser(username, password)
+ noaction = False
+ elif action == "2":
+ print
+ print _("Users")
+ print "-----"
+ users = db.listUsers()
+ noaction = False
+ for user in users:
+ print user
+ print "-----"
+ print
+ elif action == "3":
+ print
+ username = self.ask(_("Username"), "")
+ if username:
+ db.removeUser(username)
+ noaction = False
+ elif action == "4":
+ break
+ finally:
+ if not noaction:
+ db.shutdown()
+
+
+ def conf_path(self, trans=False):
+ if trans:
+ gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+ translation = gettext.translation("setup", join(self.path, "locale"),
+ languages=[self.config["general"]["language"], "en"], fallback=True)
+ translation.install(True)
+
+ print _("Setting new config path, current configuration will not be transfered!")
+ path = self.ask(_("CONFIG PATH"), abspath(""))
+ try:
+ path = join(pypath, path)
+ if not exists(path):
+ makedirs(path)
+ f = open(join(pypath, "pyload", "config", "configdir"), "wb")
+ f.write(path)
+ f.close()
+ print
+ print
+ print _("pyLoad config path changed, setup will now close!")
+ print
+ print
+ raw_input(_("Press Enter to exit."))
+ sys.exit()
+ except Exception, e:
+ print _("Setting config path failed: %s") % str(e)
+
+
+ def print_dep(self, name, value):
+ """Print Status of dependency"""
+ if value:
+ print _("%s: OK") % name
+ else:
+ print _("%s: MISSING") % name
+
+
+ def check_module(self, module):
+ try:
+ __import__(module)
+ return True
+ except:
+ return False
+
+
+ def check_prog(self, command):
+ pipe = PIPE
+ try:
+ call(command, stdout=pipe, stderr=pipe)
+ return True
+ except:
+ return False
+
+
+ def ask(self, qst, default, answers=[], bool=False, password=False):
+ """produce one line to asking for input"""
+ if answers:
+ info = "("
+
+ for i, answer in enumerate(answers):
+ info += (", " if i != 0 else "") + str((answer == default and "[%s]" % answer) or answer)
+
+ info += ")"
+ elif bool:
+ if default == self.yes:
+ info = "([%s]/%s)" % (self.yes, self.no)
+ else:
+ info = "(%s/[%s])" % (self.yes, self.no)
+ else:
+ info = "[%s]" % default
+
+ if password:
+ p1 = True
+ p2 = False
+ pwlen = 8
+ while p1 != p2:
+ # getpass(_("Password: ")) will crash on systems with broken locales (Win, NAS)
+ sys.stdout.write(_("Password: "))
+ p1 = getpass("")
+
+ if len(p1) < pwlen:
+ print _("Password too short! Use at least %s symbols." % pwlen)
+ continue
+ elif not p1.isalnum():
+ print _("Password must be alphanumeric.")
+ continue
+
+ sys.stdout.write(_("Password (again): "))
+ p2 = getpass("")
+
+ if p1 == p2:
+ return p1
+ else:
+ print _("Passwords did not match.")
+
+ while True:
+ try:
+ input = raw_input(qst + " %s: " % info)
+ except KeyboardInterrupt:
+ print "\nSetup interrupted"
+ sys.exit()
+
+ input = input.decode(self.stdin_encoding)
+
+ if input.strip() == "":
+ input = default
+
+ if bool:
+ # yes, true, t are inputs for booleans with value true
+ if input.lower().strip() in [self.yes, _("yes"), _("true"), _("t"), "yes"]:
+ return True
+ # no, false, f are inputs for booleans with value false
+ elif input.lower().strip() in [self.no, _("no"), _("false"), _("f"), "no"]:
+ return False
+ else:
+ print _("Invalid Input")
+ continue
+
+ if not answers:
+ return input
+
+ else:
+ if input in answers:
+ return input
+ else:
+ print _("Invalid Input")
diff --git a/pyload/threads/PluginThread.py b/pyload/threads/PluginThread.py
new file mode 100644
index 000000000..ca1d396dc
--- /dev/null
+++ b/pyload/threads/PluginThread.py
@@ -0,0 +1,675 @@
+# -*- coding: utf-8 -*-
+
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+from Queue import Queue
+from threading import Thread
+from os import listdir, stat
+from os.path import join
+from time import sleep, time, strftime, gmtime
+from traceback import print_exc, format_exc
+from pprint import pformat
+from sys import exc_info, exc_clear
+from copy import copy
+from types import MethodType
+
+from pycurl import error
+
+from pyload.PyFile import PyFile
+from pyload.plugins.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload
+from pyload.common.packagetools import parseNames
+from pyload.utils import safe_join
+from pyload.Api import OnlineStatus
+
+class PluginThread(Thread):
+ """abstract base class for thread types"""
+
+ #--------------------------------------------------------------------------
+ def __init__(self, manager):
+ """Constructor"""
+ Thread.__init__(self)
+ self.setDaemon(True)
+ self.m = manager #thread manager
+
+
+ def writeDebugReport(self, pyfile):
+ """ writes a
+ :return:
+ """
+
+ dump_name = "debug_%s_%s.zip" % (pyfile.pluginname, strftime("%d-%m-%Y_%H-%M-%S"))
+ dump = self.getDebugDump(pyfile)
+
+ try:
+ import zipfile
+
+ zip = zipfile.ZipFile(dump_name, "w")
+
+ for f in listdir(join("tmp", pyfile.pluginname)):
+ try:
+ # avoid encoding errors
+ zip.write(join("tmp", pyfile.pluginname, f), safe_join(pyfile.pluginname, f))
+ except:
+ pass
+
+ info = zipfile.ZipInfo(safe_join(pyfile.pluginname, "debug_Report.txt"), gmtime())
+ info.external_attr = 0644 << 16L # change permissions
+
+ zip.writestr(info, dump)
+ zip.close()
+
+ if not stat(dump_name).st_size:
+ raise Exception("Empty Zipfile")
+
+ except Exception, e:
+ self.m.log.debug("Error creating zip file: %s" % e)
+
+ dump_name = dump_name.replace(".zip", ".txt")
+ f = open(dump_name, "wb")
+ f.write(dump)
+ f.close()
+
+ self.m.core.log.info("Debug Report written to %s" % dump_name)
+
+ def getDebugDump(self, pyfile):
+ dump = "pyLoad %s Debug Report of %s %s \n\nTRACEBACK:\n %s \n\nFRAMESTACK:\n" % (
+ self.m.core.api.getServerVersion(), pyfile.pluginname, pyfile.plugin.__version__, format_exc())
+
+ tb = exc_info()[2]
+ stack = []
+ while tb:
+ stack.append(tb.tb_frame)
+ tb = tb.tb_next
+
+ for frame in stack[1:]:
+ dump += "\nFrame %s in %s at line %s\n" % (frame.f_code.co_name,
+ frame.f_code.co_filename,
+ frame.f_lineno)
+
+ for key, value in frame.f_locals.items():
+ dump += "\t%20s = " % key
+ try:
+ dump += pformat(value) + "\n"
+ except Exception, e:
+ dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
+
+ del frame
+
+ del stack #delete it just to be sure...
+
+ dump += "\n\nPLUGIN OBJECT DUMP: \n\n"
+
+ for name in dir(pyfile.plugin):
+ attr = getattr(pyfile.plugin, name)
+ if not name.endswith("__") and type(attr) != MethodType:
+ dump += "\t%20s = " % name
+ try:
+ dump += pformat(attr) + "\n"
+ except Exception, e:
+ dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
+
+ dump += "\nPYFILE OBJECT DUMP: \n\n"
+
+ for name in dir(pyfile):
+ attr = getattr(pyfile, name)
+ if not name.endswith("__") and type(attr) != MethodType:
+ dump += "\t%20s = " % name
+ try:
+ dump += pformat(attr) + "\n"
+ except Exception, e:
+ dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n"
+
+ if pyfile.pluginname in self.m.core.config.plugin:
+ dump += "\n\nCONFIG: \n\n"
+ dump += pformat(self.m.core.config.plugin[pyfile.pluginname]) + "\n"
+
+ return dump
+
+ def clean(self, pyfile):
+ """ set thread unactive and release pyfile """
+ self.active = False
+ pyfile.release()
+
+
+class DownloadThread(PluginThread):
+ """thread for downloading files from 'real' hoster plugins"""
+
+ #--------------------------------------------------------------------------
+ def __init__(self, manager):
+ """Constructor"""
+ PluginThread.__init__(self, manager)
+
+ self.queue = Queue() # job queue
+ self.active = False
+
+ self.start()
+
+ #--------------------------------------------------------------------------
+ def run(self):
+ """run method"""
+ pyfile = None
+
+ while True:
+ del pyfile
+ self.active = self.queue.get()
+ pyfile = self.active
+
+ if self.active == "quit":
+ self.active = False
+ self.m.threads.remove(self)
+ return True
+
+ try:
+ if not pyfile.hasPlugin(): continue
+ #this pyfile was deleted while queueing
+
+ pyfile.plugin.checkForSameFiles(starting=True)
+ self.m.log.info(_("Download starts: %s" % pyfile.name))
+
+ # start download
+ self.m.core.hookManager.downloadPreparing(pyfile)
+ pyfile.plugin.preprocessing(self)
+
+ self.m.log.info(_("Download finished: %s") % pyfile.name)
+ self.m.core.hookManager.downloadFinished(pyfile)
+ self.m.core.files.checkPackageFinished(pyfile)
+
+ except NotImplementedError:
+ self.m.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname)
+ pyfile.setStatus("failed")
+ pyfile.error = "Plugin does not work"
+ self.clean(pyfile)
+ continue
+
+ except Abort:
+ try:
+ self.m.log.info(_("Download aborted: %s") % pyfile.name)
+ except:
+ pass
+
+ pyfile.setStatus("aborted")
+
+ self.clean(pyfile)
+ continue
+
+ except Reconnect:
+ self.queue.put(pyfile)
+ #pyfile.req.clearCookies()
+
+ while self.m.reconnecting.isSet():
+ sleep(0.5)
+
+ continue
+
+ except Retry, e:
+ reason = e.args[0]
+ self.m.log.info(_("Download restarted: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": reason})
+ self.queue.put(pyfile)
+ continue
+
+ except Fail, e:
+ msg = e.args[0]
+
+ if msg == "offline":
+ pyfile.setStatus("offline")
+ self.m.log.warning(_("Download is offline: %s") % pyfile.name)
+ elif msg == "temp. offline":
+ pyfile.setStatus("temp. offline")
+ self.m.log.warning(_("Download is temporary offline: %s") % pyfile.name)
+ else:
+ pyfile.setStatus("failed")
+ self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg})
+ pyfile.error = msg
+
+ self.m.core.hookManager.downloadFailed(pyfile)
+ self.clean(pyfile)
+ continue
+
+ except error, e:
+ if len(e.args) == 2:
+ code, msg = e.args
+ else:
+ code = 0
+ msg = e.args
+
+ self.m.log.debug("pycurl exception %s: %s" % (code, msg))
+
+ if code in (7, 18, 28, 52, 56):
+ self.m.log.warning(_("Couldn't connect to host or connection reset, waiting 1 minute and retry."))
+ wait = time() + 60
+
+ pyfile.waitUntil = wait
+ pyfile.setStatus("waiting")
+ while time() < wait:
+ sleep(1)
+ if pyfile.abort:
+ break
+
+ if pyfile.abort:
+ self.m.log.info(_("Download aborted: %s") % pyfile.name)
+ pyfile.setStatus("aborted")
+
+ self.clean(pyfile)
+ else:
+ self.queue.put(pyfile)
+
+ continue
+
+ else:
+ pyfile.setStatus("failed")
+ self.m.log.error("pycurl error %s: %s" % (code, msg))
+ if self.m.core.debug:
+ print_exc()
+ self.writeDebugReport(pyfile)
+
+ self.m.core.hookManager.downloadFailed(pyfile)
+
+ self.clean(pyfile)
+ continue
+
+ except SkipDownload, e:
+ pyfile.setStatus("skipped")
+
+ self.m.log.info(
+ _("Download skipped: %(name)s due to %(plugin)s") % {"name": pyfile.name, "plugin": e.message})
+
+ self.clean(pyfile)
+
+ self.m.core.files.checkPackageFinished(pyfile)
+
+ self.active = False
+ self.m.core.files.save()
+
+ continue
+
+
+ except Exception, e:
+ pyfile.setStatus("failed")
+ self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": str(e)})
+ pyfile.error = str(e)
+
+ if self.m.core.debug:
+ print_exc()
+ self.writeDebugReport(pyfile)
+
+ self.m.core.hookManager.downloadFailed(pyfile)
+ self.clean(pyfile)
+ continue
+
+ finally:
+ self.m.core.files.save()
+ pyfile.checkIfProcessed()
+ exc_clear()
+
+ #pyfile.plugin.req.clean()
+
+ self.active = False
+ pyfile.finishIfDone()
+ self.m.core.files.save()
+
+
+ def put(self, job):
+ """assing job to thread"""
+ self.queue.put(job)
+
+
+ def stop(self):
+ """stops the thread"""
+ self.put("quit")
+
+
+class DecrypterThread(PluginThread):
+ """thread for decrypting"""
+
+ def __init__(self, manager, pyfile):
+ """constructor"""
+ PluginThread.__init__(self, manager)
+
+ self.active = pyfile
+ manager.localThreads.append(self)
+
+ pyfile.setStatus("decrypting")
+
+ self.start()
+
+ def getActiveFiles(self):
+ return [self.active]
+
+ def run(self):
+ """run method"""
+
+ pyfile = self.active
+ retry = False
+
+ try:
+ self.m.log.info(_("Decrypting starts: %s") % self.active.name)
+ self.active.plugin.preprocessing(self)
+
+ except NotImplementedError:
+ self.m.log.error(_("Plugin %s is missing a function.") % self.active.pluginname)
+ return
+
+ except Fail, e:
+ msg = e.args[0]
+
+ if msg == "offline":
+ self.active.setStatus("offline")
+ self.m.log.warning(_("Download is offline: %s") % self.active.name)
+ else:
+ self.active.setStatus("failed")
+ self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": msg})
+ self.active.error = msg
+
+ return
+
+ except Abort:
+ self.m.log.info(_("Download aborted: %s") % pyfile.name)
+ pyfile.setStatus("aborted")
+
+ return
+
+ except Retry:
+ self.m.log.info(_("Retrying %s") % self.active.name)
+ retry = True
+ return self.run()
+
+ except Exception, e:
+ self.active.setStatus("failed")
+ self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": str(e)})
+ self.active.error = str(e)
+
+ if self.m.core.debug:
+ print_exc()
+ self.writeDebugReport(pyfile)
+
+ return
+
+
+ finally:
+ if not retry:
+ self.active.release()
+ self.active = False
+ self.m.core.files.save()
+ self.m.localThreads.remove(self)
+ exc_clear()
+
+
+ #self.m.core.hookManager.downloadFinished(pyfile)
+
+
+ #self.m.localThreads.remove(self)
+ #self.active.finishIfDone()
+ if not retry:
+ pyfile.delete()
+
+
+class HookThread(PluginThread):
+ """thread for hooks"""
+
+ #--------------------------------------------------------------------------
+ def __init__(self, m, function, args, kwargs):
+ """Constructor"""
+ PluginThread.__init__(self, m)
+
+ self.f = function
+ self.args = args
+ self.kwargs = kwargs
+
+ self.active = []
+
+ m.localThreads.append(self)
+
+ self.start()
+
+ def getActiveFiles(self):
+ return self.active
+
+ def addActive(self, pyfile):
+ """ Adds a pyfile to active list and thus will be displayed on overview"""
+ if pyfile not in self.active:
+ self.active.append(pyfile)
+
+ def finishFile(self, pyfile):
+ if pyfile in self.active:
+ self.active.remove(pyfile)
+
+ pyfile.finishIfDone()
+
+ def run(self):
+ try:
+ try:
+ self.kwargs["thread"] = self
+ self.f(*self.args, **self.kwargs)
+ except TypeError, e:
+ #dirty method to filter out exceptions
+ if "unexpected keyword argument 'thread'" not in e.args[0]:
+ raise
+
+ del self.kwargs["thread"]
+ self.f(*self.args, **self.kwargs)
+ finally:
+ local = copy(self.active)
+ for x in local:
+ self.finishFile(x)
+
+ self.m.localThreads.remove(self)
+
+
+class InfoThread(PluginThread):
+ def __init__(self, manager, data, pid=-1, rid=-1, add=False):
+ """Constructor"""
+ PluginThread.__init__(self, manager)
+
+ self.data = data
+ self.pid = pid # package id
+ # [ .. (name, plugin) .. ]
+
+ self.rid = rid #result id
+ self.add = add #add packages instead of return result
+
+ self.cache = [] #accumulated data
+
+ self.start()
+
+ def run(self):
+ """run method"""
+
+ plugins = {}
+ container = []
+
+ for url, plugin in self.data:
+ if plugin in plugins:
+ plugins[plugin].append(url)
+ else:
+ plugins[plugin] = [url]
+
+
+ # filter out container plugins
+ for name in self.m.core.pluginManager.containerPlugins:
+ if name in plugins:
+ container.extend([(name, url) for url in plugins[name]])
+
+ del plugins[name]
+
+ #directly write to database
+ if self.pid > -1:
+ for pluginname, urls in plugins.iteritems():
+ plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
+ if hasattr(plugin, "getInfo"):
+ self.fetchForPlugin(pluginname, plugin, urls, self.updateDB)
+ self.m.core.files.save()
+
+ elif self.add:
+ for pluginname, urls in plugins.iteritems():
+ plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
+ if hasattr(plugin, "getInfo"):
+ self.fetchForPlugin(pluginname, plugin, urls, self.updateCache, True)
+
+ else:
+ #generate default result
+ result = [(url, 0, 3, url) for url in urls]
+
+ self.updateCache(pluginname, result)
+
+ packs = parseNames([(name, url) for name, x, y, url in self.cache])
+
+ self.m.log.debug("Fetched and generated %d packages" % len(packs))
+
+ for k, v in packs:
+ self.m.core.api.addPackage(k, v)
+
+ #empty cache
+ del self.cache[:]
+
+ else: #post the results
+
+
+ for name, url in container:
+ #attach container content
+ try:
+ data = self.decryptContainer(name, url)
+ except:
+ print_exc()
+ self.m.log.error("Could not decrypt container.")
+ data = []
+
+ for url, plugin in data:
+ if plugin in plugins:
+ plugins[plugin].append(url)
+ else:
+ plugins[plugin] = [url]
+
+ self.m.infoResults[self.rid] = {}
+
+ for pluginname, urls in plugins.iteritems():
+ plugin = self.m.core.pluginManager.getPlugin(pluginname, True)
+ if hasattr(plugin, "getInfo"):
+ self.fetchForPlugin(pluginname, plugin, urls, self.updateResult, True)
+
+ #force to process cache
+ if self.cache:
+ self.updateResult(pluginname, [], True)
+
+ else:
+ #generate default result
+ result = [(url, 0, 3, url) for url in urls]
+
+ self.updateResult(pluginname, result, True)
+
+ self.m.infoResults[self.rid]["ALL_INFO_FETCHED"] = {}
+
+ self.m.timestamp = time() + 5 * 60
+
+
+ def updateDB(self, plugin, result):
+ self.m.core.files.updateFileInfo(result, self.pid)
+
+ def updateResult(self, plugin, result, force=False):
+ #parse package name and generate result
+ #accumulate results
+
+ self.cache.extend(result)
+
+ if len(self.cache) >= 20 or force:
+ #used for package generating
+ tmp = [(name, (url, OnlineStatus(name, plugin, "unknown", status, int(size))))
+ for name, size, status, url in self.cache]
+
+ data = parseNames(tmp)
+ result = {}
+ for k, v in data.iteritems():
+ for url, status in v:
+ status.packagename = k
+ result[url] = status
+
+ self.m.setInfoResults(self.rid, result)
+
+ self.cache = []
+
+ def updateCache(self, plugin, result):
+ self.cache.extend(result)
+
+ def fetchForPlugin(self, pluginname, plugin, urls, cb, err=None):
+ try:
+ result = [] #result loaded from cache
+ process = [] #urls to process
+ for url in urls:
+ if url in self.m.infoCache:
+ result.append(self.m.infoCache[url])
+ else:
+ process.append(url)
+
+ if result:
+ self.m.log.debug("Fetched %d values from cache for %s" % (len(result), pluginname))
+ cb(pluginname, result)
+
+ if process:
+ self.m.log.debug("Run Info Fetching for %s" % pluginname)
+ for result in plugin.getInfo(process):
+ #result = [ .. (name, size, status, url) .. ]
+ if not type(result) == list: result = [result]
+
+ for res in result:
+ self.m.infoCache[res[3]] = res
+
+ cb(pluginname, result)
+
+ self.m.log.debug("Finished Info Fetching for %s" % pluginname)
+ except Exception, e:
+ self.m.log.warning(_("Info Fetching for %(name)s failed | %(err)s") %
+ {"name": pluginname, "err": str(e)})
+ if self.m.core.debug:
+ print_exc()
+
+ # generate default results
+ if err:
+ result = [(url, 0, 3, url) for url in urls]
+ cb(pluginname, result)
+
+
+ def decryptContainer(self, plugin, url):
+ data = []
+ # only works on container plugins
+
+ self.m.log.debug("Pre decrypting %s with %s" % (url, plugin))
+
+ # dummy pyfile
+ pyfile = PyFile(self.m.core.files, -1, url, url, 0, 0, "", plugin, -1, -1)
+
+ pyfile.initPlugin()
+
+ # little plugin lifecycle
+ try:
+ pyfile.plugin.setup()
+ pyfile.plugin.loadToDisk()
+ pyfile.plugin.decrypt(pyfile)
+ pyfile.plugin.deleteTmp()
+
+ for pack in pyfile.plugin.packages:
+ pyfile.plugin.urls.extend(pack[1])
+
+ data = self.m.core.pluginManager.parseUrls(pyfile.plugin.urls)
+
+ self.m.log.debug("Got %d links." % len(data))
+
+ except Exception, e:
+ self.m.log.debug("Pre decrypting error: %s" % str(e))
+ finally:
+ pyfile.release()
+
+ return data
diff --git a/pyload/threads/ServerThread.py b/pyload/threads/ServerThread.py
new file mode 100644
index 000000000..7de3b1ca1
--- /dev/null
+++ b/pyload/threads/ServerThread.py
@@ -0,0 +1,108 @@
+from __future__ import with_statement
+from os.path import exists
+
+import os
+import threading
+import logging
+
+core = None
+setup = None
+log = logging.getLogger("log")
+
+class WebServer(threading.Thread):
+ def __init__(self, pycore):
+ global core
+ threading.Thread.__init__(self)
+ self.core = pycore
+ core = pycore
+ self.running = True
+ self.server = pycore.config['webinterface']['server']
+ self.https = pycore.config['webinterface']['https']
+ self.cert = pycore.config["ssl"]["cert"]
+ self.key = pycore.config["ssl"]["key"]
+ self.host = pycore.config['webinterface']['host']
+ self.port = pycore.config['webinterface']['port']
+
+ self.setDaemon(True)
+
+ def run(self):
+ import pyload.webui as webinterface
+ global webinterface
+
+ reset = False
+
+ if self.https and (not exists(self.cert) or not exists(self.key)):
+ log.warning(_("SSL certificates not found."))
+ self.https = False
+
+ if self.server in ("lighttpd", "nginx"):
+ log.warning(_("Sorry, we dropped support for starting %s directly within pyLoad") % self.server)
+ log.warning(_("You can use the threaded server which offers good performance and ssl,"))
+ log.warning(_("of course you can still use your existing %s with pyLoads fastcgi server") % self.server)
+ log.warning(_("sample configs are located in the pyload/web/servers directory"))
+ reset = True
+ elif self.server == "fastcgi":
+ try:
+ import flup
+ except:
+ log.warning(_("Can't use %(server)s, python-flup is not installed!") % {
+ "server": self.server})
+ reset = True
+
+ if reset or self.server == "lightweight":
+ if os.name != "nt":
+ try:
+ import bjoern
+ except Exception, e:
+ log.error(_("Error importing lightweight server: %s") % e)
+ log.warning(_("You need to download and compile bjoern, https://github.com/jonashaag/bjoern"))
+ log.warning(_("Copy the boern.so to pyload/lib folder or use setup.py install"))
+ log.warning(_("Of course you need to be familiar with linux and know how to compile software"))
+ self.server = "builtin"
+ else:
+ self.core.log.info(_("Server set to threaded, due to known performance problems on windows."))
+ self.core.config['webinterface']['server'] = "threaded"
+ self.server = "threaded"
+
+ if self.server == "threaded":
+ self.start_threaded()
+ elif self.server == "fastcgi":
+ self.start_fcgi()
+ elif self.server == "lightweight":
+ self.start_lightweight()
+ else:
+ self.start_builtin()
+
+ def start_builtin(self):
+
+ if self.https:
+ log.warning(_("This server offers no SSL, please consider using threaded instead"))
+
+ self.core.log.info(_("Starting builtin webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
+ webinterface.run_simple(host=self.host, port=self.port)
+
+ def start_threaded(self):
+ if self.https:
+ self.core.log.info(_("Starting threaded SSL webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
+ else:
+ self.cert = ""
+ self.key = ""
+ self.core.log.info(_("Starting threaded webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
+
+ webinterface.run_threaded(host=self.host, port=self.port, cert=self.cert, key=self.key)
+
+ def start_fcgi(self):
+
+ self.core.log.info(_("Starting fastcgi server: %(host)s:%(port)d") % {"host": self.host, "port": self.port})
+ webinterface.run_fcgi(host=self.host, port=self.port)
+
+
+ def start_lightweight(self):
+ if self.https:
+ log.warning(_("This server offers no SSL, please consider using threaded instead"))
+
+ self.core.log.info(_("Starting lightweight webserver (bjoern): %(host)s:%(port)d") % {"host": self.host, "port": self.port})
+ webinterface.run_lightweight(host=self.host, port=self.port)
+
+ def quit(self):
+ self.running = False
diff --git a/module/threads/__init__.py b/pyload/threads/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/threads/__init__.py
+++ b/pyload/threads/__init__.py
diff --git a/pyload/unescape.py b/pyload/unescape.py
new file mode 100644
index 000000000..7bcc1aa72
--- /dev/null
+++ b/pyload/unescape.py
@@ -0,0 +1,3 @@
+from pyload.utils import html_unescape
+#deprecated
+unescape = html_unescape
diff --git a/module/utils.py b/pyload/utils.py
index b9eb8c88e..b9eb8c88e 100644
--- a/module/utils.py
+++ b/pyload/utils.py
diff --git a/pyload/webui/__init__.py b/pyload/webui/__init__.py
new file mode 100644
index 000000000..c421b632e
--- /dev/null
+++ b/pyload/webui/__init__.py
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+import sys
+import pyload.common.pylgettext as gettext
+
+import os
+from os.path import join, abspath, dirname, exists
+from os import makedirs
+
+THEME_DIR = abspath(join(dirname(__file__), "themes"))
+PYLOAD_DIR = abspath(join(THEME_DIR, "..", "..", ".."))
+
+sys.path.append(PYLOAD_DIR)
+
+from pyload import InitHomeDir
+from pyload.utils import decode, formatSize
+
+import bottle
+from bottle import run, app
+
+from jinja2 import Environment, FileSystemLoader, PrefixLoader, FileSystemBytecodeCache
+from middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware
+
+SETUP = None
+PYLOAD = None
+
+from pyload.threads import ServerThread
+
+if not ServerThread.core:
+ if ServerThread.setup:
+ SETUP = ServerThread.setup
+ config = SETUP.config
+ else:
+ raise Exception("Could not access pyLoad Core")
+else:
+ PYLOAD = ServerThread.core.api
+ config = ServerThread.core.config
+
+from pyload.common.JsEngine import JsEngine
+
+JS = JsEngine()
+
+THEME = config.get('webinterface', 'theme')
+DL_ROOT = config.get('general', 'download_folder')
+LOG_ROOT = config.get('log', 'log_folder')
+PREFIX = config.get('webinterface', 'prefix')
+
+if PREFIX:
+ PREFIX = PREFIX.rstrip("/")
+ if not PREFIX.startswith("/"):
+ PREFIX = "/" + PREFIX
+
+DEBUG = config.get("general", "debug_mode") or "-d" in sys.argv or "--debug" in sys.argv
+bottle.debug(DEBUG)
+
+cache = join("tmp", "jinja_cache")
+if not exists(cache):
+ makedirs(cache)
+
+bcc = FileSystemBytecodeCache(cache, '%s.cache')
+
+loader = FileSystemLoader(THEME_DIR)
+
+env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=False,
+ bytecode_cache=bcc)
+
+from filters import quotepath, path_make_relative, path_make_absolute, truncate, date
+
+env.filters["quotepath"] = quotepath
+env.filters["truncate"] = truncate
+env.filters["date"] = date
+env.filters["path_make_relative"] = path_make_relative
+env.filters["path_make_absolute"] = path_make_absolute
+env.filters["decode"] = decode
+env.filters["type"] = lambda x: str(type(x))
+env.filters["formatsize"] = formatSize
+env.filters["getitem"] = lambda x, y: x.__getitem__(y)
+if PREFIX:
+ env.filters["url"] = lambda x: x
+else:
+ env.filters["url"] = lambda x: PREFIX + x if x.startswith("/") else x
+
+gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
+translation = gettext.translation("django", join(PYLOAD_DIR, "locale"),
+ languages=[config.get("general", "language"), "en"],fallback=True)
+translation.install(True)
+env.install_gettext_translations(translation)
+
+from beaker.middleware import SessionMiddleware
+
+session_opts = {
+ 'session.type': 'file',
+ 'session.cookie_expires': False,
+ 'session.data_dir': './tmp',
+ 'session.auto': False
+}
+
+web = StripPathMiddleware(SessionMiddleware(app(), session_opts))
+web = GZipMiddleWare(web)
+
+if PREFIX:
+ web = PrefixMiddleware(web, prefix=PREFIX)
+
+import pyload.webui.app
+
+def run_simple(host="0.0.0.0", port="8000"):
+ run(app=web, host=host, port=port, quiet=True)
+
+
+def run_lightweight(host="0.0.0.0", port="8000"):
+ run(app=web, host=host, port=port, server="bjoern", quiet=True)
+
+
+def run_threaded(host="0.0.0.0", port="8000", theads=3, cert="", key=""):
+ from wsgiserver import CherryPyWSGIServer
+
+ if cert and key:
+ CherryPyWSGIServer.ssl_certificate = cert
+ CherryPyWSGIServer.ssl_private_key = key
+
+ CherryPyWSGIServer.numthreads = theads
+
+ from pyload.webui.app.utils import CherryPyWSGI
+
+ run(app=web, host=host, port=port, server=CherryPyWSGI, quiet=True)
+
+
+def run_fcgi(host="0.0.0.0", port="8000"):
+ from bottle import FlupFCGIServer
+
+ run(app=web, host=host, port=port, server=FlupFCGIServer, quiet=True)
diff --git a/pyload/webui/app/__init__.py b/pyload/webui/app/__init__.py
new file mode 100644
index 000000000..39d0fadd5
--- /dev/null
+++ b/pyload/webui/app/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from pyload.webui.app import api, cnl, json, pyload
diff --git a/pyload/webui/app/api.py b/pyload/webui/app/api.py
new file mode 100644
index 000000000..eb178f177
--- /dev/null
+++ b/pyload/webui/app/api.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+
+from urllib import unquote
+from itertools import chain
+from traceback import format_exc, print_exc
+
+from bottle import route, request, response, HTTPError
+
+from utils import toDict, set_session
+from pyload.webui import PYLOAD
+
+from pyload.common.json_layer import json
+from pyload.lib.SafeEval import const_eval as literal_eval
+from pyload.Api import BaseObject
+
+# json encoder that accepts TBase objects
+class TBaseEncoder(json.JSONEncoder):
+
+ def default(self, o):
+ if isinstance(o, BaseObject):
+ return toDict(o)
+ return json.JSONEncoder.default(self, o)
+
+
+# accepting positional arguments, as well as kwargs via post and get
+
+@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>')
+@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>', method='POST')
+def call_api(func, args=""):
+ response.headers.replace("Content-type", "application/json")
+ response.headers.append("Cache-Control", "no-cache, must-revalidate")
+
+ s = request.environ.get('beaker.session')
+ if 'session' in request.POST:
+ s = s.get_by_id(request.POST['session'])
+
+ if not s or not s.get("authenticated", False):
+ return HTTPError(403, json.dumps("Forbidden"))
+
+ if not PYLOAD.isAuthorized(func, {"role": s["role"], "permission": s["perms"]}):
+ return HTTPError(401, json.dumps("Unauthorized"))
+
+ args = args.split("/")[1:]
+ kwargs = {}
+
+ for x, y in chain(request.GET.iteritems(), request.POST.iteritems()):
+ if x == "session": continue
+ kwargs[x] = unquote(y)
+
+ try:
+ return callApi(func, *args, **kwargs)
+ except Exception, e:
+ print_exc()
+ return HTTPError(500, json.dumps({"error": e.message, "traceback": format_exc()}))
+
+
+def callApi(func, *args, **kwargs):
+ if not hasattr(PYLOAD.EXTERNAL, func) or func.startswith("_"):
+ print "Invalid API call", func
+ return HTTPError(404, json.dumps("Not Found"))
+
+ result = getattr(PYLOAD, func)(*[literal_eval(x) for x in args],
+ **dict([(x, literal_eval(y)) for x, y in kwargs.iteritems()]))
+
+ # null is invalid json response
+ if result is None: result = True
+
+ return json.dumps(result, cls=TBaseEncoder)
+
+
+#post -> username, password
+@route('/api/login', method='POST')
+def login():
+ response.headers.replace("Content-type", "application/json")
+ response.headers.append("Cache-Control", "no-cache, must-revalidate")
+
+ user = request.forms.get("username")
+ password = request.forms.get("password")
+
+ info = PYLOAD.checkAuth(user, password)
+
+ if not info:
+ return json.dumps(False)
+
+ s = set_session(request, info)
+
+ # get the session id by dirty way, documentations seems wrong
+ try:
+ sid = s._headers["cookie_out"].split("=")[1].split(";")[0]
+ return json.dumps(sid)
+ except:
+ return json.dumps(True)
+
+
+@route('/api/logout')
+def logout():
+ response.headers.replace("Content-type", "application/json")
+ response.headers.append("Cache-Control", "no-cache, must-revalidate")
+
+ s = request.environ.get('beaker.session')
+ s.delete()
diff --git a/pyload/webui/app/cnl.py b/pyload/webui/app/cnl.py
new file mode 100644
index 000000000..47c38f4ab
--- /dev/null
+++ b/pyload/webui/app/cnl.py
@@ -0,0 +1,168 @@
+# -*- coding: utf-8 -*-
+from os.path import join
+import re
+from urllib import unquote
+from base64 import standard_b64decode
+from binascii import unhexlify
+
+from bottle import route, request, HTTPError
+from pyload.webui import PYLOAD, DL_ROOT, JS
+
+
+try:
+ from Crypto.Cipher import AES
+except:
+ pass
+
+
+def local_check(function):
+ def _view(*args, **kwargs):
+ if request.environ.get("REMOTE_ADDR", "0") in ("127.0.0.1", "localhost") \
+ or request.environ.get("HTTP_HOST", "0") in ("127.0.0.1:9666", "localhost:9666"):
+ return function(*args, **kwargs)
+ else:
+ return HTTPError(403, "Forbidden")
+
+ return _view
+
+
+@route('/flash')
+@route('/flash/<id>')
+@route('/flash', method='POST')
+@local_check
+def flash(id="0"):
+ return "JDownloader\r\n"
+
+
+@route('/flash/add', method='POST')
+@local_check
+def add(request):
+ package = request.POST.get('referer', None)
+ urls = filter(lambda x: x != "", request.POST['urls'].split("\n"))
+
+ if package:
+ PYLOAD.addPackage(package, urls, 0)
+ else:
+ PYLOAD.generateAndAddPackages(urls, 0)
+
+ return ""
+
+
+@route('/flash/addcrypted', method='POST')
+@local_check
+def addcrypted():
+ package = request.forms.get('referer', 'ClickAndLoad Package')
+ dlc = request.forms['crypted'].replace(" ", "+")
+
+ dlc_path = join(DL_ROOT, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc")
+ dlc_file = open(dlc_path, "wb")
+ dlc_file.write(dlc)
+ dlc_file.close()
+
+ try:
+ PYLOAD.addPackage(package, [dlc_path], 0)
+ except:
+ return HTTPError()
+ else:
+ return "success\r\n"
+
+
+@route('/flash/addcrypted2', method='POST')
+@local_check
+def addcrypted2():
+ package = request.forms.get("source", None)
+ crypted = request.forms["crypted"]
+ jk = request.forms["jk"]
+
+ crypted = standard_b64decode(unquote(crypted.replace(" ", "+")))
+ if JS:
+ jk = "%s f()" % jk
+ jk = JS.eval(jk)
+
+ else:
+ try:
+ jk = re.findall(r"return ('|\")(.+)('|\")", jk)[0][1]
+ except:
+ ## Test for some known js functions to decode
+ if jk.find("dec") > -1 and jk.find("org") > -1:
+ org = re.findall(r"var org = ('|\")([^\"']+)", jk)[0][1]
+ jk = list(org)
+ jk.reverse()
+ jk = "".join(jk)
+ else:
+ print "Could not decrypt key, please install py-spidermonkey or ossp-js"
+
+ try:
+ Key = unhexlify(jk)
+ except:
+ print "Could not decrypt key, please install py-spidermonkey or ossp-js"
+ return "failed"
+
+ IV = Key
+
+ obj = AES.new(Key, AES.MODE_CBC, IV)
+ result = obj.decrypt(crypted).replace("\x00", "").replace("\r", "").split("\n")
+
+ result = filter(lambda x: x != "", result)
+
+ try:
+ if package:
+ PYLOAD.addPackage(package, result, 0)
+ else:
+ PYLOAD.generateAndAddPackages(result, 0)
+ except:
+ return "failed can't add"
+ else:
+ return "success\r\n"
+
+
+@route('/flashgot_pyload')
+@route('/flashgot_pyload', method='POST')
+@route('/flashgot')
+@route('/flashgot', method='POST')
+@local_check
+def flashgot():
+ if request.environ['HTTP_REFERER'] != "http://localhost:9666/flashgot" and \
+ request.environ['HTTP_REFERER'] != "http://127.0.0.1:9666/flashgot":
+ return HTTPError()
+
+ autostart = int(request.forms.get('autostart', 0))
+ package = request.forms.get('package', None)
+ urls = filter(lambda x: x != "", request.forms['urls'].split("\n"))
+ folder = request.forms.get('dir', None)
+
+ if package:
+ PYLOAD.addPackage(package, urls, autostart)
+ else:
+ PYLOAD.generateAndAddPackages(urls, autostart)
+
+ return ""
+
+
+@route('/crossdomain.xml')
+@local_check
+def crossdomain():
+ rep = "<?xml version=\"1.0\"?>\n"
+ rep += "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n"
+ rep += "<cross-domain-policy>\n"
+ rep += "<allow-access-from domain=\"*\" />\n"
+ rep += "</cross-domain-policy>"
+ return rep
+
+
+@route('/flash/checkSupportForUrl')
+@local_check
+def checksupport():
+ url = request.GET.get("url")
+ res = PYLOAD.checkURLs([url])
+ supported = (not res[0][1] is None)
+
+ return str(supported).lower()
+
+
+@route('/jdcheck.js')
+@local_check
+def jdcheck():
+ rep = "jdownloader=true;\n"
+ rep += "var version='9.581;'"
+ return rep
diff --git a/pyload/webui/app/json.py b/pyload/webui/app/json.py
new file mode 100644
index 000000000..8fa675865
--- /dev/null
+++ b/pyload/webui/app/json.py
@@ -0,0 +1,311 @@
+# -*- coding: utf-8 -*-
+
+from os.path import join
+from traceback import print_exc
+from shutil import copyfileobj
+
+from bottle import route, request, HTTPError
+
+from pyload.webui import PYLOAD
+
+from utils import login_required, render_to_response, toDict
+
+from pyload.utils import decode, formatSize
+
+
+def format_time(seconds):
+ seconds = int(seconds)
+
+ hours, seconds = divmod(seconds, 3600)
+ minutes, seconds = divmod(seconds, 60)
+ return "%.2i:%.2i:%.2i" % (hours, minutes, seconds)
+
+
+def get_sort_key(item):
+ return item["order"]
+
+
+@route('/json/status')
+@route('/json/status', method='POST')
+@login_required('LIST')
+def status():
+ try:
+ status = toDict(PYLOAD.statusServer())
+ status['captcha'] = PYLOAD.isCaptchaWaiting()
+ return status
+ except:
+ return HTTPError()
+
+
+@route('/json/links')
+@route('/json/links', method='POST')
+@login_required('LIST')
+def links():
+ try:
+ links = [toDict(x) for x in PYLOAD.statusDownloads()]
+ ids = []
+ for link in links:
+ ids.append(link['fid'])
+
+ if link['status'] == 12:
+ link['info'] = "%s @ %s/s" % (link['format_eta'], formatSize(link['speed']))
+ elif link['status'] == 5:
+ link['percent'] = 0
+ link['size'] = 0
+ link['bleft'] = 0
+ link['info'] = _("waiting %s") % link['format_wait']
+ else:
+ link['info'] = ""
+
+ data = {'links': links, 'ids': ids}
+ return data
+ except Exception, e:
+ print_exc()
+ return HTTPError()
+
+
+@route('/json/packages')
+@login_required('LIST')
+def packages():
+ print "/json/packages"
+ try:
+ data = PYLOAD.getQueue()
+
+ for package in data:
+ package['links'] = []
+ for file in PYLOAD.get_package_files(package['id']):
+ package['links'].append(PYLOAD.get_file_info(file))
+
+ return data
+
+ except:
+ return HTTPError()
+
+
+@route('/json/package/<id:int>')
+@login_required('LIST')
+def package(id):
+ try:
+ data = toDict(PYLOAD.getPackageData(id))
+ data["links"] = [toDict(x) for x in data["links"]]
+
+ for pyfile in data["links"]:
+ if pyfile["status"] == 0:
+ pyfile["icon"] = "status_finished.png"
+ elif pyfile["status"] in (2, 3):
+ pyfile["icon"] = "status_queue.png"
+ elif pyfile["status"] in (9, 1):
+ pyfile["icon"] = "status_offline.png"
+ elif pyfile["status"] == 5:
+ pyfile["icon"] = "status_waiting.png"
+ elif pyfile["status"] == 8:
+ pyfile["icon"] = "status_failed.png"
+ elif pyfile["status"] == 4:
+ pyfile["icon"] = "arrow_right.png"
+ elif pyfile["status"] in (11, 13):
+ pyfile["icon"] = "status_proc.png"
+ else:
+ pyfile["icon"] = "status_downloading.png"
+
+ tmp = data["links"]
+ tmp.sort(key=get_sort_key)
+ data["links"] = tmp
+ return data
+
+ except:
+ print_exc()
+ return HTTPError()
+
+
+@route('/json/package_order/<ids>')
+@login_required('ADD')
+def package_order(ids):
+ try:
+ pid, pos = ids.split("|")
+ PYLOAD.orderPackage(int(pid), int(pos))
+ return {"response": "success"}
+ except:
+ return HTTPError()
+
+
+@route('/json/abort_link/<id:int>')
+@login_required('DELETE')
+def abort_link(id):
+ try:
+ PYLOAD.stopDownloads([id])
+ return {"response": "success"}
+ except:
+ return HTTPError()
+
+
+@route('/json/link_order/<ids>')
+@login_required('ADD')
+def link_order(ids):
+ try:
+ pid, pos = ids.split("|")
+ PYLOAD.orderFile(int(pid), int(pos))
+ return {"response": "success"}
+ except:
+ return HTTPError()
+
+
+@route('/json/add_package')
+@route('/json/add_package', method='POST')
+@login_required('ADD')
+def add_package():
+ name = request.forms.get("add_name", "New Package").strip()
+ queue = int(request.forms['add_dest'])
+ links = decode(request.forms['add_links'])
+ links = links.split("\n")
+ pw = request.forms.get("add_password", "").strip("\n\r")
+
+ try:
+ f = request.files['add_file']
+
+ if not name or name == "New Package":
+ name = f.name
+
+ fpath = join(PYLOAD.getConfigValue("general", "download_folder"), "tmp_" + f.filename)
+ destination = open(fpath, 'wb')
+ copyfileobj(f.file, destination)
+ destination.close()
+ links.insert(0, fpath)
+ except:
+ pass
+
+ name = name.decode("utf8", "ignore")
+
+ links = map(lambda x: x.strip(), links)
+ links = filter(lambda x: x != "", links)
+
+ pack = PYLOAD.addPackage(name, links, queue)
+ if pw:
+ pw = pw.decode("utf8", "ignore")
+ data = {"password": pw}
+ PYLOAD.setPackageData(pack, data)
+
+
+@route('/json/move_package/<dest:int>/<id:int>')
+@login_required('MODIFY')
+def move_package(dest, id):
+ try:
+ PYLOAD.movePackage(dest, id)
+ return {"response": "success"}
+ except:
+ return HTTPError()
+
+
+@route('/json/edit_package', method='POST')
+@login_required('MODIFY')
+def edit_package():
+ try:
+ id = int(request.forms.get("pack_id"))
+ data = {"name": request.forms.get("pack_name").decode("utf8", "ignore"),
+ "folder": request.forms.get("pack_folder").decode("utf8", "ignore"),
+ "password": request.forms.get("pack_pws").decode("utf8", "ignore")}
+
+ PYLOAD.setPackageData(id, data)
+ return {"response": "success"}
+
+ except:
+ return HTTPError()
+
+
+@route('/json/set_captcha')
+@route('/json/set_captcha', method='POST')
+@login_required('ADD')
+def set_captcha():
+ if request.environ.get('REQUEST_METHOD', "GET") == "POST":
+ try:
+ PYLOAD.setCaptchaResult(request.forms["cap_id"], request.forms["cap_result"])
+ except:
+ pass
+
+ task = PYLOAD.getCaptchaTask()
+
+ if task.tid >= 0:
+ src = "data:image/%s;base64,%s" % (task.type, task.data)
+
+ return {'captcha': True, 'id': task.tid, 'src': src, 'result_type' : task.resultType}
+ else:
+ return {'captcha': False}
+
+
+@route('/json/load_config/<category>/<section>')
+@login_required("SETTINGS")
+def load_config(category, section):
+ conf = None
+ if category == "general":
+ conf = PYLOAD.getConfigDict()
+ elif category == "plugin":
+ conf = PYLOAD.getPluginConfigDict()
+
+ for key, option in conf[section].iteritems():
+ if key in ("desc", "outline"): continue
+
+ if ";" in option["type"]:
+ option["list"] = option["type"].split(";")
+
+ option["value"] = decode(option["value"])
+
+ return render_to_response("settings_item.html", {"skey": section, "section": conf[section]})
+
+
+@route('/json/save_config/<category>', method='POST')
+@login_required("SETTINGS")
+def save_config(category):
+ for key, value in request.POST.iteritems():
+ try:
+ section, option = key.split("|")
+ except:
+ continue
+
+ if category == "general": category = "core"
+
+ PYLOAD.setConfigValue(section, option, decode(value), category)
+
+
+@route('/json/add_account', method='POST')
+@login_required("ACCOUNTS")
+def add_account():
+ login = request.POST["account_login"]
+ password = request.POST["account_password"]
+ type = request.POST["account_type"]
+
+ PYLOAD.updateAccount(type, login, password)
+
+
+@route('/json/update_accounts', method='POST')
+@login_required("ACCOUNTS")
+def update_accounts():
+ deleted = [] #dont update deleted accs or they will be created again
+
+ for name, value in request.POST.iteritems():
+ value = value.strip()
+ if not value: continue
+
+ tmp, user = name.split(";")
+ plugin, action = tmp.split("|")
+
+ if (plugin, user) in deleted: continue
+
+ if action == "password":
+ PYLOAD.updateAccount(plugin, user, value)
+ elif action == "time" and "-" in value:
+ PYLOAD.updateAccount(plugin, user, options={"time": [value]})
+ elif action == "limitdl" and value.isdigit():
+ PYLOAD.updateAccount(plugin, user, options={"limitDL": [value]})
+ elif action == "delete":
+ deleted.append((plugin,user))
+ PYLOAD.removeAccount(plugin, user)
+
+@route('/json/change_password', method='POST')
+def change_password():
+
+ user = request.POST["user_login"]
+ oldpw = request.POST["login_current_password"]
+ newpw = request.POST["login_new_password"]
+
+ if not PYLOAD.changePassword(user, oldpw, newpw):
+ print "Wrong password"
+ return HTTPError()
diff --git a/pyload/webui/app/pyload.py b/pyload/webui/app/pyload.py
new file mode 100644
index 000000000..6887d71f2
--- /dev/null
+++ b/pyload/webui/app/pyload.py
@@ -0,0 +1,544 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+from datetime import datetime
+from operator import itemgetter, attrgetter
+
+import time
+import os
+import sys
+from os import listdir
+from os.path import isdir, isfile, join, abspath
+from sys import getfilesystemencoding
+from urllib import unquote
+
+from bottle import route, static_file, request, response, redirect, error
+
+from pyload.webui import PYLOAD, PYLOAD_DIR, THEME_DIR, SETUP, env
+
+from utils import render_to_response, parse_permissions, parse_userdata, \
+ login_required, get_permission, set_permission, permlist, toDict, set_session
+
+from pyload.webui.filters import relpath, unquotepath
+
+from pyload.utils import formatSize, safe_join, fs_encode, fs_decode
+
+# Helper
+
+def pre_processor():
+ s = request.environ.get('beaker.session')
+ user = parse_userdata(s)
+ perms = parse_permissions(s)
+ status = {}
+ captcha = False
+ update = False
+ plugins = False
+ if user["is_authenticated"]:
+ status = PYLOAD.statusServer()
+ info = PYLOAD.getInfoByPlugin("UpdateManager")
+ captcha = PYLOAD.isCaptchaWaiting()
+
+ # check if update check is available
+ if info:
+ if info["pyload"] == "True":
+ update = info["version"]
+ if info["plugins"] == "True":
+ plugins = True
+
+
+ return {"user": user,
+ 'status': status,
+ 'captcha': captcha,
+ 'perms': perms,
+ 'url': request.url,
+ 'update': update,
+ 'plugins': plugins}
+
+
+def base(messages):
+ return render_to_response('base.html', {'messages': messages}, [pre_processor])
+
+
+## Views
+@error(403)
+def error403(code):
+ return "The parameter you passed has the wrong format"
+
+
+@error(404)
+def error404(code):
+ return "Sorry, this page does not exist"
+
+
+@error(500)
+def error500(error):
+ traceback = error.traceback
+ if traceback:
+ print traceback
+ return base(["An Error occured, please enable debug mode to get more details.", error,
+ traceback.replace("\n", "<br>") if traceback else "No Traceback"])
+
+
+@route('/<theme>/<file:re:(.+/)?[^/]+\.min\.[^/]+>')
+def server_min(theme, file):
+ filename = join(THEME_DIR, theme, file)
+ if not isfile(filename):
+ file = file.replace(".min.", ".")
+ if file.endswith(".js"):
+ return server_js(theme, file)
+ else:
+ return server_static(theme, file)
+
+
+@route('/<theme>/<file_static:re:.+\.js>')
+def server_js(theme, file):
+ response.headers['Content-Type'] = "text/javascript; charset=UTF-8"
+
+ if "/render/" in file or ".render." in file:
+ response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT",
+ time.gmtime(time.time() + 24 * 7 * 60 * 60))
+ response.headers['Cache-control'] = "public"
+
+ path = join(theme, file)
+ return env.get_template(path).render()
+ else:
+ return server_static(theme, file)
+
+
+@route('/<theme>/<file:path>')
+def server_static(theme, file):
+ response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT",
+ time.gmtime(time.time() + 24 * 7 * 60 * 60))
+ response.headers['Cache-control'] = "public"
+
+ return static_file(file, root=join(THEME_DIR, theme))
+
+
+@route('/favicon.ico')
+def favicon():
+ return static_file("icon.ico", root=join(PYLOAD_DIR, "docs", "resources"))
+
+
+@route('/login', method="GET")
+def login():
+ if not PYLOAD and SETUP:
+ redirect("/setup")
+ else:
+ return render_to_response("login.html", proc=[pre_processor])
+
+
+@route('/nopermission')
+def nopermission():
+ return base([_("You dont have permission to access this page.")])
+
+
+@route('/login', method='POST')
+def login_post():
+ user = request.forms.get("username")
+ password = request.forms.get("password")
+
+ info = PYLOAD.checkAuth(user, password)
+
+ if not info:
+ return render_to_response("login.html", {"errors": True}, [pre_processor])
+
+ set_session(request, info)
+ return redirect("/")
+
+
+@route('/logout')
+def logout():
+ s = request.environ.get('beaker.session')
+ s.delete()
+ return render_to_response("logout.html", proc=[pre_processor])
+
+
+@route('/')
+@route('/home')
+@login_required("LIST")
+def home():
+ try:
+ res = [toDict(x) for x in PYLOAD.statusDownloads()]
+ except:
+ s = request.environ.get('beaker.session')
+ s.delete()
+ return redirect("/login")
+
+ for link in res:
+ if link["status"] == 12:
+ link["information"] = "%s kB @ %s kB/s" % (link["size"] - link["bleft"], link["speed"])
+
+ return render_to_response("home.html", {"res": res}, [pre_processor])
+
+
+@route('/queue')
+@login_required("LIST")
+def queue():
+ queue = PYLOAD.getQueue()
+
+ queue.sort(key=attrgetter("order"))
+
+ return render_to_response('queue.html', {'content': queue, 'target': 1}, [pre_processor])
+
+
+@route('/collector')
+@login_required('LIST')
+def collector():
+ queue = PYLOAD.getCollector()
+
+ queue.sort(key=attrgetter("order"))
+
+ return render_to_response('queue.html', {'content': queue, 'target': 0}, [pre_processor])
+
+
+@route('/downloads')
+@login_required('DOWNLOAD')
+def downloads():
+ root = PYLOAD.getConfigValue("general", "download_folder")
+
+ if not isdir(root):
+ return base([_('Download directory not found.')])
+ data = {
+ 'folder': [],
+ 'files': []
+ }
+
+ items = listdir(fs_encode(root))
+
+ for item in sorted([fs_decode(x) for x in items]):
+ if isdir(safe_join(root, item)):
+ folder = {
+ 'name': item,
+ 'path': item,
+ 'files': []
+ }
+ files = listdir(safe_join(root, item))
+ for file in sorted([fs_decode(x) for x in files]):
+ try:
+ if isfile(safe_join(root, item, file)):
+ folder['files'].append(file)
+ except:
+ pass
+
+ data['folder'].append(folder)
+ elif isfile(join(root, item)):
+ data['files'].append(item)
+
+ return render_to_response('downloads.html', {'files': data}, [pre_processor])
+
+
+@route('/downloads/get/<path:path>')
+@login_required("DOWNLOAD")
+def get_download(path):
+ path = unquote(path).decode("utf8")
+ #@TODO some files can not be downloaded
+
+ root = PYLOAD.getConfigValue("general", "download_folder")
+
+ path = path.replace("..", "")
+ return static_file(fs_encode(path), fs_encode(root))
+
+
+
+@route('/settings')
+@login_required('SETTINGS')
+def config():
+ conf = PYLOAD.getConfig()
+ plugin = PYLOAD.getPluginConfig()
+
+ conf_menu = []
+ plugin_menu = []
+
+ for entry in sorted(conf.keys()):
+ conf_menu.append((entry, conf[entry].description))
+
+ for entry in sorted(plugin.keys()):
+ plugin_menu.append((entry, plugin[entry].description))
+
+ accs = PYLOAD.getAccounts(False)
+
+ for data in accs:
+ if data.trafficleft == -1:
+ data.trafficleft = _("unlimited")
+ elif not data.trafficleft:
+ data.trafficleft = _("not available")
+ else:
+ data.trafficleft = formatSize(data.trafficleft * 1024)
+
+ if data.validuntil == -1:
+ data.validuntil = _("unlimited")
+ elif not data.validuntil :
+ data.validuntil = _("not available")
+ else:
+ t = time.localtime(data.validuntil)
+ data.validuntil = time.strftime("%d.%m.%Y - %H:%M:%S", t)
+
+ try:
+ data.options["time"] = data.options["time"][0]
+ except:
+ data.options["time"] = "0:00-0:00"
+
+ if "limitDL" in data.options:
+ data.options["limitdl"] = data.options["limitDL"][0]
+ else:
+ data.options["limitdl"] = "0"
+
+ return render_to_response('settings.html',
+ {'conf': {'plugin': plugin_menu, 'general': conf_menu, 'accs': accs}, 'types': PYLOAD.getAccountTypes()},
+ [pre_processor])
+
+
+@route('/filechooser')
+@route('/pathchooser')
+@route('/filechooser/<file:path>')
+@route('/pathchooser/<path:path>')
+@login_required('STATUS')
+def path(file="", path=""):
+ if file:
+ type = "file"
+ else:
+ type = "folder"
+
+ path = os.path.normpath(unquotepath(path))
+
+ if os.path.isfile(path):
+ oldfile = path
+ path = os.path.dirname(path)
+ else:
+ oldfile = ''
+
+ abs = False
+
+ if os.path.isdir(path):
+ if os.path.isabs(path):
+ cwd = os.path.abspath(path)
+ abs = True
+ else:
+ cwd = relpath(path)
+ else:
+ cwd = os.getcwd()
+
+ try:
+ cwd = cwd.encode("utf8")
+ except:
+ pass
+
+ cwd = os.path.normpath(os.path.abspath(cwd))
+ parentdir = os.path.dirname(cwd)
+ if not abs:
+ if os.path.abspath(cwd) == "/":
+ cwd = relpath(cwd)
+ else:
+ cwd = relpath(cwd) + os.path.sep
+ parentdir = relpath(parentdir) + os.path.sep
+
+ if os.path.abspath(cwd) == "/":
+ parentdir = ""
+
+ try:
+ folders = os.listdir(cwd)
+ except:
+ folders = []
+
+ files = []
+
+ for f in folders:
+ try:
+ f = f.decode(getfilesystemencoding())
+ data = {'name': f, 'fullpath': join(cwd, f)}
+ data['sort'] = data['fullpath'].lower()
+ data['modified'] = datetime.fromtimestamp(int(os.path.getmtime(join(cwd, f))))
+ data['ext'] = os.path.splitext(f)[1]
+ except:
+ continue
+
+ if os.path.isdir(join(cwd, f)):
+ data['type'] = 'dir'
+ else:
+ data['type'] = 'file'
+
+ if os.path.isfile(join(cwd, f)):
+ data['size'] = os.path.getsize(join(cwd, f))
+
+ power = 0
+ while (data['size'] / 1024) > 0.3:
+ power += 1
+ data['size'] /= 1024.
+ units = ('', 'K', 'M', 'G', 'T')
+ data['unit'] = units[power] + 'Byte'
+ else:
+ data['size'] = ''
+
+ files.append(data)
+
+ files = sorted(files, key=itemgetter('type', 'sort'))
+
+ return render_to_response('pathchooser.html',
+ {'cwd': cwd, 'files': files, 'parentdir': parentdir, 'type': type, 'oldfile': oldfile,
+ 'absolute': abs}, [])
+
+
+@route('/logs')
+@route('/logs', method='POST')
+@route('/logs/<item>')
+@route('/logs/<item>', method='POST')
+@login_required('LOGS')
+def logs(item=-1):
+ s = request.environ.get('beaker.session')
+
+ perpage = s.get('perpage', 34)
+ reversed = s.get('reversed', False)
+
+ warning = ""
+ conf = PYLOAD.getConfigValue("log", "file_log")
+ if not conf:
+ warning = "Warning: File log is disabled, see settings page."
+
+ perpage_p = ((20, 20), (34, 34), (40, 40), (100, 100), (0, 'all'))
+ fro = None
+
+ if request.environ.get('REQUEST_METHOD', "GET") == "POST":
+ try:
+ fro = datetime.strptime(request.forms['from'], '%d.%m.%Y %H:%M:%S')
+ except:
+ pass
+ try:
+ perpage = int(request.forms['perpage'])
+ s['perpage'] = perpage
+
+ reversed = bool(request.forms.get('reversed', False))
+ s['reversed'] = reversed
+ except:
+ pass
+
+ s.save()
+
+ try:
+ item = int(item)
+ except:
+ pass
+
+ log = PYLOAD.getLog()
+ if not perpage:
+ item = 0
+
+ if item < 1 or type(item) is not int:
+ item = 1 if len(log) - perpage + 1 < 1 else len(log) - perpage + 1
+
+ if type(fro) is datetime: # we will search for datetime
+ item = -1
+
+ data = []
+ counter = 0
+ perpagecheck = 0
+ for l in log:
+ counter += 1
+
+ if counter >= item:
+ try:
+ date, time, level, message = l.decode("utf8", "ignore").split(" ", 3)
+ dtime = datetime.strptime(date + ' ' + time, '%d.%m.%Y %H:%M:%S')
+ except:
+ dtime = None
+ date = '?'
+ time = ' '
+ level = '?'
+ message = l
+ if item == -1 and dtime is not None and fro <= dtime:
+ item = counter #found our datetime
+ if item >= 0:
+ data.append({'line': counter, 'date': date + " " + time, 'level': level, 'message': message})
+ perpagecheck += 1
+ if fro is None and dtime is not None: #if fro not set set it to first showed line
+ fro = dtime
+ if perpagecheck >= perpage > 0:
+ break
+
+ if fro is None: #still not set, empty log?
+ fro = datetime.now()
+ if reversed:
+ data.reverse()
+ return render_to_response('logs.html', {'warning': warning, 'log': data, 'from': fro.strftime('%d.%m.%Y %H:%M:%S'),
+ 'reversed': reversed, 'perpage': perpage, 'perpage_p': sorted(perpage_p),
+ 'iprev': 1 if item - perpage < 1 else item - perpage,
+ 'inext': (item + perpage) if item + perpage < len(log) else item},
+ [pre_processor])
+
+
+@route('/admin')
+@route('/admin', method='POST')
+@login_required("ADMIN")
+def admin():
+ # convert to dict
+ user = dict([(name, toDict(y)) for name, y in PYLOAD.getAllUserData().iteritems()])
+ perms = permlist()
+
+ for data in user.itervalues():
+ data["perms"] = {}
+ get_permission(data["perms"], data["permission"])
+ data["perms"]["admin"] = True if data["role"] is 0 else False
+
+
+ s = request.environ.get('beaker.session')
+ if request.environ.get('REQUEST_METHOD', "GET") == "POST":
+ for name in user:
+ if request.POST.get("%s|admin" % name, False):
+ user[name]["role"] = 0
+ user[name]["perms"]["admin"] = True
+ elif name != s["name"]:
+ user[name]["role"] = 1
+ user[name]["perms"]["admin"] = False
+
+ # set all perms to false
+ for perm in perms:
+ user[name]["perms"][perm] = False
+
+ for perm in request.POST.getall("%s|perms" % name):
+ user[name]["perms"][perm] = True
+
+ user[name]["permission"] = set_permission(user[name]["perms"])
+
+ PYLOAD.setUserPermission(name, user[name]["permission"], user[name]["role"])
+
+ return render_to_response("admin.html", {"users": user, "permlist": perms}, [pre_processor])
+
+
+@route('/setup')
+def setup():
+ return base([_("Run pyload.py -s to access the setup.")])
+
+
+@route('/info')
+def info():
+ conf = PYLOAD.getConfigDict()
+
+ if hasattr(os, "uname"):
+ extra = os.uname()
+ else:
+ extra = tuple()
+
+ data = {"python": sys.version,
+ "os": " ".join((os.name, sys.platform) + extra),
+ "version": PYLOAD.getServerVersion(),
+ "folder": abspath(PYLOAD_DIR), "config": abspath(""),
+ "download": abspath(conf["general"]["download_folder"]["value"]),
+ "freespace": formatSize(PYLOAD.freeSpace()),
+ "remote": conf["remote"]["port"]["value"],
+ "webif": conf["webinterface"]["port"]["value"],
+ "language": conf["general"]["language"]["value"]}
+
+ return render_to_response("info.html", data, [pre_processor])
diff --git a/pyload/webui/app/utils.py b/pyload/webui/app/utils.py
new file mode 100644
index 000000000..895696c19
--- /dev/null
+++ b/pyload/webui/app/utils.py
@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this plrogram; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
+
+from os.path import join
+
+from bottle import request, HTTPError, redirect, ServerAdapter
+
+from pyload.webui import env, THEME
+
+from pyload.Api import has_permission, PERMS, ROLE
+
+def render_to_response(file, args={}, proc=[]):
+ for p in proc:
+ args.update(p())
+ path = join(THEME, "tml", file)
+ return env.get_template(path).render(**args)
+
+
+def parse_permissions(session):
+ perms = dict([(x, False) for x in dir(PERMS) if not x.startswith("_")])
+ perms["ADMIN"] = False
+ perms["is_admin"] = False
+
+ if not session.get("authenticated", False):
+ return perms
+
+ if session.get("role") == ROLE.ADMIN:
+ for k in perms.iterkeys():
+ perms[k] = True
+
+ elif session.get("perms"):
+ p = session.get("perms")
+ get_permission(perms, p)
+
+ return perms
+
+
+def permlist():
+ return [x for x in dir(PERMS) if not x.startswith("_") and x != "ALL"]
+
+
+def get_permission(perms, p):
+ """Returns a dict with permission key
+
+ :param perms: dictionary
+ :param p: bits
+ """
+ for name in permlist():
+ perms[name] = has_permission(p, getattr(PERMS, name))
+
+
+def set_permission(perms):
+ """generates permission bits from dictionary
+
+ :param perms: dict
+ """
+ permission = 0
+ for name in dir(PERMS):
+ if name.startswith("_"): continue
+
+ if name in perms and perms[name]:
+ permission |= getattr(PERMS, name)
+
+ return permission
+
+
+def set_session(request, info):
+ s = request.environ.get('beaker.session')
+ s["authenticated"] = True
+ s["user_id"] = info["id"]
+ s["name"] = info["name"]
+ s["role"] = info["role"]
+ s["perms"] = info["permission"]
+ s["template"] = info["template"]
+ s.save()
+
+ return s
+
+
+def parse_userdata(session):
+ return {"name": session.get("name", "Anonymous"),
+ "is_admin": True if session.get("role", 1) == 0 else False,
+ "is_authenticated": session.get("authenticated", False)}
+
+
+def login_required(perm=None):
+ def _dec(func):
+ def _view(*args, **kwargs):
+ s = request.environ.get('beaker.session')
+ if s.get("name", None) and s.get("authenticated", False):
+ if perm:
+ perms = parse_permissions(s)
+ if perm not in perms or not perms[perm]:
+ if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
+ return HTTPError(403, "Forbidden")
+ else:
+ return redirect("/nopermission")
+
+ return func(*args, **kwargs)
+ else:
+ if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
+ return HTTPError(403, "Forbidden")
+ else:
+ return redirect("/login")
+
+ return _view
+
+ return _dec
+
+
+def toDict(obj):
+ ret = {}
+ for att in obj.__slots__:
+ ret[att] = getattr(obj, att)
+ return ret
+
+
+class CherryPyWSGI(ServerAdapter):
+ def run(self, handler):
+ from wsgiserver import CherryPyWSGIServer
+
+ server = CherryPyWSGIServer((self.host, self.port), handler)
+ server.start()
diff --git a/module/webui/filters.py b/pyload/webui/filters.py
index c5e9447ee..c5e9447ee 100644
--- a/module/webui/filters.py
+++ b/pyload/webui/filters.py
diff --git a/module/webui/middlewares.py b/pyload/webui/middlewares.py
index 5f56f81ee..5f56f81ee 100644
--- a/module/webui/middlewares.py
+++ b/pyload/webui/middlewares.py
diff --git a/pyload/webui/servers/lighttpd_default.conf b/pyload/webui/servers/lighttpd_default.conf
new file mode 100644
index 000000000..d4cc00629
--- /dev/null
+++ b/pyload/webui/servers/lighttpd_default.conf
@@ -0,0 +1,153 @@
+# lighttpd configuration file
+#
+# use it as a base for lighttpd 1.0.0 and above
+#
+# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# at least mod_access and mod_accesslog should be loaded
+# all other module should only be loaded if really neccesary
+# - saves some time
+# - saves memory
+server.modules = (
+ "mod_rewrite",
+ "mod_redirect",
+ "mod_alias",
+ "mod_access",
+# "mod_trigger_b4_dl",
+# "mod_auth",
+# "mod_status",
+# "mod_setenv",
+ "mod_fastcgi",
+# "mod_proxy",
+# "mod_simple_vhost",
+# "mod_evhost",
+# "mod_userdir",
+# "mod_cgi",
+# "mod_compress",
+# "mod_ssi",
+# "mod_usertrack",
+# "mod_expire",
+# "mod_secdownload",
+# "mod_rrdtool",
+# "mod_accesslog"
+ )
+
+## A static document-root. For virtual hosting take a look at the
+## mod_simple_vhost pyload.
+server.document-root = "%(path)"
+
+## where to send error-messages to
+server.errorlog = "%(path)/error.log"
+
+# files to check for if .../ is requested
+index-file.names = ( "index.php", "index.html",
+ "index.htm", "default.htm" )
+
+## set the event-handler (read the performance section in the manual)
+# server.event-handler = "freebsd-kqueue" # needed on OS X
+
+# mimetype mapping
+mimetype.assign = (
+ ".pdf" => "application/pdf",
+ ".sig" => "application/pgp-signature",
+ ".spl" => "application/futuresplash",
+ ".class" => "application/octet-stream",
+ ".ps" => "application/postscript",
+ ".torrent" => "application/x-bittorrent",
+ ".dvi" => "application/x-dvi",
+ ".gz" => "application/x-gzip",
+ ".pac" => "application/x-ns-proxy-autoconfig",
+ ".swf" => "application/x-shockwave-flash",
+ ".tar.gz" => "application/x-tgz",
+ ".tgz" => "application/x-tgz",
+ ".tar" => "application/x-tar",
+ ".zip" => "application/zip",
+ ".mp3" => "audio/mpeg",
+ ".m3u" => "audio/x-mpegurl",
+ ".wma" => "audio/x-ms-wma",
+ ".wax" => "audio/x-ms-wax",
+ ".ogg" => "application/ogg",
+ ".wav" => "audio/x-wav",
+ ".gif" => "image/gif",
+ ".jar" => "application/x-java-archive",
+ ".jpg" => "image/jpeg",
+ ".jpeg" => "image/jpeg",
+ ".png" => "image/png",
+ ".xbm" => "image/x-xbitmap",
+ ".xpm" => "image/x-xpixmap",
+ ".xwd" => "image/x-xwindowdump",
+ ".css" => "text/css",
+ ".html" => "text/html",
+ ".htm" => "text/html",
+ ".js" => "text/javascript",
+ ".asc" => "text/plain",
+ ".c" => "text/plain",
+ ".cpp" => "text/plain",
+ ".log" => "text/plain",
+ ".conf" => "text/plain",
+ ".text" => "text/plain",
+ ".txt" => "text/plain",
+ ".dtd" => "text/xml",
+ ".xml" => "text/xml",
+ ".mpeg" => "video/mpeg",
+ ".mpg" => "video/mpeg",
+ ".mov" => "video/quicktime",
+ ".qt" => "video/quicktime",
+ ".avi" => "video/x-msvideo",
+ ".asf" => "video/x-ms-asf",
+ ".asx" => "video/x-ms-asf",
+ ".wmv" => "video/x-ms-wmv",
+ ".bz2" => "application/x-bzip",
+ ".tbz" => "application/x-bzip-compressed-tar",
+ ".tar.bz2" => "application/x-bzip-compressed-tar",
+ # default mime type
+ "" => "application/octet-stream",
+ )
+
+# Use the "Content-Type" extended attribute to obtain mime type if possible
+#mimetype.use-xattr = "enable"
+
+#### accesslog module
+accesslog.filename = "%(path)/access.log"
+
+url.access-deny = ( "~", ".inc" )
+
+$HTTP["url"] =~ "\.pdf$" {
+ server.range-requests = "disable"
+}
+static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
+
+server.pid-file = "%(path)/lighttpd.pid"
+
+server.bind = "%(host)"
+server.port = %(port)
+
+#server.document-root = "/home/user/public_html"
+fastcgi.server = (
+ "/pyload.fcgi" => (
+ "main" => (
+ "host" => "127.0.0.1",
+ "port" => 9295,
+ "check-local" => "disable",
+ "docroot" => "/",
+ )
+ ),
+)
+
+alias.url = (
+ "/media/" => "%(media)/",
+ "/admin/media/" => "/usr/lib/python%(version)/site-packages/django/contrib/admin/media/",
+)
+
+url.rewrite-once = (
+ "^(/media.*)$" => "$1",
+ "^(/admin/media.*)$" => "$1",
+ "^/favicon\.ico$" => "/media/img/favicon.ico",
+ "^(/pyload.fcgi.*)$" => "$1",
+ "^(/.*)$" => "/pyload.fcgi$1",
+)
+
+%(ssl)
diff --git a/module/webui/servers/nginx_default.conf b/pyload/webui/servers/nginx_default.conf
index b4ebd1e02..b4ebd1e02 100644
--- a/module/webui/servers/nginx_default.conf
+++ b/pyload/webui/servers/nginx_default.conf
diff --git a/module/webui/themes/dark/css/MooDialog.css b/pyload/webui/themes/dark/css/MooDialog.css
index dd0c0a601..dd0c0a601 100644
--- a/module/webui/themes/dark/css/MooDialog.css
+++ b/pyload/webui/themes/dark/css/MooDialog.css
diff --git a/module/webui/themes/dark/css/dark.css b/pyload/webui/themes/dark/css/dark.css
index ca16d0621..ca16d0621 100644
--- a/module/webui/themes/dark/css/dark.css
+++ b/pyload/webui/themes/dark/css/dark.css
diff --git a/module/webui/themes/dark/css/log.css b/pyload/webui/themes/dark/css/log.css
index 41aa19616..41aa19616 100644
--- a/module/webui/themes/dark/css/log.css
+++ b/pyload/webui/themes/dark/css/log.css
diff --git a/module/webui/themes/dark/css/pathchooser.css b/pyload/webui/themes/dark/css/pathchooser.css
index 894cc335e..894cc335e 100644
--- a/module/webui/themes/dark/css/pathchooser.css
+++ b/pyload/webui/themes/dark/css/pathchooser.css
diff --git a/module/webui/themes/dark/css/window.css b/pyload/webui/themes/dark/css/window.css
index 11ba84b39..11ba84b39 100644
--- a/module/webui/themes/dark/css/window.css
+++ b/pyload/webui/themes/dark/css/window.css
diff --git a/module/webui/themes/dark/img/MooDialog/dialog-close.png b/pyload/webui/themes/dark/img/MooDialog/dialog-close.png
index 81ebb88b2..81ebb88b2 100644
--- a/module/webui/themes/dark/img/MooDialog/dialog-close.png
+++ b/pyload/webui/themes/dark/img/MooDialog/dialog-close.png
Binary files differ
diff --git a/module/webui/themes/dark/img/MooDialog/dialog-error.png b/pyload/webui/themes/dark/img/MooDialog/dialog-error.png
index d70328403..d70328403 100644
--- a/module/webui/themes/dark/img/MooDialog/dialog-error.png
+++ b/pyload/webui/themes/dark/img/MooDialog/dialog-error.png
Binary files differ
diff --git a/module/webui/themes/dark/img/MooDialog/dialog-question.png b/pyload/webui/themes/dark/img/MooDialog/dialog-question.png
index b0af3db5b..b0af3db5b 100644
--- a/module/webui/themes/dark/img/MooDialog/dialog-question.png
+++ b/pyload/webui/themes/dark/img/MooDialog/dialog-question.png
Binary files differ
diff --git a/module/webui/themes/dark/img/MooDialog/dialog-warning.png b/pyload/webui/themes/dark/img/MooDialog/dialog-warning.png
index aad64d4be..aad64d4be 100644
--- a/module/webui/themes/dark/img/MooDialog/dialog-warning.png
+++ b/pyload/webui/themes/dark/img/MooDialog/dialog-warning.png
Binary files differ
diff --git a/module/webui/themes/dark/img/button.png b/pyload/webui/themes/dark/img/button.png
index bb408a7d6..bb408a7d6 100644
--- a/module/webui/themes/dark/img/button.png
+++ b/pyload/webui/themes/dark/img/button.png
Binary files differ
diff --git a/module/webui/themes/dark/img/dark-bg.jpg b/pyload/webui/themes/dark/img/dark-bg.jpg
index 637fa6b93..637fa6b93 100644
--- a/module/webui/themes/dark/img/dark-bg.jpg
+++ b/pyload/webui/themes/dark/img/dark-bg.jpg
Binary files differ
diff --git a/module/webui/themes/dark/img/default/add_folder.png b/pyload/webui/themes/dark/img/default/add_folder.png
index 8acbc411b..8acbc411b 100644
--- a/module/webui/themes/dark/img/default/add_folder.png
+++ b/pyload/webui/themes/dark/img/default/add_folder.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/ajax-loader.gif b/pyload/webui/themes/dark/img/default/ajax-loader.gif
index 2fd8e0737..2fd8e0737 100644
--- a/module/webui/themes/dark/img/default/ajax-loader.gif
+++ b/pyload/webui/themes/dark/img/default/ajax-loader.gif
Binary files differ
diff --git a/module/webui/themes/dark/img/default/arrow_refresh.png b/pyload/webui/themes/dark/img/default/arrow_refresh.png
index 0de26566d..0de26566d 100644
--- a/module/webui/themes/dark/img/default/arrow_refresh.png
+++ b/pyload/webui/themes/dark/img/default/arrow_refresh.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/arrow_right.png b/pyload/webui/themes/dark/img/default/arrow_right.png
index b1a181923..b1a181923 100644
--- a/module/webui/themes/dark/img/default/arrow_right.png
+++ b/pyload/webui/themes/dark/img/default/arrow_right.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/big_button.gif b/pyload/webui/themes/dark/img/default/big_button.gif
index 7680490ea..7680490ea 100644
--- a/module/webui/themes/dark/img/default/big_button.gif
+++ b/pyload/webui/themes/dark/img/default/big_button.gif
Binary files differ
diff --git a/module/webui/themes/dark/img/default/big_button_over.gif b/pyload/webui/themes/dark/img/default/big_button_over.gif
index 2e3ee10d2..2e3ee10d2 100644
--- a/module/webui/themes/dark/img/default/big_button_over.gif
+++ b/pyload/webui/themes/dark/img/default/big_button_over.gif
Binary files differ
diff --git a/module/webui/themes/dark/img/default/body.png b/pyload/webui/themes/dark/img/default/body.png
index 7ff1043e0..7ff1043e0 100644
--- a/module/webui/themes/dark/img/default/body.png
+++ b/pyload/webui/themes/dark/img/default/body.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/closebtn.gif b/pyload/webui/themes/dark/img/default/closebtn.gif
index 3e27e6030..3e27e6030 100644
--- a/module/webui/themes/dark/img/default/closebtn.gif
+++ b/pyload/webui/themes/dark/img/default/closebtn.gif
Binary files differ
diff --git a/module/webui/themes/dark/img/default/cog.png b/pyload/webui/themes/dark/img/default/cog.png
index 67de2c6cc..67de2c6cc 100644
--- a/module/webui/themes/dark/img/default/cog.png
+++ b/pyload/webui/themes/dark/img/default/cog.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_add.png b/pyload/webui/themes/dark/img/default/control_add.png
index d39886893..d39886893 100644
--- a/module/webui/themes/dark/img/default/control_add.png
+++ b/pyload/webui/themes/dark/img/default/control_add.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_add_blue.png b/pyload/webui/themes/dark/img/default/control_add_blue.png
index d11b7f41d..d11b7f41d 100644
--- a/module/webui/themes/dark/img/default/control_add_blue.png
+++ b/pyload/webui/themes/dark/img/default/control_add_blue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_cancel.png b/pyload/webui/themes/dark/img/default/control_cancel.png
index 7b9bc3fba..7b9bc3fba 100644
--- a/module/webui/themes/dark/img/default/control_cancel.png
+++ b/pyload/webui/themes/dark/img/default/control_cancel.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_cancel_blue.png b/pyload/webui/themes/dark/img/default/control_cancel_blue.png
index 0c5c96ce3..0c5c96ce3 100644
--- a/module/webui/themes/dark/img/default/control_cancel_blue.png
+++ b/pyload/webui/themes/dark/img/default/control_cancel_blue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_pause.png b/pyload/webui/themes/dark/img/default/control_pause.png
index 2d9ce9c4e..2d9ce9c4e 100644
--- a/module/webui/themes/dark/img/default/control_pause.png
+++ b/pyload/webui/themes/dark/img/default/control_pause.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_pause_blue.png b/pyload/webui/themes/dark/img/default/control_pause_blue.png
index ec61099b0..ec61099b0 100644
--- a/module/webui/themes/dark/img/default/control_pause_blue.png
+++ b/pyload/webui/themes/dark/img/default/control_pause_blue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_play.png b/pyload/webui/themes/dark/img/default/control_play.png
index 0846555d0..0846555d0 100644
--- a/module/webui/themes/dark/img/default/control_play.png
+++ b/pyload/webui/themes/dark/img/default/control_play.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_play_blue.png b/pyload/webui/themes/dark/img/default/control_play_blue.png
index f8c8ec683..f8c8ec683 100644
--- a/module/webui/themes/dark/img/default/control_play_blue.png
+++ b/pyload/webui/themes/dark/img/default/control_play_blue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_stop.png b/pyload/webui/themes/dark/img/default/control_stop.png
index 893bb60e5..893bb60e5 100644
--- a/module/webui/themes/dark/img/default/control_stop.png
+++ b/pyload/webui/themes/dark/img/default/control_stop.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/control_stop_blue.png b/pyload/webui/themes/dark/img/default/control_stop_blue.png
index e6f75d232..e6f75d232 100644
--- a/module/webui/themes/dark/img/default/control_stop_blue.png
+++ b/pyload/webui/themes/dark/img/default/control_stop_blue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/delete.png b/pyload/webui/themes/dark/img/default/delete.png
index 08f249365..08f249365 100644
--- a/module/webui/themes/dark/img/default/delete.png
+++ b/pyload/webui/themes/dark/img/default/delete.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/drag_corner.gif b/pyload/webui/themes/dark/img/default/drag_corner.gif
index befb1adf1..befb1adf1 100644
--- a/module/webui/themes/dark/img/default/drag_corner.gif
+++ b/pyload/webui/themes/dark/img/default/drag_corner.gif
Binary files differ
diff --git a/module/webui/themes/dark/img/default/error.png b/pyload/webui/themes/dark/img/default/error.png
index c37bd062e..c37bd062e 100644
--- a/module/webui/themes/dark/img/default/error.png
+++ b/pyload/webui/themes/dark/img/default/error.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/folder.png b/pyload/webui/themes/dark/img/default/folder.png
index 784e8fa48..784e8fa48 100644
--- a/module/webui/themes/dark/img/default/folder.png
+++ b/pyload/webui/themes/dark/img/default/folder.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/full.png b/pyload/webui/themes/dark/img/default/full.png
index fea52af76..fea52af76 100644
--- a/module/webui/themes/dark/img/default/full.png
+++ b/pyload/webui/themes/dark/img/default/full.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-login.png b/pyload/webui/themes/dark/img/default/head-login.png
index b59b7cbbf..b59b7cbbf 100644
--- a/module/webui/themes/dark/img/default/head-login.png
+++ b/pyload/webui/themes/dark/img/default/head-login.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-collector.png b/pyload/webui/themes/dark/img/default/head-menu-collector.png
index 861be40bc..861be40bc 100644
--- a/module/webui/themes/dark/img/default/head-menu-collector.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-collector.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-config.png b/pyload/webui/themes/dark/img/default/head-menu-config.png
index bbf43d4f3..bbf43d4f3 100644
--- a/module/webui/themes/dark/img/default/head-menu-config.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-config.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-development.png b/pyload/webui/themes/dark/img/default/head-menu-development.png
index fad150fe1..fad150fe1 100644
--- a/module/webui/themes/dark/img/default/head-menu-development.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-development.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-download.png b/pyload/webui/themes/dark/img/default/head-menu-download.png
index 98c5da9db..98c5da9db 100644
--- a/module/webui/themes/dark/img/default/head-menu-download.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-download.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-home.png b/pyload/webui/themes/dark/img/default/head-menu-home.png
index 9d62109aa..9d62109aa 100644
--- a/module/webui/themes/dark/img/default/head-menu-home.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-home.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-index.png b/pyload/webui/themes/dark/img/default/head-menu-index.png
index 44d631064..44d631064 100644
--- a/module/webui/themes/dark/img/default/head-menu-index.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-index.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-news.png b/pyload/webui/themes/dark/img/default/head-menu-news.png
index 43950ebc9..43950ebc9 100644
--- a/module/webui/themes/dark/img/default/head-menu-news.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-news.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-queue.png b/pyload/webui/themes/dark/img/default/head-menu-queue.png
index be98793ce..be98793ce 100644
--- a/module/webui/themes/dark/img/default/head-menu-queue.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-queue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-recent.png b/pyload/webui/themes/dark/img/default/head-menu-recent.png
index fc9b0497f..fc9b0497f 100644
--- a/module/webui/themes/dark/img/default/head-menu-recent.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-recent.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-menu-wiki.png b/pyload/webui/themes/dark/img/default/head-menu-wiki.png
index 07cf0102d..07cf0102d 100644
--- a/module/webui/themes/dark/img/default/head-menu-wiki.png
+++ b/pyload/webui/themes/dark/img/default/head-menu-wiki.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head-search-noshadow.png b/pyload/webui/themes/dark/img/default/head-search-noshadow.png
index aafdae015..aafdae015 100644
--- a/module/webui/themes/dark/img/default/head-search-noshadow.png
+++ b/pyload/webui/themes/dark/img/default/head-search-noshadow.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/head_bg1.png b/pyload/webui/themes/dark/img/default/head_bg1.png
index f2848c3cc..f2848c3cc 100644
--- a/module/webui/themes/dark/img/default/head_bg1.png
+++ b/pyload/webui/themes/dark/img/default/head_bg1.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/images.png b/pyload/webui/themes/dark/img/default/images.png
index 184860d1e..184860d1e 100644
--- a/module/webui/themes/dark/img/default/images.png
+++ b/pyload/webui/themes/dark/img/default/images.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/notice.png b/pyload/webui/themes/dark/img/default/notice.png
index 12cd1aef9..12cd1aef9 100644
--- a/module/webui/themes/dark/img/default/notice.png
+++ b/pyload/webui/themes/dark/img/default/notice.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/package_go.png b/pyload/webui/themes/dark/img/default/package_go.png
index aace63ad6..aace63ad6 100644
--- a/module/webui/themes/dark/img/default/package_go.png
+++ b/pyload/webui/themes/dark/img/default/package_go.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/page-tools-backlinks.png b/pyload/webui/themes/dark/img/default/page-tools-backlinks.png
index 3eb6a9ce3..3eb6a9ce3 100644
--- a/module/webui/themes/dark/img/default/page-tools-backlinks.png
+++ b/pyload/webui/themes/dark/img/default/page-tools-backlinks.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/page-tools-edit.png b/pyload/webui/themes/dark/img/default/page-tools-edit.png
index 188e1c12b..188e1c12b 100644
--- a/module/webui/themes/dark/img/default/page-tools-edit.png
+++ b/pyload/webui/themes/dark/img/default/page-tools-edit.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/page-tools-revisions.png b/pyload/webui/themes/dark/img/default/page-tools-revisions.png
index 5c3b8587f..5c3b8587f 100644
--- a/module/webui/themes/dark/img/default/page-tools-revisions.png
+++ b/pyload/webui/themes/dark/img/default/page-tools-revisions.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/parseUri.png b/pyload/webui/themes/dark/img/default/parseUri.png
index 937bded9d..937bded9d 100644
--- a/module/webui/themes/dark/img/default/parseUri.png
+++ b/pyload/webui/themes/dark/img/default/parseUri.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/pencil.png b/pyload/webui/themes/dark/img/default/pencil.png
index 0bfecd50e..0bfecd50e 100644
--- a/module/webui/themes/dark/img/default/pencil.png
+++ b/pyload/webui/themes/dark/img/default/pencil.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/reconnect.png b/pyload/webui/themes/dark/img/default/reconnect.png
index 49b269145..49b269145 100644
--- a/module/webui/themes/dark/img/default/reconnect.png
+++ b/pyload/webui/themes/dark/img/default/reconnect.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_None.png b/pyload/webui/themes/dark/img/default/status_None.png
index 293b13f77..293b13f77 100644
--- a/module/webui/themes/dark/img/default/status_None.png
+++ b/pyload/webui/themes/dark/img/default/status_None.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_downloading.png b/pyload/webui/themes/dark/img/default/status_downloading.png
index fb4ebc850..fb4ebc850 100644
--- a/module/webui/themes/dark/img/default/status_downloading.png
+++ b/pyload/webui/themes/dark/img/default/status_downloading.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_failed.png b/pyload/webui/themes/dark/img/default/status_failed.png
index c37bd062e..c37bd062e 100644
--- a/module/webui/themes/dark/img/default/status_failed.png
+++ b/pyload/webui/themes/dark/img/default/status_failed.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_finished.png b/pyload/webui/themes/dark/img/default/status_finished.png
index 89c8129a4..89c8129a4 100644
--- a/module/webui/themes/dark/img/default/status_finished.png
+++ b/pyload/webui/themes/dark/img/default/status_finished.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_offline.png b/pyload/webui/themes/dark/img/default/status_offline.png
index 0cfd58596..0cfd58596 100644
--- a/module/webui/themes/dark/img/default/status_offline.png
+++ b/pyload/webui/themes/dark/img/default/status_offline.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_proc.png b/pyload/webui/themes/dark/img/default/status_proc.png
index 67de2c6cc..67de2c6cc 100644
--- a/module/webui/themes/dark/img/default/status_proc.png
+++ b/pyload/webui/themes/dark/img/default/status_proc.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_queue.png b/pyload/webui/themes/dark/img/default/status_queue.png
index 293b13f77..293b13f77 100644
--- a/module/webui/themes/dark/img/default/status_queue.png
+++ b/pyload/webui/themes/dark/img/default/status_queue.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/status_waiting.png b/pyload/webui/themes/dark/img/default/status_waiting.png
index 2842cc338..2842cc338 100644
--- a/module/webui/themes/dark/img/default/status_waiting.png
+++ b/pyload/webui/themes/dark/img/default/status_waiting.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/success.png b/pyload/webui/themes/dark/img/default/success.png
index 89c8129a4..89c8129a4 100644
--- a/module/webui/themes/dark/img/default/success.png
+++ b/pyload/webui/themes/dark/img/default/success.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/tabs-border-bottom.png b/pyload/webui/themes/dark/img/default/tabs-border-bottom.png
index 02440f428..02440f428 100644
--- a/module/webui/themes/dark/img/default/tabs-border-bottom.png
+++ b/pyload/webui/themes/dark/img/default/tabs-border-bottom.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/user-actions-logout.png b/pyload/webui/themes/dark/img/default/user-actions-logout.png
index 0010931e2..0010931e2 100644
--- a/module/webui/themes/dark/img/default/user-actions-logout.png
+++ b/pyload/webui/themes/dark/img/default/user-actions-logout.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/user-actions-profile.png b/pyload/webui/themes/dark/img/default/user-actions-profile.png
index 46573fff6..46573fff6 100644
--- a/module/webui/themes/dark/img/default/user-actions-profile.png
+++ b/pyload/webui/themes/dark/img/default/user-actions-profile.png
Binary files differ
diff --git a/module/webui/themes/dark/img/default/user-info.png b/pyload/webui/themes/dark/img/default/user-info.png
index 6e643100f..6e643100f 100644
--- a/module/webui/themes/dark/img/default/user-info.png
+++ b/pyload/webui/themes/dark/img/default/user-info.png
Binary files differ
diff --git a/module/webui/themes/dark/img/pyload-logo.png b/pyload/webui/themes/dark/img/pyload-logo.png
index e878afee5..e878afee5 100644
--- a/module/webui/themes/dark/img/pyload-logo.png
+++ b/pyload/webui/themes/dark/img/pyload-logo.png
Binary files differ
diff --git a/module/webui/themes/dark/img/tab-background.png b/pyload/webui/themes/dark/img/tab-background.png
index ee96b8407..ee96b8407 100644
--- a/module/webui/themes/dark/img/tab-background.png
+++ b/pyload/webui/themes/dark/img/tab-background.png
Binary files differ
diff --git a/module/webui/themes/dark/js/render/admin.coffee b/pyload/webui/themes/dark/js/render/admin.coffee
index 5afbcbb66..5afbcbb66 100644
--- a/module/webui/themes/dark/js/render/admin.coffee
+++ b/pyload/webui/themes/dark/js/render/admin.coffee
diff --git a/module/webui/themes/dark/js/render/admin.min.js b/pyload/webui/themes/dark/js/render/admin.min.js
index 94a5e494d..94a5e494d 100644
--- a/module/webui/themes/dark/js/render/admin.min.js
+++ b/pyload/webui/themes/dark/js/render/admin.min.js
diff --git a/module/webui/themes/dark/js/render/base.coffee b/pyload/webui/themes/dark/js/render/base.coffee
index 07b8bfb6f..07b8bfb6f 100644
--- a/module/webui/themes/dark/js/render/base.coffee
+++ b/pyload/webui/themes/dark/js/render/base.coffee
diff --git a/module/webui/themes/dark/js/render/base.min.js b/pyload/webui/themes/dark/js/render/base.min.js
index 1ba1d73f9..1ba1d73f9 100644
--- a/module/webui/themes/dark/js/render/base.min.js
+++ b/pyload/webui/themes/dark/js/render/base.min.js
diff --git a/module/webui/themes/dark/js/render/package.js b/pyload/webui/themes/dark/js/render/package.js
index 659a8e6fc..659a8e6fc 100644
--- a/module/webui/themes/dark/js/render/package.js
+++ b/pyload/webui/themes/dark/js/render/package.js
diff --git a/module/webui/themes/dark/js/render/settings.coffee b/pyload/webui/themes/dark/js/render/settings.coffee
index d522741b9..d522741b9 100644
--- a/module/webui/themes/dark/js/render/settings.coffee
+++ b/pyload/webui/themes/dark/js/render/settings.coffee
diff --git a/module/webui/themes/dark/js/render/settings.min.js b/pyload/webui/themes/dark/js/render/settings.min.js
index 41d1cb25a..41d1cb25a 100644
--- a/module/webui/themes/dark/js/render/settings.min.js
+++ b/pyload/webui/themes/dark/js/render/settings.min.js
diff --git a/module/webui/themes/dark/js/static/MooDialog.js b/pyload/webui/themes/dark/js/static/MooDialog.js
index 45a52496f..45a52496f 100644
--- a/module/webui/themes/dark/js/static/MooDialog.js
+++ b/pyload/webui/themes/dark/js/static/MooDialog.js
diff --git a/module/webui/themes/dark/js/static/MooDialog.min.js b/pyload/webui/themes/dark/js/static/MooDialog.min.js
index 90b3ae100..90b3ae100 100644
--- a/module/webui/themes/dark/js/static/MooDialog.min.js
+++ b/pyload/webui/themes/dark/js/static/MooDialog.min.js
diff --git a/module/webui/themes/dark/js/static/MooDropMenu.js b/pyload/webui/themes/dark/js/static/MooDropMenu.js
index ac0fa1874..ac0fa1874 100644
--- a/module/webui/themes/dark/js/static/MooDropMenu.js
+++ b/pyload/webui/themes/dark/js/static/MooDropMenu.js
diff --git a/module/webui/themes/dark/js/static/MooDropMenu.min.js b/pyload/webui/themes/dark/js/static/MooDropMenu.min.js
index 552ae247a..552ae247a 100644
--- a/module/webui/themes/dark/js/static/MooDropMenu.min.js
+++ b/pyload/webui/themes/dark/js/static/MooDropMenu.min.js
diff --git a/module/webui/themes/dark/js/static/mootools-core.js b/pyload/webui/themes/dark/js/static/mootools-core.js
index db83850fd..db83850fd 100644
--- a/module/webui/themes/dark/js/static/mootools-core.js
+++ b/pyload/webui/themes/dark/js/static/mootools-core.js
diff --git a/module/webui/themes/dark/js/static/mootools-core.min.js b/pyload/webui/themes/dark/js/static/mootools-core.min.js
index 354f94196..354f94196 100644
--- a/module/webui/themes/dark/js/static/mootools-core.min.js
+++ b/pyload/webui/themes/dark/js/static/mootools-core.min.js
diff --git a/module/webui/themes/dark/js/static/mootools-more.js b/pyload/webui/themes/dark/js/static/mootools-more.js
index c7f4a1a0e..c7f4a1a0e 100644
--- a/module/webui/themes/dark/js/static/mootools-more.js
+++ b/pyload/webui/themes/dark/js/static/mootools-more.js
diff --git a/module/webui/themes/dark/js/static/mootools-more.min.js b/pyload/webui/themes/dark/js/static/mootools-more.min.js
index ce03a60fd..ce03a60fd 100644
--- a/module/webui/themes/dark/js/static/mootools-more.min.js
+++ b/pyload/webui/themes/dark/js/static/mootools-more.min.js
diff --git a/module/webui/themes/dark/js/static/purr.js b/pyload/webui/themes/dark/js/static/purr.js
index 9cbc503d9..9cbc503d9 100644
--- a/module/webui/themes/dark/js/static/purr.js
+++ b/pyload/webui/themes/dark/js/static/purr.js
diff --git a/module/webui/themes/dark/js/static/purr.min.js b/pyload/webui/themes/dark/js/static/purr.min.js
index bf70e357d..bf70e357d 100644
--- a/module/webui/themes/dark/js/static/purr.min.js
+++ b/pyload/webui/themes/dark/js/static/purr.min.js
diff --git a/module/webui/themes/dark/js/static/tinytab.js b/pyload/webui/themes/dark/js/static/tinytab.js
index de50279fc..de50279fc 100644
--- a/module/webui/themes/dark/js/static/tinytab.js
+++ b/pyload/webui/themes/dark/js/static/tinytab.js
diff --git a/module/webui/themes/dark/js/static/tinytab.min.js b/pyload/webui/themes/dark/js/static/tinytab.min.js
index 2f4fa0436..2f4fa0436 100644
--- a/module/webui/themes/dark/js/static/tinytab.min.js
+++ b/pyload/webui/themes/dark/js/static/tinytab.min.js
diff --git a/module/webui/themes/dark/tml/admin.html b/pyload/webui/themes/dark/tml/admin.html
index 42118eda4..42118eda4 100644
--- a/module/webui/themes/dark/tml/admin.html
+++ b/pyload/webui/themes/dark/tml/admin.html
diff --git a/module/webui/themes/dark/tml/base.html b/pyload/webui/themes/dark/tml/base.html
index e7179acfa..e7179acfa 100644
--- a/module/webui/themes/dark/tml/base.html
+++ b/pyload/webui/themes/dark/tml/base.html
diff --git a/module/webui/themes/dark/tml/captcha.html b/pyload/webui/themes/dark/tml/captcha.html
index ae1afe444..ae1afe444 100644
--- a/module/webui/themes/dark/tml/captcha.html
+++ b/pyload/webui/themes/dark/tml/captcha.html
diff --git a/module/webui/themes/dark/tml/downloads.html b/pyload/webui/themes/dark/tml/downloads.html
index 0c7fb9209..0c7fb9209 100644
--- a/module/webui/themes/dark/tml/downloads.html
+++ b/pyload/webui/themes/dark/tml/downloads.html
diff --git a/module/webui/themes/dark/tml/folder.html b/pyload/webui/themes/dark/tml/folder.html
index 05176d51e..05176d51e 100644
--- a/module/webui/themes/dark/tml/folder.html
+++ b/pyload/webui/themes/dark/tml/folder.html
diff --git a/module/webui/themes/dark/tml/home.html b/pyload/webui/themes/dark/tml/home.html
index b350b705e..b350b705e 100644
--- a/module/webui/themes/dark/tml/home.html
+++ b/pyload/webui/themes/dark/tml/home.html
diff --git a/module/webui/themes/dark/tml/info.html b/pyload/webui/themes/dark/tml/info.html
index 7ff2b639b..7ff2b639b 100644
--- a/module/webui/themes/dark/tml/info.html
+++ b/pyload/webui/themes/dark/tml/info.html
diff --git a/module/webui/themes/dark/tml/login.html b/pyload/webui/themes/dark/tml/login.html
index 9f5e2cb2f..9f5e2cb2f 100644
--- a/module/webui/themes/dark/tml/login.html
+++ b/pyload/webui/themes/dark/tml/login.html
diff --git a/module/webui/themes/dark/tml/logout.html b/pyload/webui/themes/dark/tml/logout.html
index 5320e07f5..5320e07f5 100644
--- a/module/webui/themes/dark/tml/logout.html
+++ b/pyload/webui/themes/dark/tml/logout.html
diff --git a/module/webui/themes/dark/tml/logs.html b/pyload/webui/themes/dark/tml/logs.html
index e178c6c5c..e178c6c5c 100644
--- a/module/webui/themes/dark/tml/logs.html
+++ b/pyload/webui/themes/dark/tml/logs.html
diff --git a/module/webui/themes/dark/tml/pathchooser.html b/pyload/webui/themes/dark/tml/pathchooser.html
index 2b94f1019..2b94f1019 100644
--- a/module/webui/themes/dark/tml/pathchooser.html
+++ b/pyload/webui/themes/dark/tml/pathchooser.html
diff --git a/module/webui/themes/dark/tml/queue.html b/pyload/webui/themes/dark/tml/queue.html
index f68079106..f68079106 100644
--- a/module/webui/themes/dark/tml/queue.html
+++ b/pyload/webui/themes/dark/tml/queue.html
diff --git a/module/webui/themes/dark/tml/settings.html b/pyload/webui/themes/dark/tml/settings.html
index c9c0bed8a..c9c0bed8a 100644
--- a/module/webui/themes/dark/tml/settings.html
+++ b/pyload/webui/themes/dark/tml/settings.html
diff --git a/module/webui/themes/dark/tml/settings_item.html b/pyload/webui/themes/dark/tml/settings_item.html
index e417e564c..e417e564c 100644
--- a/module/webui/themes/dark/tml/settings_item.html
+++ b/pyload/webui/themes/dark/tml/settings_item.html
diff --git a/module/webui/themes/dark/tml/window.html b/pyload/webui/themes/dark/tml/window.html
index 0b4f5362b..0b4f5362b 100644
--- a/module/webui/themes/dark/tml/window.html
+++ b/pyload/webui/themes/dark/tml/window.html
diff --git a/module/webui/themes/default/css/MooDialog.css b/pyload/webui/themes/default/css/MooDialog.css
index d26bf2ff2..d26bf2ff2 100644
--- a/module/webui/themes/default/css/MooDialog.css
+++ b/pyload/webui/themes/default/css/MooDialog.css
diff --git a/module/webui/themes/default/css/default.css b/pyload/webui/themes/default/css/default.css
index 5d4b9ebf2..5d4b9ebf2 100644
--- a/module/webui/themes/default/css/default.css
+++ b/pyload/webui/themes/default/css/default.css
diff --git a/module/webui/themes/default/css/log.css b/pyload/webui/themes/default/css/log.css
index 26449b244..26449b244 100644
--- a/module/webui/themes/default/css/log.css
+++ b/pyload/webui/themes/default/css/log.css
diff --git a/module/webui/themes/default/css/pathchooser.css b/pyload/webui/themes/default/css/pathchooser.css
index 894cc335e..894cc335e 100644
--- a/module/webui/themes/default/css/pathchooser.css
+++ b/pyload/webui/themes/default/css/pathchooser.css
diff --git a/module/webui/themes/default/css/window.css b/pyload/webui/themes/default/css/window.css
index 12829868b..12829868b 100644
--- a/module/webui/themes/default/css/window.css
+++ b/pyload/webui/themes/default/css/window.css
diff --git a/module/webui/themes/default/img/MooDialog/dialog-close.png b/pyload/webui/themes/default/img/MooDialog/dialog-close.png
index 81ebb88b2..81ebb88b2 100644
--- a/module/webui/themes/default/img/MooDialog/dialog-close.png
+++ b/pyload/webui/themes/default/img/MooDialog/dialog-close.png
Binary files differ
diff --git a/module/webui/themes/default/img/MooDialog/dialog-error.png b/pyload/webui/themes/default/img/MooDialog/dialog-error.png
index d70328403..d70328403 100644
--- a/module/webui/themes/default/img/MooDialog/dialog-error.png
+++ b/pyload/webui/themes/default/img/MooDialog/dialog-error.png
Binary files differ
diff --git a/module/webui/themes/default/img/MooDialog/dialog-question.png b/pyload/webui/themes/default/img/MooDialog/dialog-question.png
index b0af3db5b..b0af3db5b 100644
--- a/module/webui/themes/default/img/MooDialog/dialog-question.png
+++ b/pyload/webui/themes/default/img/MooDialog/dialog-question.png
Binary files differ
diff --git a/module/webui/themes/default/img/MooDialog/dialog-warning.png b/pyload/webui/themes/default/img/MooDialog/dialog-warning.png
index aad64d4be..aad64d4be 100644
--- a/module/webui/themes/default/img/MooDialog/dialog-warning.png
+++ b/pyload/webui/themes/default/img/MooDialog/dialog-warning.png
Binary files differ
diff --git a/module/webui/themes/default/img/add_folder.png b/pyload/webui/themes/default/img/add_folder.png
index 8acbc411b..8acbc411b 100644
--- a/module/webui/themes/default/img/add_folder.png
+++ b/pyload/webui/themes/default/img/add_folder.png
Binary files differ
diff --git a/module/webui/themes/default/img/ajax-loader.gif b/pyload/webui/themes/default/img/ajax-loader.gif
index 2fd8e0737..2fd8e0737 100644
--- a/module/webui/themes/default/img/ajax-loader.gif
+++ b/pyload/webui/themes/default/img/ajax-loader.gif
Binary files differ
diff --git a/module/webui/themes/default/img/arrow_refresh.png b/pyload/webui/themes/default/img/arrow_refresh.png
index 0de26566d..0de26566d 100644
--- a/module/webui/themes/default/img/arrow_refresh.png
+++ b/pyload/webui/themes/default/img/arrow_refresh.png
Binary files differ
diff --git a/module/webui/themes/default/img/arrow_right.png b/pyload/webui/themes/default/img/arrow_right.png
index b1a181923..b1a181923 100644
--- a/module/webui/themes/default/img/arrow_right.png
+++ b/pyload/webui/themes/default/img/arrow_right.png
Binary files differ
diff --git a/module/webui/themes/default/img/big_button.gif b/pyload/webui/themes/default/img/big_button.gif
index 7680490ea..7680490ea 100644
--- a/module/webui/themes/default/img/big_button.gif
+++ b/pyload/webui/themes/default/img/big_button.gif
Binary files differ
diff --git a/module/webui/themes/default/img/big_button_over.gif b/pyload/webui/themes/default/img/big_button_over.gif
index 2e3ee10d2..2e3ee10d2 100644
--- a/module/webui/themes/default/img/big_button_over.gif
+++ b/pyload/webui/themes/default/img/big_button_over.gif
Binary files differ
diff --git a/module/webui/themes/default/img/body.png b/pyload/webui/themes/default/img/body.png
index 7ff1043e0..7ff1043e0 100644
--- a/module/webui/themes/default/img/body.png
+++ b/pyload/webui/themes/default/img/body.png
Binary files differ
diff --git a/module/webui/themes/default/img/button.png b/pyload/webui/themes/default/img/button.png
index 890160614..890160614 100644
--- a/module/webui/themes/default/img/button.png
+++ b/pyload/webui/themes/default/img/button.png
Binary files differ
diff --git a/module/webui/themes/default/img/closebtn.gif b/pyload/webui/themes/default/img/closebtn.gif
index 3e27e6030..3e27e6030 100644
--- a/module/webui/themes/default/img/closebtn.gif
+++ b/pyload/webui/themes/default/img/closebtn.gif
Binary files differ
diff --git a/module/webui/themes/default/img/cog.png b/pyload/webui/themes/default/img/cog.png
index 67de2c6cc..67de2c6cc 100644
--- a/module/webui/themes/default/img/cog.png
+++ b/pyload/webui/themes/default/img/cog.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_add.png b/pyload/webui/themes/default/img/control_add.png
index d39886893..d39886893 100644
--- a/module/webui/themes/default/img/control_add.png
+++ b/pyload/webui/themes/default/img/control_add.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_add_blue.png b/pyload/webui/themes/default/img/control_add_blue.png
index d11b7f41d..d11b7f41d 100644
--- a/module/webui/themes/default/img/control_add_blue.png
+++ b/pyload/webui/themes/default/img/control_add_blue.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_cancel.png b/pyload/webui/themes/default/img/control_cancel.png
index 7b9bc3fba..7b9bc3fba 100644
--- a/module/webui/themes/default/img/control_cancel.png
+++ b/pyload/webui/themes/default/img/control_cancel.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_cancel_blue.png b/pyload/webui/themes/default/img/control_cancel_blue.png
index 0c5c96ce3..0c5c96ce3 100644
--- a/module/webui/themes/default/img/control_cancel_blue.png
+++ b/pyload/webui/themes/default/img/control_cancel_blue.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_pause.png b/pyload/webui/themes/default/img/control_pause.png
index 2d9ce9c4e..2d9ce9c4e 100644
--- a/module/webui/themes/default/img/control_pause.png
+++ b/pyload/webui/themes/default/img/control_pause.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_pause_blue.png b/pyload/webui/themes/default/img/control_pause_blue.png
index ec61099b0..ec61099b0 100644
--- a/module/webui/themes/default/img/control_pause_blue.png
+++ b/pyload/webui/themes/default/img/control_pause_blue.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_play.png b/pyload/webui/themes/default/img/control_play.png
index 0846555d0..0846555d0 100644
--- a/module/webui/themes/default/img/control_play.png
+++ b/pyload/webui/themes/default/img/control_play.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_play_blue.png b/pyload/webui/themes/default/img/control_play_blue.png
index f8c8ec683..f8c8ec683 100644
--- a/module/webui/themes/default/img/control_play_blue.png
+++ b/pyload/webui/themes/default/img/control_play_blue.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_stop.png b/pyload/webui/themes/default/img/control_stop.png
index 893bb60e5..893bb60e5 100644
--- a/module/webui/themes/default/img/control_stop.png
+++ b/pyload/webui/themes/default/img/control_stop.png
Binary files differ
diff --git a/module/webui/themes/default/img/control_stop_blue.png b/pyload/webui/themes/default/img/control_stop_blue.png
index e6f75d232..e6f75d232 100644
--- a/module/webui/themes/default/img/control_stop_blue.png
+++ b/pyload/webui/themes/default/img/control_stop_blue.png
Binary files differ
diff --git a/module/webui/themes/default/img/delete.png b/pyload/webui/themes/default/img/delete.png
index 08f249365..08f249365 100644
--- a/module/webui/themes/default/img/delete.png
+++ b/pyload/webui/themes/default/img/delete.png
Binary files differ
diff --git a/module/webui/themes/default/img/drag_corner.gif b/pyload/webui/themes/default/img/drag_corner.gif
index befb1adf1..befb1adf1 100644
--- a/module/webui/themes/default/img/drag_corner.gif
+++ b/pyload/webui/themes/default/img/drag_corner.gif
Binary files differ
diff --git a/module/webui/themes/default/img/error.png b/pyload/webui/themes/default/img/error.png
index c37bd062e..c37bd062e 100644
--- a/module/webui/themes/default/img/error.png
+++ b/pyload/webui/themes/default/img/error.png
Binary files differ
diff --git a/module/webui/themes/default/img/folder.png b/pyload/webui/themes/default/img/folder.png
index 784e8fa48..784e8fa48 100644
--- a/module/webui/themes/default/img/folder.png
+++ b/pyload/webui/themes/default/img/folder.png
Binary files differ
diff --git a/module/webui/themes/default/img/full.png b/pyload/webui/themes/default/img/full.png
index fea52af76..fea52af76 100644
--- a/module/webui/themes/default/img/full.png
+++ b/pyload/webui/themes/default/img/full.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-login.png b/pyload/webui/themes/default/img/head-login.png
index b59b7cbbf..b59b7cbbf 100644
--- a/module/webui/themes/default/img/head-login.png
+++ b/pyload/webui/themes/default/img/head-login.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-collector.png b/pyload/webui/themes/default/img/head-menu-collector.png
index 861be40bc..861be40bc 100644
--- a/module/webui/themes/default/img/head-menu-collector.png
+++ b/pyload/webui/themes/default/img/head-menu-collector.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-config.png b/pyload/webui/themes/default/img/head-menu-config.png
index bbf43d4f3..bbf43d4f3 100644
--- a/module/webui/themes/default/img/head-menu-config.png
+++ b/pyload/webui/themes/default/img/head-menu-config.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-development.png b/pyload/webui/themes/default/img/head-menu-development.png
index fad150fe1..fad150fe1 100644
--- a/module/webui/themes/default/img/head-menu-development.png
+++ b/pyload/webui/themes/default/img/head-menu-development.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-download.png b/pyload/webui/themes/default/img/head-menu-download.png
index 98c5da9db..98c5da9db 100644
--- a/module/webui/themes/default/img/head-menu-download.png
+++ b/pyload/webui/themes/default/img/head-menu-download.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-home.png b/pyload/webui/themes/default/img/head-menu-home.png
index 9d62109aa..9d62109aa 100644
--- a/module/webui/themes/default/img/head-menu-home.png
+++ b/pyload/webui/themes/default/img/head-menu-home.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-index.png b/pyload/webui/themes/default/img/head-menu-index.png
index 44d631064..44d631064 100644
--- a/module/webui/themes/default/img/head-menu-index.png
+++ b/pyload/webui/themes/default/img/head-menu-index.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-news.png b/pyload/webui/themes/default/img/head-menu-news.png
index 43950ebc9..43950ebc9 100644
--- a/module/webui/themes/default/img/head-menu-news.png
+++ b/pyload/webui/themes/default/img/head-menu-news.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-queue.png b/pyload/webui/themes/default/img/head-menu-queue.png
index be98793ce..be98793ce 100644
--- a/module/webui/themes/default/img/head-menu-queue.png
+++ b/pyload/webui/themes/default/img/head-menu-queue.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-recent.png b/pyload/webui/themes/default/img/head-menu-recent.png
index fc9b0497f..fc9b0497f 100644
--- a/module/webui/themes/default/img/head-menu-recent.png
+++ b/pyload/webui/themes/default/img/head-menu-recent.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-menu-wiki.png b/pyload/webui/themes/default/img/head-menu-wiki.png
index 07cf0102d..07cf0102d 100644
--- a/module/webui/themes/default/img/head-menu-wiki.png
+++ b/pyload/webui/themes/default/img/head-menu-wiki.png
Binary files differ
diff --git a/module/webui/themes/default/img/head-search-noshadow.png b/pyload/webui/themes/default/img/head-search-noshadow.png
index aafdae015..aafdae015 100644
--- a/module/webui/themes/default/img/head-search-noshadow.png
+++ b/pyload/webui/themes/default/img/head-search-noshadow.png
Binary files differ
diff --git a/module/webui/themes/default/img/head_bg1.png b/pyload/webui/themes/default/img/head_bg1.png
index f2848c3cc..f2848c3cc 100644
--- a/module/webui/themes/default/img/head_bg1.png
+++ b/pyload/webui/themes/default/img/head_bg1.png
Binary files differ
diff --git a/module/webui/themes/default/img/images.png b/pyload/webui/themes/default/img/images.png
index 184860d1e..184860d1e 100644
--- a/module/webui/themes/default/img/images.png
+++ b/pyload/webui/themes/default/img/images.png
Binary files differ
diff --git a/module/webui/themes/default/img/notice.png b/pyload/webui/themes/default/img/notice.png
index 12cd1aef9..12cd1aef9 100644
--- a/module/webui/themes/default/img/notice.png
+++ b/pyload/webui/themes/default/img/notice.png
Binary files differ
diff --git a/module/webui/themes/default/img/package_go.png b/pyload/webui/themes/default/img/package_go.png
index aace63ad6..aace63ad6 100644
--- a/module/webui/themes/default/img/package_go.png
+++ b/pyload/webui/themes/default/img/package_go.png
Binary files differ
diff --git a/module/webui/themes/default/img/page-tools-backlinks.png b/pyload/webui/themes/default/img/page-tools-backlinks.png
index 3eb6a9ce3..3eb6a9ce3 100644
--- a/module/webui/themes/default/img/page-tools-backlinks.png
+++ b/pyload/webui/themes/default/img/page-tools-backlinks.png
Binary files differ
diff --git a/module/webui/themes/default/img/page-tools-edit.png b/pyload/webui/themes/default/img/page-tools-edit.png
index 188e1c12b..188e1c12b 100644
--- a/module/webui/themes/default/img/page-tools-edit.png
+++ b/pyload/webui/themes/default/img/page-tools-edit.png
Binary files differ
diff --git a/module/webui/themes/default/img/page-tools-revisions.png b/pyload/webui/themes/default/img/page-tools-revisions.png
index 5c3b8587f..5c3b8587f 100644
--- a/module/webui/themes/default/img/page-tools-revisions.png
+++ b/pyload/webui/themes/default/img/page-tools-revisions.png
Binary files differ
diff --git a/module/webui/themes/default/img/parseUri.png b/pyload/webui/themes/default/img/parseUri.png
index 937bded9d..937bded9d 100644
--- a/module/webui/themes/default/img/parseUri.png
+++ b/pyload/webui/themes/default/img/parseUri.png
Binary files differ
diff --git a/module/webui/themes/default/img/pencil.png b/pyload/webui/themes/default/img/pencil.png
index 0bfecd50e..0bfecd50e 100644
--- a/module/webui/themes/default/img/pencil.png
+++ b/pyload/webui/themes/default/img/pencil.png
Binary files differ
diff --git a/module/webui/themes/default/img/pyload-logo.png b/pyload/webui/themes/default/img/pyload-logo.png
index 2443cd8b1..2443cd8b1 100644
--- a/module/webui/themes/default/img/pyload-logo.png
+++ b/pyload/webui/themes/default/img/pyload-logo.png
Binary files differ
diff --git a/module/webui/themes/default/img/reconnect.png b/pyload/webui/themes/default/img/reconnect.png
index 49b269145..49b269145 100644
--- a/module/webui/themes/default/img/reconnect.png
+++ b/pyload/webui/themes/default/img/reconnect.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_None.png b/pyload/webui/themes/default/img/status_None.png
index 293b13f77..293b13f77 100644
--- a/module/webui/themes/default/img/status_None.png
+++ b/pyload/webui/themes/default/img/status_None.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_downloading.png b/pyload/webui/themes/default/img/status_downloading.png
index fb4ebc850..fb4ebc850 100644
--- a/module/webui/themes/default/img/status_downloading.png
+++ b/pyload/webui/themes/default/img/status_downloading.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_failed.png b/pyload/webui/themes/default/img/status_failed.png
index c37bd062e..c37bd062e 100644
--- a/module/webui/themes/default/img/status_failed.png
+++ b/pyload/webui/themes/default/img/status_failed.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_finished.png b/pyload/webui/themes/default/img/status_finished.png
index 89c8129a4..89c8129a4 100644
--- a/module/webui/themes/default/img/status_finished.png
+++ b/pyload/webui/themes/default/img/status_finished.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_offline.png b/pyload/webui/themes/default/img/status_offline.png
index 0cfd58596..0cfd58596 100644
--- a/module/webui/themes/default/img/status_offline.png
+++ b/pyload/webui/themes/default/img/status_offline.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_proc.png b/pyload/webui/themes/default/img/status_proc.png
index 67de2c6cc..67de2c6cc 100644
--- a/module/webui/themes/default/img/status_proc.png
+++ b/pyload/webui/themes/default/img/status_proc.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_queue.png b/pyload/webui/themes/default/img/status_queue.png
index 293b13f77..293b13f77 100644
--- a/module/webui/themes/default/img/status_queue.png
+++ b/pyload/webui/themes/default/img/status_queue.png
Binary files differ
diff --git a/module/webui/themes/default/img/status_waiting.png b/pyload/webui/themes/default/img/status_waiting.png
index 2842cc338..2842cc338 100644
--- a/module/webui/themes/default/img/status_waiting.png
+++ b/pyload/webui/themes/default/img/status_waiting.png
Binary files differ
diff --git a/module/webui/themes/default/img/success.png b/pyload/webui/themes/default/img/success.png
index 89c8129a4..89c8129a4 100644
--- a/module/webui/themes/default/img/success.png
+++ b/pyload/webui/themes/default/img/success.png
Binary files differ
diff --git a/module/webui/themes/default/img/tab-background.png b/pyload/webui/themes/default/img/tab-background.png
index 29a5d1991..29a5d1991 100644
--- a/module/webui/themes/default/img/tab-background.png
+++ b/pyload/webui/themes/default/img/tab-background.png
Binary files differ
diff --git a/module/webui/themes/default/img/tabs-border-bottom.png b/pyload/webui/themes/default/img/tabs-border-bottom.png
index 02440f428..02440f428 100644
--- a/module/webui/themes/default/img/tabs-border-bottom.png
+++ b/pyload/webui/themes/default/img/tabs-border-bottom.png
Binary files differ
diff --git a/module/webui/themes/default/img/user-actions-logout.png b/pyload/webui/themes/default/img/user-actions-logout.png
index 0010931e2..0010931e2 100644
--- a/module/webui/themes/default/img/user-actions-logout.png
+++ b/pyload/webui/themes/default/img/user-actions-logout.png
Binary files differ
diff --git a/module/webui/themes/default/img/user-actions-profile.png b/pyload/webui/themes/default/img/user-actions-profile.png
index 46573fff6..46573fff6 100644
--- a/module/webui/themes/default/img/user-actions-profile.png
+++ b/pyload/webui/themes/default/img/user-actions-profile.png
Binary files differ
diff --git a/module/webui/themes/default/img/user-info.png b/pyload/webui/themes/default/img/user-info.png
index 6e643100f..6e643100f 100644
--- a/module/webui/themes/default/img/user-info.png
+++ b/pyload/webui/themes/default/img/user-info.png
Binary files differ
diff --git a/module/webui/themes/default/js/render/admin.coffee b/pyload/webui/themes/default/js/render/admin.coffee
index 5afbcbb66..5afbcbb66 100644
--- a/module/webui/themes/default/js/render/admin.coffee
+++ b/pyload/webui/themes/default/js/render/admin.coffee
diff --git a/module/webui/themes/default/js/render/admin.min.js b/pyload/webui/themes/default/js/render/admin.min.js
index 94a5e494d..94a5e494d 100644
--- a/module/webui/themes/default/js/render/admin.min.js
+++ b/pyload/webui/themes/default/js/render/admin.min.js
diff --git a/module/webui/themes/default/js/render/base.coffee b/pyload/webui/themes/default/js/render/base.coffee
index 07b8bfb6f..07b8bfb6f 100644
--- a/module/webui/themes/default/js/render/base.coffee
+++ b/pyload/webui/themes/default/js/render/base.coffee
diff --git a/module/webui/themes/default/js/render/base.min.js b/pyload/webui/themes/default/js/render/base.min.js
index 1ba1d73f9..1ba1d73f9 100644
--- a/module/webui/themes/default/js/render/base.min.js
+++ b/pyload/webui/themes/default/js/render/base.min.js
diff --git a/module/webui/themes/default/js/render/filemanager.js b/pyload/webui/themes/default/js/render/filemanager.js
index f1ebed93f..f1ebed93f 100644
--- a/module/webui/themes/default/js/render/filemanager.js
+++ b/pyload/webui/themes/default/js/render/filemanager.js
diff --git a/module/webui/themes/default/js/render/package.js b/pyload/webui/themes/default/js/render/package.js
index 659a8e6fc..659a8e6fc 100644
--- a/module/webui/themes/default/js/render/package.js
+++ b/pyload/webui/themes/default/js/render/package.js
diff --git a/module/webui/themes/default/js/render/settings.coffee b/pyload/webui/themes/default/js/render/settings.coffee
index d522741b9..d522741b9 100644
--- a/module/webui/themes/default/js/render/settings.coffee
+++ b/pyload/webui/themes/default/js/render/settings.coffee
diff --git a/module/webui/themes/default/js/render/settings.min.js b/pyload/webui/themes/default/js/render/settings.min.js
index 41d1cb25a..41d1cb25a 100644
--- a/module/webui/themes/default/js/render/settings.min.js
+++ b/pyload/webui/themes/default/js/render/settings.min.js
diff --git a/module/webui/themes/default/js/static/MooDialog.js b/pyload/webui/themes/default/js/static/MooDialog.js
index 45a52496f..45a52496f 100644
--- a/module/webui/themes/default/js/static/MooDialog.js
+++ b/pyload/webui/themes/default/js/static/MooDialog.js
diff --git a/module/webui/themes/default/js/static/MooDialog.min.js b/pyload/webui/themes/default/js/static/MooDialog.min.js
index 90b3ae100..90b3ae100 100644
--- a/module/webui/themes/default/js/static/MooDialog.min.js
+++ b/pyload/webui/themes/default/js/static/MooDialog.min.js
diff --git a/module/webui/themes/default/js/static/MooDropMenu.js b/pyload/webui/themes/default/js/static/MooDropMenu.js
index ac0fa1874..ac0fa1874 100644
--- a/module/webui/themes/default/js/static/MooDropMenu.js
+++ b/pyload/webui/themes/default/js/static/MooDropMenu.js
diff --git a/module/webui/themes/default/js/static/MooDropMenu.min.js b/pyload/webui/themes/default/js/static/MooDropMenu.min.js
index 552ae247a..552ae247a 100644
--- a/module/webui/themes/default/js/static/MooDropMenu.min.js
+++ b/pyload/webui/themes/default/js/static/MooDropMenu.min.js
diff --git a/module/webui/themes/default/js/static/mootools-core.js b/pyload/webui/themes/default/js/static/mootools-core.js
index db83850fd..db83850fd 100644
--- a/module/webui/themes/default/js/static/mootools-core.js
+++ b/pyload/webui/themes/default/js/static/mootools-core.js
diff --git a/module/webui/themes/default/js/static/mootools-core.min.js b/pyload/webui/themes/default/js/static/mootools-core.min.js
index 354f94196..354f94196 100644
--- a/module/webui/themes/default/js/static/mootools-core.min.js
+++ b/pyload/webui/themes/default/js/static/mootools-core.min.js
diff --git a/module/webui/themes/default/js/static/mootools-more.js b/pyload/webui/themes/default/js/static/mootools-more.js
index c7f4a1a0e..c7f4a1a0e 100644
--- a/module/webui/themes/default/js/static/mootools-more.js
+++ b/pyload/webui/themes/default/js/static/mootools-more.js
diff --git a/module/webui/themes/default/js/static/mootools-more.min.js b/pyload/webui/themes/default/js/static/mootools-more.min.js
index ce03a60fd..ce03a60fd 100644
--- a/module/webui/themes/default/js/static/mootools-more.min.js
+++ b/pyload/webui/themes/default/js/static/mootools-more.min.js
diff --git a/module/webui/themes/default/js/static/purr.js b/pyload/webui/themes/default/js/static/purr.js
index 9cbc503d9..9cbc503d9 100644
--- a/module/webui/themes/default/js/static/purr.js
+++ b/pyload/webui/themes/default/js/static/purr.js
diff --git a/module/webui/themes/default/js/static/purr.min.js b/pyload/webui/themes/default/js/static/purr.min.js
index bf70e357d..bf70e357d 100644
--- a/module/webui/themes/default/js/static/purr.min.js
+++ b/pyload/webui/themes/default/js/static/purr.min.js
diff --git a/module/webui/themes/default/js/static/tinytab.js b/pyload/webui/themes/default/js/static/tinytab.js
index de50279fc..de50279fc 100644
--- a/module/webui/themes/default/js/static/tinytab.js
+++ b/pyload/webui/themes/default/js/static/tinytab.js
diff --git a/module/webui/themes/default/js/static/tinytab.min.js b/pyload/webui/themes/default/js/static/tinytab.min.js
index 2f4fa0436..2f4fa0436 100644
--- a/module/webui/themes/default/js/static/tinytab.min.js
+++ b/pyload/webui/themes/default/js/static/tinytab.min.js
diff --git a/module/webui/themes/default/tml/admin.html b/pyload/webui/themes/default/tml/admin.html
index ba94f7a74..ba94f7a74 100644
--- a/module/webui/themes/default/tml/admin.html
+++ b/pyload/webui/themes/default/tml/admin.html
diff --git a/module/webui/themes/default/tml/base.html b/pyload/webui/themes/default/tml/base.html
index e2a62a116..e2a62a116 100644
--- a/module/webui/themes/default/tml/base.html
+++ b/pyload/webui/themes/default/tml/base.html
diff --git a/module/webui/themes/default/tml/captcha.html b/pyload/webui/themes/default/tml/captcha.html
index 56892593f..56892593f 100644
--- a/module/webui/themes/default/tml/captcha.html
+++ b/pyload/webui/themes/default/tml/captcha.html
diff --git a/module/webui/themes/default/tml/downloads.html b/pyload/webui/themes/default/tml/downloads.html
index ba0f77c18..ba0f77c18 100644
--- a/module/webui/themes/default/tml/downloads.html
+++ b/pyload/webui/themes/default/tml/downloads.html
diff --git a/module/webui/themes/default/tml/filemanager.html b/pyload/webui/themes/default/tml/filemanager.html
index 7a370d04c..7a370d04c 100644
--- a/module/webui/themes/default/tml/filemanager.html
+++ b/pyload/webui/themes/default/tml/filemanager.html
diff --git a/module/webui/themes/default/tml/folder.html b/pyload/webui/themes/default/tml/folder.html
index 227a46ba0..227a46ba0 100644
--- a/module/webui/themes/default/tml/folder.html
+++ b/pyload/webui/themes/default/tml/folder.html
diff --git a/module/webui/themes/default/tml/home.html b/pyload/webui/themes/default/tml/home.html
index 0fff703b5..0fff703b5 100644
--- a/module/webui/themes/default/tml/home.html
+++ b/pyload/webui/themes/default/tml/home.html
diff --git a/module/webui/themes/default/tml/info.html b/pyload/webui/themes/default/tml/info.html
index 2deaa6dce..2deaa6dce 100644
--- a/module/webui/themes/default/tml/info.html
+++ b/pyload/webui/themes/default/tml/info.html
diff --git a/module/webui/themes/default/tml/login.html b/pyload/webui/themes/default/tml/login.html
index 089275219..089275219 100644
--- a/module/webui/themes/default/tml/login.html
+++ b/pyload/webui/themes/default/tml/login.html
diff --git a/module/webui/themes/default/tml/logout.html b/pyload/webui/themes/default/tml/logout.html
index 196676de5..196676de5 100644
--- a/module/webui/themes/default/tml/logout.html
+++ b/pyload/webui/themes/default/tml/logout.html
diff --git a/module/webui/themes/default/tml/logs.html b/pyload/webui/themes/default/tml/logs.html
index 1706be8a6..1706be8a6 100644
--- a/module/webui/themes/default/tml/logs.html
+++ b/pyload/webui/themes/default/tml/logs.html
diff --git a/module/webui/themes/default/tml/pathchooser.html b/pyload/webui/themes/default/tml/pathchooser.html
index 8ce9ab072..8ce9ab072 100644
--- a/module/webui/themes/default/tml/pathchooser.html
+++ b/pyload/webui/themes/default/tml/pathchooser.html
diff --git a/module/webui/themes/default/tml/queue.html b/pyload/webui/themes/default/tml/queue.html
index 035ee1808..035ee1808 100644
--- a/module/webui/themes/default/tml/queue.html
+++ b/pyload/webui/themes/default/tml/queue.html
diff --git a/module/webui/themes/default/tml/settings.html b/pyload/webui/themes/default/tml/settings.html
index fddc6e35c..fddc6e35c 100644
--- a/module/webui/themes/default/tml/settings.html
+++ b/pyload/webui/themes/default/tml/settings.html
diff --git a/module/webui/themes/default/tml/settings_item.html b/pyload/webui/themes/default/tml/settings_item.html
index 6642d34b4..6642d34b4 100644
--- a/module/webui/themes/default/tml/settings_item.html
+++ b/pyload/webui/themes/default/tml/settings_item.html
diff --git a/module/webui/themes/default/tml/window.html b/pyload/webui/themes/default/tml/window.html
index e73eba2bd..e73eba2bd 100644
--- a/module/webui/themes/default/tml/window.html
+++ b/pyload/webui/themes/default/tml/window.html
diff --git a/module/webui/themes/flat/css/MooDialog.css b/pyload/webui/themes/flat/css/MooDialog.css
index 3ba94cafd..3ba94cafd 100644
--- a/module/webui/themes/flat/css/MooDialog.css
+++ b/pyload/webui/themes/flat/css/MooDialog.css
diff --git a/module/webui/themes/flat/css/flat.css b/pyload/webui/themes/flat/css/flat.css
index 1a542962f..1a542962f 100644
--- a/module/webui/themes/flat/css/flat.css
+++ b/pyload/webui/themes/flat/css/flat.css
diff --git a/module/webui/themes/flat/css/log.css b/pyload/webui/themes/flat/css/log.css
index af2ea4fe8..af2ea4fe8 100644
--- a/module/webui/themes/flat/css/log.css
+++ b/pyload/webui/themes/flat/css/log.css
diff --git a/module/webui/themes/flat/css/pathchooser.css b/pyload/webui/themes/flat/css/pathchooser.css
index 894cc335e..894cc335e 100644
--- a/module/webui/themes/flat/css/pathchooser.css
+++ b/pyload/webui/themes/flat/css/pathchooser.css
diff --git a/module/webui/themes/flat/css/window.css b/pyload/webui/themes/flat/css/window.css
index 12829868b..12829868b 100644
--- a/module/webui/themes/flat/css/window.css
+++ b/pyload/webui/themes/flat/css/window.css
diff --git a/module/webui/themes/flat/img/MooDialog/dialog-close.png b/pyload/webui/themes/flat/img/MooDialog/dialog-close.png
index 81ebb88b2..81ebb88b2 100644
--- a/module/webui/themes/flat/img/MooDialog/dialog-close.png
+++ b/pyload/webui/themes/flat/img/MooDialog/dialog-close.png
Binary files differ
diff --git a/module/webui/themes/flat/img/MooDialog/dialog-error.png b/pyload/webui/themes/flat/img/MooDialog/dialog-error.png
index d70328403..d70328403 100644
--- a/module/webui/themes/flat/img/MooDialog/dialog-error.png
+++ b/pyload/webui/themes/flat/img/MooDialog/dialog-error.png
Binary files differ
diff --git a/module/webui/themes/flat/img/MooDialog/dialog-question.png b/pyload/webui/themes/flat/img/MooDialog/dialog-question.png
index b0af3db5b..b0af3db5b 100644
--- a/module/webui/themes/flat/img/MooDialog/dialog-question.png
+++ b/pyload/webui/themes/flat/img/MooDialog/dialog-question.png
Binary files differ
diff --git a/module/webui/themes/flat/img/MooDialog/dialog-warning.png b/pyload/webui/themes/flat/img/MooDialog/dialog-warning.png
index aad64d4be..aad64d4be 100644
--- a/module/webui/themes/flat/img/MooDialog/dialog-warning.png
+++ b/pyload/webui/themes/flat/img/MooDialog/dialog-warning.png
Binary files differ
diff --git a/module/webui/themes/flat/img/arrow_refresh.png b/pyload/webui/themes/flat/img/arrow_refresh.png
index b1b6fa4dc..b1b6fa4dc 100644
--- a/module/webui/themes/flat/img/arrow_refresh.png
+++ b/pyload/webui/themes/flat/img/arrow_refresh.png
Binary files differ
diff --git a/module/webui/themes/flat/img/arrow_right.png b/pyload/webui/themes/flat/img/arrow_right.png
index 68f379fc7..68f379fc7 100644
--- a/module/webui/themes/flat/img/arrow_right.png
+++ b/pyload/webui/themes/flat/img/arrow_right.png
Binary files differ
diff --git a/module/webui/themes/flat/img/button.png b/pyload/webui/themes/flat/img/button.png
index bb408a7d6..bb408a7d6 100644
--- a/module/webui/themes/flat/img/button.png
+++ b/pyload/webui/themes/flat/img/button.png
Binary files differ
diff --git a/module/webui/themes/flat/img/cog.png b/pyload/webui/themes/flat/img/cog.png
index 833f779ac..833f779ac 100644
--- a/module/webui/themes/flat/img/cog.png
+++ b/pyload/webui/themes/flat/img/cog.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_add.png b/pyload/webui/themes/flat/img/control_add.png
index e3f29fab2..e3f29fab2 100644
--- a/module/webui/themes/flat/img/control_add.png
+++ b/pyload/webui/themes/flat/img/control_add.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_add_blue.png b/pyload/webui/themes/flat/img/control_add_blue.png
index e3f29fab2..e3f29fab2 100644
--- a/module/webui/themes/flat/img/control_add_blue.png
+++ b/pyload/webui/themes/flat/img/control_add_blue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_cancel.png b/pyload/webui/themes/flat/img/control_cancel.png
index 07c9cad30..07c9cad30 100644
--- a/module/webui/themes/flat/img/control_cancel.png
+++ b/pyload/webui/themes/flat/img/control_cancel.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_cancel_blue.png b/pyload/webui/themes/flat/img/control_cancel_blue.png
index 07c9cad30..07c9cad30 100644
--- a/module/webui/themes/flat/img/control_cancel_blue.png
+++ b/pyload/webui/themes/flat/img/control_cancel_blue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_pause.png b/pyload/webui/themes/flat/img/control_pause.png
index 24e3705fa..24e3705fa 100644
--- a/module/webui/themes/flat/img/control_pause.png
+++ b/pyload/webui/themes/flat/img/control_pause.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_pause_blue.png b/pyload/webui/themes/flat/img/control_pause_blue.png
index 24e3705fa..24e3705fa 100644
--- a/module/webui/themes/flat/img/control_pause_blue.png
+++ b/pyload/webui/themes/flat/img/control_pause_blue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_play.png b/pyload/webui/themes/flat/img/control_play.png
index 15ced1e21..15ced1e21 100644
--- a/module/webui/themes/flat/img/control_play.png
+++ b/pyload/webui/themes/flat/img/control_play.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_play_blue.png b/pyload/webui/themes/flat/img/control_play_blue.png
index 15ced1e21..15ced1e21 100644
--- a/module/webui/themes/flat/img/control_play_blue.png
+++ b/pyload/webui/themes/flat/img/control_play_blue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_stop.png b/pyload/webui/themes/flat/img/control_stop.png
index 71215ef67..71215ef67 100644
--- a/module/webui/themes/flat/img/control_stop.png
+++ b/pyload/webui/themes/flat/img/control_stop.png
Binary files differ
diff --git a/module/webui/themes/flat/img/control_stop_blue.png b/pyload/webui/themes/flat/img/control_stop_blue.png
index 71215ef67..71215ef67 100644
--- a/module/webui/themes/flat/img/control_stop_blue.png
+++ b/pyload/webui/themes/flat/img/control_stop_blue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/add_folder.png b/pyload/webui/themes/flat/img/default/add_folder.png
index 8acbc411b..8acbc411b 100644
--- a/module/webui/themes/flat/img/default/add_folder.png
+++ b/pyload/webui/themes/flat/img/default/add_folder.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/ajax-loader.gif b/pyload/webui/themes/flat/img/default/ajax-loader.gif
index 2fd8e0737..2fd8e0737 100644
--- a/module/webui/themes/flat/img/default/ajax-loader.gif
+++ b/pyload/webui/themes/flat/img/default/ajax-loader.gif
Binary files differ
diff --git a/module/webui/themes/flat/img/default/big_button.gif b/pyload/webui/themes/flat/img/default/big_button.gif
index 7680490ea..7680490ea 100644
--- a/module/webui/themes/flat/img/default/big_button.gif
+++ b/pyload/webui/themes/flat/img/default/big_button.gif
Binary files differ
diff --git a/module/webui/themes/flat/img/default/big_button_over.gif b/pyload/webui/themes/flat/img/default/big_button_over.gif
index 2e3ee10d2..2e3ee10d2 100644
--- a/module/webui/themes/flat/img/default/big_button_over.gif
+++ b/pyload/webui/themes/flat/img/default/big_button_over.gif
Binary files differ
diff --git a/module/webui/themes/flat/img/default/body.png b/pyload/webui/themes/flat/img/default/body.png
index 7ff1043e0..7ff1043e0 100644
--- a/module/webui/themes/flat/img/default/body.png
+++ b/pyload/webui/themes/flat/img/default/body.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/closebtn.gif b/pyload/webui/themes/flat/img/default/closebtn.gif
index 3e27e6030..3e27e6030 100644
--- a/module/webui/themes/flat/img/default/closebtn.gif
+++ b/pyload/webui/themes/flat/img/default/closebtn.gif
Binary files differ
diff --git a/module/webui/themes/flat/img/default/drag_corner.gif b/pyload/webui/themes/flat/img/default/drag_corner.gif
index befb1adf1..befb1adf1 100644
--- a/module/webui/themes/flat/img/default/drag_corner.gif
+++ b/pyload/webui/themes/flat/img/default/drag_corner.gif
Binary files differ
diff --git a/module/webui/themes/flat/img/default/full.png b/pyload/webui/themes/flat/img/default/full.png
index fea52af76..fea52af76 100644
--- a/module/webui/themes/flat/img/default/full.png
+++ b/pyload/webui/themes/flat/img/default/full.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/head-menu-recent.png b/pyload/webui/themes/flat/img/default/head-menu-recent.png
index fc9b0497f..fc9b0497f 100644
--- a/module/webui/themes/flat/img/default/head-menu-recent.png
+++ b/pyload/webui/themes/flat/img/default/head-menu-recent.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/head_bg1.png b/pyload/webui/themes/flat/img/default/head_bg1.png
index f2848c3cc..f2848c3cc 100644
--- a/module/webui/themes/flat/img/default/head_bg1.png
+++ b/pyload/webui/themes/flat/img/default/head_bg1.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/images.png b/pyload/webui/themes/flat/img/default/images.png
index 184860d1e..184860d1e 100644
--- a/module/webui/themes/flat/img/default/images.png
+++ b/pyload/webui/themes/flat/img/default/images.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/parseUri.png b/pyload/webui/themes/flat/img/default/parseUri.png
index 937bded9d..937bded9d 100644
--- a/module/webui/themes/flat/img/default/parseUri.png
+++ b/pyload/webui/themes/flat/img/default/parseUri.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/pyload-logo.png b/pyload/webui/themes/flat/img/default/pyload-logo.png
index 2443cd8b1..2443cd8b1 100644
--- a/module/webui/themes/flat/img/default/pyload-logo.png
+++ b/pyload/webui/themes/flat/img/default/pyload-logo.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/tab-background.png b/pyload/webui/themes/flat/img/default/tab-background.png
index 29a5d1991..29a5d1991 100644
--- a/module/webui/themes/flat/img/default/tab-background.png
+++ b/pyload/webui/themes/flat/img/default/tab-background.png
Binary files differ
diff --git a/module/webui/themes/flat/img/default/tabs-border-bottom.png b/pyload/webui/themes/flat/img/default/tabs-border-bottom.png
index 02440f428..02440f428 100644
--- a/module/webui/themes/flat/img/default/tabs-border-bottom.png
+++ b/pyload/webui/themes/flat/img/default/tabs-border-bottom.png
Binary files differ
diff --git a/module/webui/themes/flat/img/delete.png b/pyload/webui/themes/flat/img/delete.png
index 4539cff12..4539cff12 100644
--- a/module/webui/themes/flat/img/delete.png
+++ b/pyload/webui/themes/flat/img/delete.png
Binary files differ
diff --git a/module/webui/themes/flat/img/error.png b/pyload/webui/themes/flat/img/error.png
index 6c565c99c..6c565c99c 100644
--- a/module/webui/themes/flat/img/error.png
+++ b/pyload/webui/themes/flat/img/error.png
Binary files differ
diff --git a/module/webui/themes/flat/img/folder.png b/pyload/webui/themes/flat/img/folder.png
index 0b067dd3c..0b067dd3c 100644
--- a/module/webui/themes/flat/img/folder.png
+++ b/pyload/webui/themes/flat/img/folder.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-login.png b/pyload/webui/themes/flat/img/head-login.png
index 6b57515bc..6b57515bc 100644
--- a/module/webui/themes/flat/img/head-login.png
+++ b/pyload/webui/themes/flat/img/head-login.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-collector.png b/pyload/webui/themes/flat/img/head-menu-collector.png
index bbcbe6406..bbcbe6406 100644
--- a/module/webui/themes/flat/img/head-menu-collector.png
+++ b/pyload/webui/themes/flat/img/head-menu-collector.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-config.png b/pyload/webui/themes/flat/img/head-menu-config.png
index 93e8f83ac..93e8f83ac 100644
--- a/module/webui/themes/flat/img/head-menu-config.png
+++ b/pyload/webui/themes/flat/img/head-menu-config.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-development.png b/pyload/webui/themes/flat/img/head-menu-development.png
index 33d8b062f..33d8b062f 100644
--- a/module/webui/themes/flat/img/head-menu-development.png
+++ b/pyload/webui/themes/flat/img/head-menu-development.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-download.png b/pyload/webui/themes/flat/img/head-menu-download.png
index 3691deebc..3691deebc 100644
--- a/module/webui/themes/flat/img/head-menu-download.png
+++ b/pyload/webui/themes/flat/img/head-menu-download.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-home.png b/pyload/webui/themes/flat/img/head-menu-home.png
index b77bef5eb..b77bef5eb 100644
--- a/module/webui/themes/flat/img/head-menu-home.png
+++ b/pyload/webui/themes/flat/img/head-menu-home.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-index.png b/pyload/webui/themes/flat/img/head-menu-index.png
index 8bc6e9604..8bc6e9604 100644
--- a/module/webui/themes/flat/img/head-menu-index.png
+++ b/pyload/webui/themes/flat/img/head-menu-index.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-news.png b/pyload/webui/themes/flat/img/head-menu-news.png
index 44e79a9a9..44e79a9a9 100644
--- a/module/webui/themes/flat/img/head-menu-news.png
+++ b/pyload/webui/themes/flat/img/head-menu-news.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-queue.png b/pyload/webui/themes/flat/img/head-menu-queue.png
index e4fa41ad8..e4fa41ad8 100644
--- a/module/webui/themes/flat/img/head-menu-queue.png
+++ b/pyload/webui/themes/flat/img/head-menu-queue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-menu-wiki.png b/pyload/webui/themes/flat/img/head-menu-wiki.png
index 61b0e54ea..61b0e54ea 100644
--- a/module/webui/themes/flat/img/head-menu-wiki.png
+++ b/pyload/webui/themes/flat/img/head-menu-wiki.png
Binary files differ
diff --git a/module/webui/themes/flat/img/head-search-noshadow.png b/pyload/webui/themes/flat/img/head-search-noshadow.png
index 16d39bd06..16d39bd06 100644
--- a/module/webui/themes/flat/img/head-search-noshadow.png
+++ b/pyload/webui/themes/flat/img/head-search-noshadow.png
Binary files differ
diff --git a/module/webui/themes/flat/img/notice.png b/pyload/webui/themes/flat/img/notice.png
index a52b067cb..a52b067cb 100644
--- a/module/webui/themes/flat/img/notice.png
+++ b/pyload/webui/themes/flat/img/notice.png
Binary files differ
diff --git a/module/webui/themes/flat/img/package_go.png b/pyload/webui/themes/flat/img/package_go.png
index 80b2c42ee..80b2c42ee 100644
--- a/module/webui/themes/flat/img/package_go.png
+++ b/pyload/webui/themes/flat/img/package_go.png
Binary files differ
diff --git a/module/webui/themes/flat/img/page-tools-backlinks.png b/pyload/webui/themes/flat/img/page-tools-backlinks.png
index fb8f55b38..fb8f55b38 100644
--- a/module/webui/themes/flat/img/page-tools-backlinks.png
+++ b/pyload/webui/themes/flat/img/page-tools-backlinks.png
Binary files differ
diff --git a/module/webui/themes/flat/img/page-tools-edit.png b/pyload/webui/themes/flat/img/page-tools-edit.png
index 67177cf89..67177cf89 100644
--- a/module/webui/themes/flat/img/page-tools-edit.png
+++ b/pyload/webui/themes/flat/img/page-tools-edit.png
Binary files differ
diff --git a/module/webui/themes/flat/img/page-tools-revisions.png b/pyload/webui/themes/flat/img/page-tools-revisions.png
index 088fe0087..088fe0087 100644
--- a/module/webui/themes/flat/img/page-tools-revisions.png
+++ b/pyload/webui/themes/flat/img/page-tools-revisions.png
Binary files differ
diff --git a/module/webui/themes/flat/img/pencil.png b/pyload/webui/themes/flat/img/pencil.png
index e39c93cd8..e39c93cd8 100644
--- a/module/webui/themes/flat/img/pencil.png
+++ b/pyload/webui/themes/flat/img/pencil.png
Binary files differ
diff --git a/module/webui/themes/flat/img/reconnect.png b/pyload/webui/themes/flat/img/reconnect.png
index cd35c9325..cd35c9325 100644
--- a/module/webui/themes/flat/img/reconnect.png
+++ b/pyload/webui/themes/flat/img/reconnect.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_None.png b/pyload/webui/themes/flat/img/status_None.png
index 1400d3eb3..1400d3eb3 100644
--- a/module/webui/themes/flat/img/status_None.png
+++ b/pyload/webui/themes/flat/img/status_None.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_downloading.png b/pyload/webui/themes/flat/img/status_downloading.png
index db8ad8cd6..db8ad8cd6 100644
--- a/module/webui/themes/flat/img/status_downloading.png
+++ b/pyload/webui/themes/flat/img/status_downloading.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_failed.png b/pyload/webui/themes/flat/img/status_failed.png
index 6c565c99c..6c565c99c 100644
--- a/module/webui/themes/flat/img/status_failed.png
+++ b/pyload/webui/themes/flat/img/status_failed.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_finished.png b/pyload/webui/themes/flat/img/status_finished.png
index 2c4aca40d..2c4aca40d 100644
--- a/module/webui/themes/flat/img/status_finished.png
+++ b/pyload/webui/themes/flat/img/status_finished.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_offline.png b/pyload/webui/themes/flat/img/status_offline.png
index 6c565c99c..6c565c99c 100644
--- a/module/webui/themes/flat/img/status_offline.png
+++ b/pyload/webui/themes/flat/img/status_offline.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_proc.png b/pyload/webui/themes/flat/img/status_proc.png
index 833f779ac..833f779ac 100644
--- a/module/webui/themes/flat/img/status_proc.png
+++ b/pyload/webui/themes/flat/img/status_proc.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_queue.png b/pyload/webui/themes/flat/img/status_queue.png
index 1400d3eb3..1400d3eb3 100644
--- a/module/webui/themes/flat/img/status_queue.png
+++ b/pyload/webui/themes/flat/img/status_queue.png
Binary files differ
diff --git a/module/webui/themes/flat/img/status_waiting.png b/pyload/webui/themes/flat/img/status_waiting.png
index fd038175e..fd038175e 100644
--- a/module/webui/themes/flat/img/status_waiting.png
+++ b/pyload/webui/themes/flat/img/status_waiting.png
Binary files differ
diff --git a/module/webui/themes/flat/img/success.png b/pyload/webui/themes/flat/img/success.png
index 2c4aca40d..2c4aca40d 100644
--- a/module/webui/themes/flat/img/success.png
+++ b/pyload/webui/themes/flat/img/success.png
Binary files differ
diff --git a/module/webui/themes/flat/img/user-actions-logout.png b/pyload/webui/themes/flat/img/user-actions-logout.png
index d4ef360e8..d4ef360e8 100644
--- a/module/webui/themes/flat/img/user-actions-logout.png
+++ b/pyload/webui/themes/flat/img/user-actions-logout.png
Binary files differ
diff --git a/module/webui/themes/flat/img/user-actions-profile.png b/pyload/webui/themes/flat/img/user-actions-profile.png
index 9ec410b13..9ec410b13 100644
--- a/module/webui/themes/flat/img/user-actions-profile.png
+++ b/pyload/webui/themes/flat/img/user-actions-profile.png
Binary files differ
diff --git a/module/webui/themes/flat/img/user-info.png b/pyload/webui/themes/flat/img/user-info.png
index 345ed52e4..345ed52e4 100644
--- a/module/webui/themes/flat/img/user-info.png
+++ b/pyload/webui/themes/flat/img/user-info.png
Binary files differ
diff --git a/module/webui/themes/flat/js/render/admin.coffee b/pyload/webui/themes/flat/js/render/admin.coffee
index 5afbcbb66..5afbcbb66 100644
--- a/module/webui/themes/flat/js/render/admin.coffee
+++ b/pyload/webui/themes/flat/js/render/admin.coffee
diff --git a/module/webui/themes/flat/js/render/admin.min.js b/pyload/webui/themes/flat/js/render/admin.min.js
index 94a5e494d..94a5e494d 100644
--- a/module/webui/themes/flat/js/render/admin.min.js
+++ b/pyload/webui/themes/flat/js/render/admin.min.js
diff --git a/module/webui/themes/flat/js/render/base.coffee b/pyload/webui/themes/flat/js/render/base.coffee
index 07b8bfb6f..07b8bfb6f 100644
--- a/module/webui/themes/flat/js/render/base.coffee
+++ b/pyload/webui/themes/flat/js/render/base.coffee
diff --git a/module/webui/themes/flat/js/render/base.min.js b/pyload/webui/themes/flat/js/render/base.min.js
index 1ba1d73f9..1ba1d73f9 100644
--- a/module/webui/themes/flat/js/render/base.min.js
+++ b/pyload/webui/themes/flat/js/render/base.min.js
diff --git a/module/webui/themes/flat/js/render/package.js b/pyload/webui/themes/flat/js/render/package.js
index 659a8e6fc..659a8e6fc 100644
--- a/module/webui/themes/flat/js/render/package.js
+++ b/pyload/webui/themes/flat/js/render/package.js
diff --git a/module/webui/themes/flat/js/render/settings.coffee b/pyload/webui/themes/flat/js/render/settings.coffee
index d522741b9..d522741b9 100644
--- a/module/webui/themes/flat/js/render/settings.coffee
+++ b/pyload/webui/themes/flat/js/render/settings.coffee
diff --git a/module/webui/themes/flat/js/render/settings.min.js b/pyload/webui/themes/flat/js/render/settings.min.js
index 41d1cb25a..41d1cb25a 100644
--- a/module/webui/themes/flat/js/render/settings.min.js
+++ b/pyload/webui/themes/flat/js/render/settings.min.js
diff --git a/module/webui/themes/flat/js/static/MooDialog.js b/pyload/webui/themes/flat/js/static/MooDialog.js
index 45a52496f..45a52496f 100644
--- a/module/webui/themes/flat/js/static/MooDialog.js
+++ b/pyload/webui/themes/flat/js/static/MooDialog.js
diff --git a/module/webui/themes/flat/js/static/MooDialog.min.js b/pyload/webui/themes/flat/js/static/MooDialog.min.js
index 90b3ae100..90b3ae100 100644
--- a/module/webui/themes/flat/js/static/MooDialog.min.js
+++ b/pyload/webui/themes/flat/js/static/MooDialog.min.js
diff --git a/module/webui/themes/flat/js/static/MooDropMenu.js b/pyload/webui/themes/flat/js/static/MooDropMenu.js
index ac0fa1874..ac0fa1874 100644
--- a/module/webui/themes/flat/js/static/MooDropMenu.js
+++ b/pyload/webui/themes/flat/js/static/MooDropMenu.js
diff --git a/module/webui/themes/flat/js/static/MooDropMenu.min.js b/pyload/webui/themes/flat/js/static/MooDropMenu.min.js
index 552ae247a..552ae247a 100644
--- a/module/webui/themes/flat/js/static/MooDropMenu.min.js
+++ b/pyload/webui/themes/flat/js/static/MooDropMenu.min.js
diff --git a/module/webui/themes/flat/js/static/mootools-core.js b/pyload/webui/themes/flat/js/static/mootools-core.js
index db83850fd..db83850fd 100644
--- a/module/webui/themes/flat/js/static/mootools-core.js
+++ b/pyload/webui/themes/flat/js/static/mootools-core.js
diff --git a/module/webui/themes/flat/js/static/mootools-core.min.js b/pyload/webui/themes/flat/js/static/mootools-core.min.js
index 354f94196..354f94196 100644
--- a/module/webui/themes/flat/js/static/mootools-core.min.js
+++ b/pyload/webui/themes/flat/js/static/mootools-core.min.js
diff --git a/module/webui/themes/flat/js/static/mootools-more.js b/pyload/webui/themes/flat/js/static/mootools-more.js
index c7f4a1a0e..c7f4a1a0e 100644
--- a/module/webui/themes/flat/js/static/mootools-more.js
+++ b/pyload/webui/themes/flat/js/static/mootools-more.js
diff --git a/module/webui/themes/flat/js/static/mootools-more.min.js b/pyload/webui/themes/flat/js/static/mootools-more.min.js
index ce03a60fd..ce03a60fd 100644
--- a/module/webui/themes/flat/js/static/mootools-more.min.js
+++ b/pyload/webui/themes/flat/js/static/mootools-more.min.js
diff --git a/module/webui/themes/flat/js/static/purr.js b/pyload/webui/themes/flat/js/static/purr.js
index 9cbc503d9..9cbc503d9 100644
--- a/module/webui/themes/flat/js/static/purr.js
+++ b/pyload/webui/themes/flat/js/static/purr.js
diff --git a/module/webui/themes/flat/js/static/purr.min.js b/pyload/webui/themes/flat/js/static/purr.min.js
index bf70e357d..bf70e357d 100644
--- a/module/webui/themes/flat/js/static/purr.min.js
+++ b/pyload/webui/themes/flat/js/static/purr.min.js
diff --git a/module/webui/themes/flat/js/static/tinytab.js b/pyload/webui/themes/flat/js/static/tinytab.js
index de50279fc..de50279fc 100644
--- a/module/webui/themes/flat/js/static/tinytab.js
+++ b/pyload/webui/themes/flat/js/static/tinytab.js
diff --git a/module/webui/themes/flat/js/static/tinytab.min.js b/pyload/webui/themes/flat/js/static/tinytab.min.js
index 2f4fa0436..2f4fa0436 100644
--- a/module/webui/themes/flat/js/static/tinytab.min.js
+++ b/pyload/webui/themes/flat/js/static/tinytab.min.js
diff --git a/module/webui/themes/flat/tml/admin.html b/pyload/webui/themes/flat/tml/admin.html
index c7bdd7894..c7bdd7894 100644
--- a/module/webui/themes/flat/tml/admin.html
+++ b/pyload/webui/themes/flat/tml/admin.html
diff --git a/module/webui/themes/flat/tml/base.html b/pyload/webui/themes/flat/tml/base.html
index 17349c5f1..17349c5f1 100644
--- a/module/webui/themes/flat/tml/base.html
+++ b/pyload/webui/themes/flat/tml/base.html
diff --git a/module/webui/themes/flat/tml/captcha.html b/pyload/webui/themes/flat/tml/captcha.html
index ae1afe444..ae1afe444 100644
--- a/module/webui/themes/flat/tml/captcha.html
+++ b/pyload/webui/themes/flat/tml/captcha.html
diff --git a/module/webui/themes/flat/tml/downloads.html b/pyload/webui/themes/flat/tml/downloads.html
index 445f8da37..445f8da37 100644
--- a/module/webui/themes/flat/tml/downloads.html
+++ b/pyload/webui/themes/flat/tml/downloads.html
diff --git a/module/webui/themes/flat/tml/folder.html b/pyload/webui/themes/flat/tml/folder.html
index 89b84e7bb..89b84e7bb 100644
--- a/module/webui/themes/flat/tml/folder.html
+++ b/pyload/webui/themes/flat/tml/folder.html
diff --git a/module/webui/themes/flat/tml/home.html b/pyload/webui/themes/flat/tml/home.html
index 838a351ad..838a351ad 100644
--- a/module/webui/themes/flat/tml/home.html
+++ b/pyload/webui/themes/flat/tml/home.html
diff --git a/module/webui/themes/flat/tml/info.html b/pyload/webui/themes/flat/tml/info.html
index 26b46736d..26b46736d 100644
--- a/module/webui/themes/flat/tml/info.html
+++ b/pyload/webui/themes/flat/tml/info.html
diff --git a/module/webui/themes/flat/tml/login.html b/pyload/webui/themes/flat/tml/login.html
index 76365a79c..76365a79c 100644
--- a/module/webui/themes/flat/tml/login.html
+++ b/pyload/webui/themes/flat/tml/login.html
diff --git a/module/webui/themes/flat/tml/logout.html b/pyload/webui/themes/flat/tml/logout.html
index 370031b25..370031b25 100644
--- a/module/webui/themes/flat/tml/logout.html
+++ b/pyload/webui/themes/flat/tml/logout.html
diff --git a/module/webui/themes/flat/tml/logs.html b/pyload/webui/themes/flat/tml/logs.html
index 87e5a0f30..87e5a0f30 100644
--- a/module/webui/themes/flat/tml/logs.html
+++ b/pyload/webui/themes/flat/tml/logs.html
diff --git a/module/webui/themes/flat/tml/pathchooser.html b/pyload/webui/themes/flat/tml/pathchooser.html
index 95a1a3be5..95a1a3be5 100644
--- a/module/webui/themes/flat/tml/pathchooser.html
+++ b/pyload/webui/themes/flat/tml/pathchooser.html
diff --git a/module/webui/themes/flat/tml/queue.html b/pyload/webui/themes/flat/tml/queue.html
index 0d3022ddd..0d3022ddd 100644
--- a/module/webui/themes/flat/tml/queue.html
+++ b/pyload/webui/themes/flat/tml/queue.html
diff --git a/module/webui/themes/flat/tml/settings.html b/pyload/webui/themes/flat/tml/settings.html
index 1bd0d1e17..1bd0d1e17 100644
--- a/module/webui/themes/flat/tml/settings.html
+++ b/pyload/webui/themes/flat/tml/settings.html
diff --git a/module/webui/themes/flat/tml/settings_item.html b/pyload/webui/themes/flat/tml/settings_item.html
index 813383343..813383343 100644
--- a/module/webui/themes/flat/tml/settings_item.html
+++ b/pyload/webui/themes/flat/tml/settings_item.html
diff --git a/module/webui/themes/flat/tml/window.html b/pyload/webui/themes/flat/tml/window.html
index 8f57843c6..8f57843c6 100644
--- a/module/webui/themes/flat/tml/window.html
+++ b/pyload/webui/themes/flat/tml/window.html
diff --git a/scripts/clonedigger.sh b/scripts/clonedigger.sh
index 87c3437cf..358c1b68b 100644
--- a/scripts/clonedigger.sh
+++ b/scripts/clonedigger.sh
@@ -1,4 +1,4 @@
#!/bin/sh
-PYLOAD="../module" # Check ~/pyload/module directory
+PYLOAD="../pyload" # Check pyload directory
clonedigger -o cpd.xml --cpd-output --fast --ignore-dir="lib" --ignore-dir="remote" $PYLOAD
diff --git a/scripts/code_analysis.sh b/scripts/code_analysis.sh
index dce93d63d..c853652bf 100644
--- a/scripts/code_analysis.sh
+++ b/scripts/code_analysis.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-PYLOAD="../module" # Check ~/pyload/module directory
+PYLOAD="../pyload" # Check pyload directory
echo "Running sloccount ..."
REPORT="sloccount.sc"