summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--docs/api/components.rst18
-rw-r--r--docs/api/datatypes.rst4
-rw-r--r--docs/api/json_api.rst6
-rw-r--r--docs/api/overview.rst6
-rw-r--r--docs/conf.py6
-rw-r--r--docs/docs.conf4
-rw-r--r--docs/index.rst2
-rw-r--r--docs/module_overview.rst30
-rw-r--r--docs/plugins/addon_plugin.rst40
-rw-r--r--docs/plugins/base_plugin.rst16
-rw-r--r--docs/plugins/crypter_plugin.rst12
-rw-r--r--docs/plugins/hoster_plugin.rst8
-rw-r--r--module/remote/wsbackend/__init__.py2
-rw-r--r--pavement.py67
-rwxr-xr-xpyload-cli.py596
-rwxr-xr-xpyload.py623
-rw-r--r--pyload/AccountManager.py (renamed from module/AccountManager.py)2
-rw-r--r--pyload/AddonManager.py (renamed from module/AddonManager.py)4
-rw-r--r--pyload/Api.py (renamed from module/Api.py)2
-rw-r--r--pyload/FileManager.py (renamed from module/FileManager.py)2
-rw-r--r--pyload/InitHomeDir.py (renamed from module/InitHomeDir.py)6
-rw-r--r--pyload/PluginManager.py (renamed from module/PluginManager.py)27
-rw-r--r--pyload/Scheduler.py (renamed from module/Scheduler.py)0
-rw-r--r--pyload/Setup.py (renamed from module/Setup.py)20
-rw-r--r--pyload/__init__.py (renamed from module/__init__.py)0
-rw-r--r--pyload/api/AccountApi.py (renamed from module/api/AccountApi.py)2
-rw-r--r--pyload/api/AddonApi.py (renamed from module/api/AddonApi.py)2
-rw-r--r--pyload/api/ApiComponent.py (renamed from module/api/ApiComponent.py)4
-rw-r--r--pyload/api/CollectorApi.py (renamed from module/api/CollectorApi.py)2
-rw-r--r--pyload/api/ConfigApi.py (renamed from module/api/ConfigApi.py)4
-rw-r--r--pyload/api/CoreApi.py (renamed from module/api/CoreApi.py)6
-rw-r--r--pyload/api/DownloadApi.py (renamed from module/api/DownloadApi.py)4
-rw-r--r--pyload/api/DownloadPreparingApi.py (renamed from module/api/DownloadPreparingApi.py)8
-rw-r--r--pyload/api/FileApi.py (renamed from module/api/FileApi.py)4
-rw-r--r--pyload/api/UserInteractionApi.py (renamed from module/api/UserInteractionApi.py)2
-rw-r--r--pyload/api/__init__.py (renamed from module/api/__init__.py)0
-rw-r--r--pyload/cli/AddPackage.py (renamed from module/cli/AddPackage.py)0
-rw-r--r--pyload/cli/Handler.py (renamed from module/cli/Handler.py)0
-rw-r--r--pyload/cli/ManageFiles.py (renamed from module/cli/ManageFiles.py)2
-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/config/ConfigManager.py (renamed from module/config/ConfigManager.py)4
-rw-r--r--pyload/config/ConfigParser.py (renamed from module/config/ConfigParser.py)4
-rw-r--r--pyload/config/__init__.py (renamed from module/config/__init__.py)0
-rw-r--r--pyload/config/default.py (renamed from module/config/default.py)0
-rw-r--r--pyload/database/AccountDatabase.py (renamed from module/database/AccountDatabase.py)4
-rw-r--r--pyload/database/ConfigDatabase.py (renamed from module/database/ConfigDatabase.py)2
-rw-r--r--pyload/database/DatabaseBackend.py (renamed from module/database/DatabaseBackend.py)2
-rw-r--r--pyload/database/FileDatabase.py (renamed from module/database/FileDatabase.py)4
-rw-r--r--pyload/database/StatisticDatabase.py (renamed from module/database/StatisticDatabase.py)2
-rw-r--r--pyload/database/StorageDatabase.py (renamed from module/database/StorageDatabase.py)2
-rw-r--r--pyload/database/UserDatabase.py (renamed from module/database/UserDatabase.py)2
-rw-r--r--pyload/database/__init__.py (renamed from module/database/__init__.py)0
-rw-r--r--pyload/datatypes/PyFile.py (renamed from module/datatypes/PyFile.py)4
-rw-r--r--pyload/datatypes/PyPackage.py (renamed from module/datatypes/PyPackage.py)4
-rw-r--r--pyload/datatypes/User.py (renamed from module/datatypes/User.py)4
-rw-r--r--pyload/datatypes/__init__.py (renamed from module/datatypes/__init__.py)0
-rw-r--r--pyload/interaction/EventManager.py (renamed from module/interaction/EventManager.py)0
-rw-r--r--pyload/interaction/InteractionManager.py (renamed from module/interaction/InteractionManager.py)6
-rw-r--r--pyload/interaction/InteractionTask.py (renamed from module/interaction/InteractionTask.py)4
-rw-r--r--pyload/interaction/__init__.py (renamed from module/interaction/__init__.py)0
-rw-r--r--pyload/lib/Getch.py (renamed from module/lib/Getch.py)0
-rw-r--r--pyload/lib/ReadWriteLock.py (renamed from module/lib/ReadWriteLock.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/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/forwarder.py (renamed from module/lib/forwarder.py)0
-rw-r--r--pyload/lib/hg_tool.py (renamed from module/lib/hg_tool.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/COPYING (renamed from module/lib/mod_pywebsocket/COPYING)0
-rw-r--r--pyload/lib/mod_pywebsocket/__init__.py (renamed from module/lib/mod_pywebsocket/__init__.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/_stream_base.py (renamed from module/lib/mod_pywebsocket/_stream_base.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/_stream_hixie75.py (renamed from module/lib/mod_pywebsocket/_stream_hixie75.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/_stream_hybi.py (renamed from module/lib/mod_pywebsocket/_stream_hybi.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/common.py (renamed from module/lib/mod_pywebsocket/common.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/dispatch.py (renamed from module/lib/mod_pywebsocket/dispatch.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/extensions.py (renamed from module/lib/mod_pywebsocket/extensions.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/handshake/__init__.py (renamed from module/lib/mod_pywebsocket/handshake/__init__.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/handshake/_base.py (renamed from module/lib/mod_pywebsocket/handshake/_base.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/handshake/hybi.py (renamed from module/lib/mod_pywebsocket/handshake/hybi.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/handshake/hybi00.py (renamed from module/lib/mod_pywebsocket/handshake/hybi00.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/headerparserhandler.py (renamed from module/lib/mod_pywebsocket/headerparserhandler.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/http_header_util.py (renamed from module/lib/mod_pywebsocket/http_header_util.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/memorizingfile.py (renamed from module/lib/mod_pywebsocket/memorizingfile.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/msgutil.py (renamed from module/lib/mod_pywebsocket/msgutil.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/mux.py (renamed from module/lib/mod_pywebsocket/mux.py)0
-rwxr-xr-xpyload/lib/mod_pywebsocket/standalone.py (renamed from module/lib/mod_pywebsocket/standalone.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/stream.py (renamed from module/lib/mod_pywebsocket/stream.py)0
-rw-r--r--pyload/lib/mod_pywebsocket/util.py (renamed from module/lib/mod_pywebsocket/util.py)0
-rw-r--r--pyload/lib/new_collections.py (renamed from module/lib/new_collections.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/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/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.py (renamed from module/network/HTTPChunk.py)4
-rw-r--r--pyload/network/HTTPDownload.py (renamed from module/network/HTTPDownload.py)4
-rw-r--r--pyload/network/HTTPRequest.py (renamed from module/network/HTTPRequest.py)2
-rw-r--r--pyload/network/RequestFactory.py (renamed from module/network/RequestFactory.py)0
-rw-r--r--pyload/network/XDCCRequest.py (renamed from module/network/XDCCRequest.py)2
-rw-r--r--pyload/network/__init__.py (renamed from module/network/__init__.py)0
-rw-r--r--pyload/plugins/Account.py (renamed from module/plugins/Account.py)6
-rw-r--r--pyload/plugins/Addon.py (renamed from module/plugins/Addon.py)0
-rw-r--r--pyload/plugins/Base.py (renamed from module/plugins/Base.py)4
-rw-r--r--pyload/plugins/Crypter.py (renamed from module/plugins/Crypter.py)6
-rw-r--r--pyload/plugins/Hoster.py (renamed from module/plugins/Hoster.py)6
-rw-r--r--pyload/plugins/MultiHoster.py (renamed from module/plugins/MultiHoster.py)2
-rw-r--r--pyload/plugins/ReCaptcha.py (renamed from module/plugins/ReCaptcha.py)0
-rw-r--r--pyload/plugins/__init__.py (renamed from module/plugins/__init__.py)0
-rw-r--r--pyload/plugins/accounts/AlldebridCom.py (renamed from module/plugins/accounts/AlldebridCom.py)78
-rw-r--r--pyload/plugins/accounts/BayfilesCom.py (renamed from module/plugins/accounts/BayfilesCom.py)0
-rw-r--r--pyload/plugins/accounts/BitshareCom.py (renamed from module/plugins/accounts/BitshareCom.py)0
-rw-r--r--pyload/plugins/accounts/BoltsharingCom.py (renamed from module/plugins/accounts/BoltsharingCom.py)0
-rw-r--r--pyload/plugins/accounts/CramitIn.py (renamed from module/plugins/accounts/CramitIn.py)0
-rw-r--r--pyload/plugins/accounts/CyberlockerCh.py (renamed from module/plugins/accounts/CyberlockerCh.py)0
-rw-r--r--pyload/plugins/accounts/CzshareCom.py (renamed from module/plugins/accounts/CzshareCom.py)0
-rw-r--r--pyload/plugins/accounts/DdlstorageCom.py (renamed from module/plugins/accounts/DdlstorageCom.py)0
-rw-r--r--pyload/plugins/accounts/DebridItaliaCom.py (renamed from module/plugins/accounts/DebridItaliaCom.py)0
-rw-r--r--pyload/plugins/accounts/DepositfilesCom.py (renamed from module/plugins/accounts/DepositfilesCom.py)0
-rw-r--r--pyload/plugins/accounts/EasybytezCom.py (renamed from module/plugins/accounts/EasybytezCom.py)0
-rw-r--r--pyload/plugins/accounts/EgoFilesCom.py (renamed from module/plugins/accounts/EgoFilesCom.py)0
-rw-r--r--pyload/plugins/accounts/EuroshareEu.py (renamed from module/plugins/accounts/EuroshareEu.py)0
-rw-r--r--pyload/plugins/accounts/FastshareCz.py (renamed from module/plugins/accounts/FastshareCz.py)0
-rw-r--r--pyload/plugins/accounts/FilebeerInfo.py (renamed from module/plugins/accounts/FilebeerInfo.py)0
-rw-r--r--pyload/plugins/accounts/FilecloudIo.py (renamed from module/plugins/accounts/FilecloudIo.py)0
-rw-r--r--pyload/plugins/accounts/FilefactoryCom.py (renamed from module/plugins/accounts/FilefactoryCom.py)0
-rw-r--r--pyload/plugins/accounts/FilejungleCom.py (renamed from module/plugins/accounts/FilejungleCom.py)0
-rw-r--r--pyload/plugins/accounts/FilerioCom.py (renamed from module/plugins/accounts/FilerioCom.py)0
-rw-r--r--pyload/plugins/accounts/FilesMailRu.py (renamed from module/plugins/accounts/FilesMailRu.py)0
-rw-r--r--pyload/plugins/accounts/FileserveCom.py (renamed from module/plugins/accounts/FileserveCom.py)0
-rw-r--r--pyload/plugins/accounts/FourSharedCom.py (renamed from module/plugins/accounts/FourSharedCom.py)0
-rw-r--r--pyload/plugins/accounts/FreakshareCom.py (renamed from module/plugins/accounts/FreakshareCom.py)0
-rw-r--r--pyload/plugins/accounts/FshareVn.py (renamed from module/plugins/accounts/FshareVn.py)0
-rw-r--r--pyload/plugins/accounts/Ftp.py (renamed from module/plugins/accounts/Ftp.py)0
-rw-r--r--pyload/plugins/accounts/HellshareCz.py (renamed from module/plugins/accounts/HellshareCz.py)0
-rw-r--r--pyload/plugins/accounts/HellspyCz.py (renamed from module/plugins/accounts/HellspyCz.py)0
-rw-r--r--pyload/plugins/accounts/HotfileCom.py (renamed from module/plugins/accounts/HotfileCom.py)0
-rw-r--r--pyload/plugins/accounts/Http.py (renamed from module/plugins/accounts/Http.py)0
-rw-r--r--pyload/plugins/accounts/MegasharesCom.py (renamed from module/plugins/accounts/MegasharesCom.py)0
-rw-r--r--pyload/plugins/accounts/MultiDebridCom.py (renamed from module/plugins/accounts/MultiDebridCom.py)0
-rw-r--r--pyload/plugins/accounts/MultishareCz.py (renamed from module/plugins/accounts/MultishareCz.py)0
-rwxr-xr-xpyload/plugins/accounts/NetloadIn.py (renamed from module/plugins/accounts/NetloadIn.py)0
-rw-r--r--pyload/plugins/accounts/Premium4Me.py (renamed from module/plugins/accounts/Premium4Me.py)52
-rw-r--r--pyload/plugins/accounts/PremiumizeMe.py (renamed from module/plugins/accounts/PremiumizeMe.py)88
-rw-r--r--pyload/plugins/accounts/QuickshareCz.py (renamed from module/plugins/accounts/QuickshareCz.py)0
-rw-r--r--pyload/plugins/accounts/RapidgatorNet.py (renamed from module/plugins/accounts/RapidgatorNet.py)0
-rw-r--r--pyload/plugins/accounts/RapidshareCom.py (renamed from module/plugins/accounts/RapidshareCom.py)0
-rw-r--r--pyload/plugins/accounts/RarefileNet.py (renamed from module/plugins/accounts/RarefileNet.py)0
-rw-r--r--pyload/plugins/accounts/RealdebridCom.py (renamed from module/plugins/accounts/RealdebridCom.py)0
-rw-r--r--pyload/plugins/accounts/RehostTo.py (renamed from module/plugins/accounts/RehostTo.py)0
-rw-r--r--pyload/plugins/accounts/ReloadCc.py (renamed from module/plugins/accounts/ReloadCc.py)0
-rw-r--r--pyload/plugins/accounts/RyushareCom.py (renamed from module/plugins/accounts/RyushareCom.py)0
-rw-r--r--pyload/plugins/accounts/Share76Com.py (renamed from module/plugins/accounts/Share76Com.py)0
-rw-r--r--pyload/plugins/accounts/ShareFilesCo.py (renamed from module/plugins/accounts/ShareFilesCo.py)0
-rw-r--r--pyload/plugins/accounts/ShareRapidCom.py (renamed from module/plugins/accounts/ShareRapidCom.py)0
-rw-r--r--pyload/plugins/accounts/ShareonlineBiz.py (renamed from module/plugins/accounts/ShareonlineBiz.py)0
-rw-r--r--pyload/plugins/accounts/SpeedLoadOrg.py (renamed from module/plugins/accounts/SpeedLoadOrg.py)0
-rw-r--r--pyload/plugins/accounts/StahnuTo.py (renamed from module/plugins/accounts/StahnuTo.py)0
-rw-r--r--pyload/plugins/accounts/TurbobitNet.py (renamed from module/plugins/accounts/TurbobitNet.py)0
-rw-r--r--pyload/plugins/accounts/UlozTo.py (renamed from module/plugins/accounts/UlozTo.py)0
-rw-r--r--pyload/plugins/accounts/UploadedTo.py (renamed from module/plugins/accounts/UploadedTo.py)0
-rw-r--r--pyload/plugins/accounts/UploadheroCom.py (renamed from module/plugins/accounts/UploadheroCom.py)68
-rw-r--r--pyload/plugins/accounts/UploadingCom.py (renamed from module/plugins/accounts/UploadingCom.py)0
-rw-r--r--pyload/plugins/accounts/UploadstationCom.py (renamed from module/plugins/accounts/UploadstationCom.py)0
-rw-r--r--pyload/plugins/accounts/UptoboxCom.py (renamed from module/plugins/accounts/UptoboxCom.py)0
-rw-r--r--pyload/plugins/accounts/WarserverCz.py (renamed from module/plugins/accounts/WarserverCz.py)0
-rw-r--r--pyload/plugins/accounts/WuploadCom.py (renamed from module/plugins/accounts/WuploadCom.py)0
-rw-r--r--pyload/plugins/accounts/X7To.py (renamed from module/plugins/accounts/X7To.py)132
-rw-r--r--pyload/plugins/accounts/YibaishiwuCom.py (renamed from module/plugins/accounts/YibaishiwuCom.py)0
-rw-r--r--pyload/plugins/accounts/ZeveraCom.py (renamed from module/plugins/accounts/ZeveraCom.py)0
-rw-r--r--pyload/plugins/accounts/__init__.py (renamed from module/plugins/accounts/__init__.py)0
-rw-r--r--pyload/plugins/addons/AlldebridCom.py (renamed from module/plugins/addons/AlldebridCom.py)0
-rw-r--r--pyload/plugins/addons/BypassCaptcha.py (renamed from module/plugins/addons/BypassCaptcha.py)0
-rw-r--r--pyload/plugins/addons/CaptchaBrotherhood.py (renamed from module/plugins/addons/CaptchaBrotherhood.py)0
-rw-r--r--pyload/plugins/addons/CaptchaTrader.py (renamed from module/plugins/addons/CaptchaTrader.py)0
-rw-r--r--pyload/plugins/addons/Checksum.py (renamed from module/plugins/addons/Checksum.py)0
-rw-r--r--pyload/plugins/addons/ClickAndLoad.py (renamed from module/plugins/addons/ClickAndLoad.py)0
-rw-r--r--pyload/plugins/addons/DeathByCaptcha.py (renamed from module/plugins/addons/DeathByCaptcha.py)0
-rw-r--r--pyload/plugins/addons/DebridItaliaCom.py (renamed from module/plugins/addons/DebridItaliaCom.py)0
-rw-r--r--pyload/plugins/addons/DeleteFinished.py (renamed from module/plugins/addons/DeleteFinished.py)0
-rw-r--r--pyload/plugins/addons/DownloadScheduler.py (renamed from module/plugins/addons/DownloadScheduler.py)0
-rw-r--r--pyload/plugins/addons/EasybytezCom.py (renamed from module/plugins/addons/EasybytezCom.py)0
-rw-r--r--pyload/plugins/addons/Ev0InFetcher.py (renamed from module/plugins/addons/Ev0InFetcher.py)0
-rw-r--r--pyload/plugins/addons/ExpertDecoders.py (renamed from module/plugins/addons/ExpertDecoders.py)0
-rw-r--r--pyload/plugins/addons/ExternalScripts.py (renamed from module/plugins/addons/ExternalScripts.py)0
-rw-r--r--pyload/plugins/addons/ExtractArchive.py (renamed from module/plugins/addons/ExtractArchive.py)0
-rw-r--r--pyload/plugins/addons/HotFolder.py (renamed from module/plugins/addons/HotFolder.py)0
-rw-r--r--pyload/plugins/addons/IRCInterface.py (renamed from module/plugins/addons/IRCInterface.py)0
-rw-r--r--pyload/plugins/addons/ImageTyperz.py (renamed from module/plugins/addons/ImageTyperz.py)0
-rw-r--r--pyload/plugins/addons/LinkdecrypterCom.py (renamed from module/plugins/addons/LinkdecrypterCom.py)0
-rw-r--r--pyload/plugins/addons/MergeFiles.py (renamed from module/plugins/addons/MergeFiles.py)0
-rw-r--r--pyload/plugins/addons/MultiDebridCom.py (renamed from module/plugins/addons/MultiDebridCom.py)0
-rw-r--r--pyload/plugins/addons/MultiHome.py (renamed from module/plugins/addons/MultiHome.py)0
-rw-r--r--pyload/plugins/addons/MultiHoster.py (renamed from module/plugins/addons/MultiHoster.py)0
-rw-r--r--pyload/plugins/addons/MultishareCz.py (renamed from module/plugins/addons/MultishareCz.py)0
-rw-r--r--pyload/plugins/addons/Premium4Me.py (renamed from module/plugins/addons/Premium4Me.py)64
-rw-r--r--pyload/plugins/addons/PremiumizeMe.py (renamed from module/plugins/addons/PremiumizeMe.py)0
-rw-r--r--pyload/plugins/addons/RealdebridCom.py (renamed from module/plugins/addons/RealdebridCom.py)0
-rw-r--r--pyload/plugins/addons/RehostTo.py (renamed from module/plugins/addons/RehostTo.py)0
-rw-r--r--pyload/plugins/addons/RestartFailed.py (renamed from module/plugins/addons/RestartFailed.py)0
-rw-r--r--pyload/plugins/addons/UnSkipOnFail.py (renamed from module/plugins/addons/UnSkipOnFail.py)0
-rw-r--r--pyload/plugins/addons/UpdateManager.py (renamed from module/plugins/addons/UpdateManager.py)0
-rw-r--r--pyload/plugins/addons/XFileSharingPro.py (renamed from module/plugins/addons/XFileSharingPro.py)0
-rw-r--r--pyload/plugins/addons/XMPPInterface.py (renamed from module/plugins/addons/XMPPInterface.py)0
-rw-r--r--pyload/plugins/addons/ZeveraCom.py (renamed from module/plugins/addons/ZeveraCom.py)0
-rw-r--r--pyload/plugins/addons/__init__.py (renamed from module/plugins/addons/__init__.py)0
-rw-r--r--pyload/plugins/crypter/C1neonCom.py (renamed from module/plugins/crypter/C1neonCom.py)0
-rw-r--r--pyload/plugins/crypter/CCF.py (renamed from module/plugins/crypter/CCF.py)0
-rw-r--r--pyload/plugins/crypter/CrockoComFolder.py (renamed from module/plugins/crypter/CrockoComFolder.py)0
-rw-r--r--pyload/plugins/crypter/CryptItCom.py (renamed from module/plugins/crypter/CryptItCom.py)0
-rw-r--r--pyload/plugins/crypter/CzshareComFolder.py (renamed from module/plugins/crypter/CzshareComFolder.py)0
-rw-r--r--pyload/plugins/crypter/DDLMusicOrg.py (renamed from module/plugins/crypter/DDLMusicOrg.py)0
-rw-r--r--pyload/plugins/crypter/DataHuFolder.py (renamed from module/plugins/crypter/DataHuFolder.py)0
-rw-r--r--pyload/plugins/crypter/DdlstorageComFolder.py (renamed from module/plugins/crypter/DdlstorageComFolder.py)0
-rw-r--r--pyload/plugins/crypter/DepositfilesComFolder.py (renamed from module/plugins/crypter/DepositfilesComFolder.py)0
-rw-r--r--pyload/plugins/crypter/Dereferer.py (renamed from module/plugins/crypter/Dereferer.py)0
-rw-r--r--pyload/plugins/crypter/DontKnowMe.py (renamed from module/plugins/crypter/DontKnowMe.py)0
-rw-r--r--pyload/plugins/crypter/DownloadVimeoCom.py (renamed from module/plugins/crypter/DownloadVimeoCom.py)0
-rw-r--r--pyload/plugins/crypter/DuckCryptInfo.py (renamed from module/plugins/crypter/DuckCryptInfo.py)0
-rw-r--r--pyload/plugins/crypter/EasybytezComFolder.py (renamed from module/plugins/crypter/EasybytezComFolder.py)0
-rw-r--r--pyload/plugins/crypter/EmbeduploadCom.py (renamed from module/plugins/crypter/EmbeduploadCom.py)0
-rw-r--r--pyload/plugins/crypter/FilebeerInfoFolder.py (renamed from module/plugins/crypter/FilebeerInfoFolder.py)0
-rw-r--r--pyload/plugins/crypter/FilefactoryComFolder.py (renamed from module/plugins/crypter/FilefactoryComFolder.py)0
-rw-r--r--pyload/plugins/crypter/FileserveComFolder.py (renamed from module/plugins/crypter/FileserveComFolder.py)0
-rw-r--r--pyload/plugins/crypter/FourChanOrg.py (renamed from module/plugins/crypter/FourChanOrg.py)0
-rw-r--r--pyload/plugins/crypter/FshareVnFolder.py (renamed from module/plugins/crypter/FshareVnFolder.py)0
-rw-r--r--pyload/plugins/crypter/GooGl.py (renamed from module/plugins/crypter/GooGl.py)0
-rw-r--r--pyload/plugins/crypter/HoerbuchIn.py (renamed from module/plugins/crypter/HoerbuchIn.py)0
-rw-r--r--pyload/plugins/crypter/HotfileFolderCom.py (renamed from module/plugins/crypter/HotfileFolderCom.py)0
-rw-r--r--pyload/plugins/crypter/ILoadTo.py (renamed from module/plugins/crypter/ILoadTo.py)122
-rw-r--r--pyload/plugins/crypter/LetitbitNetFolder.py (renamed from module/plugins/crypter/LetitbitNetFolder.py)0
-rw-r--r--pyload/plugins/crypter/LinkList.py (renamed from module/plugins/crypter/LinkList.py)0
-rw-r--r--pyload/plugins/crypter/LinkSaveIn.py (renamed from module/plugins/crypter/LinkSaveIn.py)454
-rw-r--r--pyload/plugins/crypter/LinkdecrypterCom.py (renamed from module/plugins/crypter/LinkdecrypterCom.py)0
-rw-r--r--pyload/plugins/crypter/LixIn.py (renamed from module/plugins/crypter/LixIn.py)0
-rw-r--r--pyload/plugins/crypter/LofCc.py (renamed from module/plugins/crypter/LofCc.py)0
-rw-r--r--pyload/plugins/crypter/MBLinkInfo.py (renamed from module/plugins/crypter/MBLinkInfo.py)0
-rw-r--r--pyload/plugins/crypter/MediafireComFolder.py (renamed from module/plugins/crypter/MediafireComFolder.py)0
-rw-r--r--pyload/plugins/crypter/Movie2kTo.py (renamed from module/plugins/crypter/Movie2kTo.py)0
-rw-r--r--pyload/plugins/crypter/MultiloadCz.py (renamed from module/plugins/crypter/MultiloadCz.py)0
-rw-r--r--pyload/plugins/crypter/MultiuploadCom.py (renamed from module/plugins/crypter/MultiuploadCom.py)0
-rw-r--r--pyload/plugins/crypter/NCryptIn.py (renamed from module/plugins/crypter/NCryptIn.py)502
-rw-r--r--pyload/plugins/crypter/NetfolderIn.py (renamed from module/plugins/crypter/NetfolderIn.py)0
-rw-r--r--pyload/plugins/crypter/OneKhDe.py (renamed from module/plugins/crypter/OneKhDe.py)0
-rwxr-xr-xpyload/plugins/crypter/OronComFolder.py (renamed from module/plugins/crypter/OronComFolder.py)0
-rw-r--r--pyload/plugins/crypter/QuickshareCzFolder.py (renamed from module/plugins/crypter/QuickshareCzFolder.py)0
-rw-r--r--pyload/plugins/crypter/RSDF.py (renamed from module/plugins/crypter/RSDF.py)0
-rw-r--r--pyload/plugins/crypter/RSLayerCom.py (renamed from module/plugins/crypter/RSLayerCom.py)0
-rw-r--r--pyload/plugins/crypter/RelinkUs.py (renamed from module/plugins/crypter/RelinkUs.py)0
-rw-r--r--pyload/plugins/crypter/SecuredIn.py (renamed from module/plugins/crypter/SecuredIn.py)0
-rw-r--r--pyload/plugins/crypter/SerienjunkiesOrg.py (renamed from module/plugins/crypter/SerienjunkiesOrg.py)0
-rw-r--r--pyload/plugins/crypter/ShareLinksBiz.py (renamed from module/plugins/crypter/ShareLinksBiz.py)536
-rw-r--r--pyload/plugins/crypter/ShareRapidComFolder.py (renamed from module/plugins/crypter/ShareRapidComFolder.py)0
-rw-r--r--pyload/plugins/crypter/SpeedLoadOrgFolder.py (renamed from module/plugins/crypter/SpeedLoadOrgFolder.py)0
-rw-r--r--pyload/plugins/crypter/StealthTo.py (renamed from module/plugins/crypter/StealthTo.py)0
-rw-r--r--pyload/plugins/crypter/TrailerzoneInfo.py (renamed from module/plugins/crypter/TrailerzoneInfo.py)0
-rw-r--r--pyload/plugins/crypter/UlozToFolder.py (renamed from module/plugins/crypter/UlozToFolder.py)0
-rw-r--r--pyload/plugins/crypter/UploadedToFolder.py (renamed from module/plugins/crypter/UploadedToFolder.py)100
-rw-r--r--pyload/plugins/crypter/WiiReloadedOrg.py (renamed from module/plugins/crypter/WiiReloadedOrg.py)102
-rw-r--r--pyload/plugins/crypter/XfilesharingProFolder.py (renamed from module/plugins/crypter/XfilesharingProFolder.py)66
-rw-r--r--pyload/plugins/crypter/YoutubeBatch.py (renamed from module/plugins/crypter/YoutubeBatch.py)0
-rw-r--r--pyload/plugins/crypter/__init__.py (renamed from module/plugins/crypter/__init__.py)0
-rwxr-xr-xpyload/plugins/hooks/Captcha9kw.py (renamed from module/plugins/hooks/Captcha9kw.py)324
-rw-r--r--pyload/plugins/hooks/ReloadCc.py (renamed from module/plugins/hooks/ReloadCc.py)0
-rw-r--r--pyload/plugins/hoster/ARD.py (renamed from module/plugins/hoster/ARD.py)0
-rw-r--r--pyload/plugins/hoster/AlldebridCom.py (renamed from module/plugins/hoster/AlldebridCom.py)168
-rw-r--r--pyload/plugins/hoster/BasePlugin.py (renamed from module/plugins/hoster/BasePlugin.py)0
-rw-r--r--pyload/plugins/hoster/BayfilesCom.py (renamed from module/plugins/hoster/BayfilesCom.py)0
-rw-r--r--pyload/plugins/hoster/BezvadataCz.py (renamed from module/plugins/hoster/BezvadataCz.py)0
-rw-r--r--pyload/plugins/hoster/BillionuploadsCom.py (renamed from module/plugins/hoster/BillionuploadsCom.py)0
-rw-r--r--pyload/plugins/hoster/BitshareCom.py (renamed from module/plugins/hoster/BitshareCom.py)0
-rw-r--r--pyload/plugins/hoster/BoltsharingCom.py (renamed from module/plugins/hoster/BoltsharingCom.py)0
-rw-r--r--pyload/plugins/hoster/CatShareNet.py (renamed from module/plugins/hoster/CatShareNet.py)0
-rw-r--r--pyload/plugins/hoster/ChipDe.py (renamed from module/plugins/hoster/ChipDe.py)0
-rw-r--r--pyload/plugins/hoster/CloudzerNet.py (renamed from module/plugins/hoster/CloudzerNet.py)0
-rw-r--r--pyload/plugins/hoster/CramitIn.py (renamed from module/plugins/hoster/CramitIn.py)0
-rw-r--r--pyload/plugins/hoster/CrockoCom.py (renamed from module/plugins/hoster/CrockoCom.py)0
-rw-r--r--pyload/plugins/hoster/CyberlockerCh.py (renamed from module/plugins/hoster/CyberlockerCh.py)0
-rw-r--r--pyload/plugins/hoster/CzshareCom.py (renamed from module/plugins/hoster/CzshareCom.py)0
-rw-r--r--pyload/plugins/hoster/DailymotionCom.py (renamed from module/plugins/hoster/DailymotionCom.py)0
-rw-r--r--pyload/plugins/hoster/DataHu.py (renamed from module/plugins/hoster/DataHu.py)0
-rw-r--r--pyload/plugins/hoster/DataportCz.py (renamed from module/plugins/hoster/DataportCz.py)0
-rw-r--r--pyload/plugins/hoster/DateiTo.py (renamed from module/plugins/hoster/DateiTo.py)0
-rw-r--r--pyload/plugins/hoster/DdlstorageCom.py (renamed from module/plugins/hoster/DdlstorageCom.py)0
-rw-r--r--pyload/plugins/hoster/DebridItaliaCom.py (renamed from module/plugins/hoster/DebridItaliaCom.py)0
-rw-r--r--pyload/plugins/hoster/DepositfilesCom.py (renamed from module/plugins/hoster/DepositfilesCom.py)0
-rw-r--r--pyload/plugins/hoster/DlFreeFr.py (renamed from module/plugins/hoster/DlFreeFr.py)0
-rw-r--r--pyload/plugins/hoster/EasybytezCom.py (renamed from module/plugins/hoster/EasybytezCom.py)0
-rw-r--r--pyload/plugins/hoster/EdiskCz.py (renamed from module/plugins/hoster/EdiskCz.py)0
-rw-r--r--pyload/plugins/hoster/EgoFilesCom.py (renamed from module/plugins/hoster/EgoFilesCom.py)206
-rw-r--r--pyload/plugins/hoster/EuroshareEu.py (renamed from module/plugins/hoster/EuroshareEu.py)0
-rw-r--r--pyload/plugins/hoster/ExtabitCom.py (renamed from module/plugins/hoster/ExtabitCom.py)0
-rw-r--r--pyload/plugins/hoster/FastshareCz.py (renamed from module/plugins/hoster/FastshareCz.py)0
-rw-r--r--pyload/plugins/hoster/FileApeCom.py (renamed from module/plugins/hoster/FileApeCom.py)0
-rw-r--r--pyload/plugins/hoster/FilebeerInfo.py (renamed from module/plugins/hoster/FilebeerInfo.py)0
-rw-r--r--pyload/plugins/hoster/FilecloudIo.py (renamed from module/plugins/hoster/FilecloudIo.py)0
-rw-r--r--pyload/plugins/hoster/FilefactoryCom.py (renamed from module/plugins/hoster/FilefactoryCom.py)0
-rw-r--r--pyload/plugins/hoster/FilejungleCom.py (renamed from module/plugins/hoster/FilejungleCom.py)0
-rw-r--r--pyload/plugins/hoster/FilepostCom.py (renamed from module/plugins/hoster/FilepostCom.py)0
-rw-r--r--pyload/plugins/hoster/FilerNet.py (renamed from module/plugins/hoster/FilerNet.py)0
-rw-r--r--pyload/plugins/hoster/FilerioCom.py (renamed from module/plugins/hoster/FilerioCom.py)0
-rw-r--r--pyload/plugins/hoster/FilesMailRu.py (renamed from module/plugins/hoster/FilesMailRu.py)0
-rw-r--r--pyload/plugins/hoster/FileserveCom.py (renamed from module/plugins/hoster/FileserveCom.py)0
-rw-r--r--pyload/plugins/hoster/FileshareInUa.py (renamed from module/plugins/hoster/FileshareInUa.py)0
-rw-r--r--pyload/plugins/hoster/FlyFilesNet.py (renamed from module/plugins/hoster/FlyFilesNet.py)0
-rw-r--r--pyload/plugins/hoster/FourSharedCom.py (renamed from module/plugins/hoster/FourSharedCom.py)0
-rw-r--r--pyload/plugins/hoster/FreakshareCom.py (renamed from module/plugins/hoster/FreakshareCom.py)334
-rw-r--r--pyload/plugins/hoster/FreevideoCz.py (renamed from module/plugins/hoster/FreevideoCz.py)0
-rw-r--r--pyload/plugins/hoster/FshareVn.py (renamed from module/plugins/hoster/FshareVn.py)0
-rw-r--r--pyload/plugins/hoster/Ftp.py (renamed from module/plugins/hoster/Ftp.py)180
-rw-r--r--pyload/plugins/hoster/GamefrontCom.py (renamed from module/plugins/hoster/GamefrontCom.py)0
-rw-r--r--pyload/plugins/hoster/GigapetaCom.py (renamed from module/plugins/hoster/GigapetaCom.py)0
-rw-r--r--pyload/plugins/hoster/HellshareCz.py (renamed from module/plugins/hoster/HellshareCz.py)0
-rw-r--r--pyload/plugins/hoster/HellspyCz.py (renamed from module/plugins/hoster/HellspyCz.py)0
-rw-r--r--pyload/plugins/hoster/HotfileCom.py (renamed from module/plugins/hoster/HotfileCom.py)0
-rw-r--r--pyload/plugins/hoster/IFileWs.py (renamed from module/plugins/hoster/IFileWs.py)0
-rw-r--r--pyload/plugins/hoster/IcyFilesCom.py (renamed from module/plugins/hoster/IcyFilesCom.py)0
-rw-r--r--pyload/plugins/hoster/IfileIt.py (renamed from module/plugins/hoster/IfileIt.py)0
-rw-r--r--pyload/plugins/hoster/IfolderRu.py (renamed from module/plugins/hoster/IfolderRu.py)0
-rw-r--r--pyload/plugins/hoster/JumbofilesCom.py (renamed from module/plugins/hoster/JumbofilesCom.py)0
-rw-r--r--pyload/plugins/hoster/LetitbitNet.py (renamed from module/plugins/hoster/LetitbitNet.py)0
-rw-r--r--pyload/plugins/hoster/LoadTo.py (renamed from module/plugins/hoster/LoadTo.py)0
-rw-r--r--pyload/plugins/hoster/LuckyShareNet.py (renamed from module/plugins/hoster/LuckyShareNet.py)144
-rw-r--r--pyload/plugins/hoster/MediafireCom.py (renamed from module/plugins/hoster/MediafireCom.py)0
-rw-r--r--pyload/plugins/hoster/MegaNz.py (renamed from module/plugins/hoster/MegaNz.py)0
-rw-r--r--pyload/plugins/hoster/MegasharesCom.py (renamed from module/plugins/hoster/MegasharesCom.py)0
-rw-r--r--pyload/plugins/hoster/MovReelCom.py (renamed from module/plugins/hoster/MovReelCom.py)0
-rw-r--r--pyload/plugins/hoster/MultiDebridCom.py (renamed from module/plugins/hoster/MultiDebridCom.py)0
-rw-r--r--pyload/plugins/hoster/MultishareCz.py (renamed from module/plugins/hoster/MultishareCz.py)0
-rw-r--r--pyload/plugins/hoster/MyvideoDe.py (renamed from module/plugins/hoster/MyvideoDe.py)0
-rw-r--r--pyload/plugins/hoster/NarodRu.py (renamed from module/plugins/hoster/NarodRu.py)0
-rw-r--r--pyload/plugins/hoster/NetloadIn.py (renamed from module/plugins/hoster/NetloadIn.py)0
-rw-r--r--pyload/plugins/hoster/NovafileCom.py (renamed from module/plugins/hoster/NovafileCom.py)0
-rw-r--r--pyload/plugins/hoster/NowDownloadEu.py (renamed from module/plugins/hoster/NowDownloadEu.py)0
-rw-r--r--pyload/plugins/hoster/OneFichierCom.py (renamed from module/plugins/hoster/OneFichierCom.py)0
-rw-r--r--pyload/plugins/hoster/PornhostCom.py (renamed from module/plugins/hoster/PornhostCom.py)152
-rw-r--r--pyload/plugins/hoster/PornhubCom.py (renamed from module/plugins/hoster/PornhubCom.py)166
-rw-r--r--pyload/plugins/hoster/Premium4Me.py (renamed from module/plugins/hoster/Premium4Me.py)140
-rw-r--r--pyload/plugins/hoster/PremiumizeMe.py (renamed from module/plugins/hoster/PremiumizeMe.py)100
-rw-r--r--pyload/plugins/hoster/PutlockerCom.py (renamed from module/plugins/hoster/PutlockerCom.py)0
-rw-r--r--pyload/plugins/hoster/QuickshareCz.py (renamed from module/plugins/hoster/QuickshareCz.py)0
-rw-r--r--pyload/plugins/hoster/RapidgatorNet.py (renamed from module/plugins/hoster/RapidgatorNet.py)0
-rw-r--r--pyload/plugins/hoster/RapidshareCom.py (renamed from module/plugins/hoster/RapidshareCom.py)0
-rw-r--r--pyload/plugins/hoster/RarefileNet.py (renamed from module/plugins/hoster/RarefileNet.py)0
-rw-r--r--pyload/plugins/hoster/RealdebridCom.py (renamed from module/plugins/hoster/RealdebridCom.py)0
-rw-r--r--pyload/plugins/hoster/RedtubeCom.py (renamed from module/plugins/hoster/RedtubeCom.py)112
-rw-r--r--pyload/plugins/hoster/RehostTo.py (renamed from module/plugins/hoster/RehostTo.py)0
-rw-r--r--pyload/plugins/hoster/ReloadCc.py (renamed from module/plugins/hoster/ReloadCc.py)0
-rw-r--r--pyload/plugins/hoster/RyushareCom.py (renamed from module/plugins/hoster/RyushareCom.py)0
-rw-r--r--pyload/plugins/hoster/SecureUploadEu.py (renamed from module/plugins/hoster/SecureUploadEu.py)0
-rw-r--r--pyload/plugins/hoster/SendmywayCom.py (renamed from module/plugins/hoster/SendmywayCom.py)0
-rw-r--r--pyload/plugins/hoster/SendspaceCom.py (renamed from module/plugins/hoster/SendspaceCom.py)0
-rw-r--r--pyload/plugins/hoster/Share4webCom.py (renamed from module/plugins/hoster/Share4webCom.py)0
-rw-r--r--pyload/plugins/hoster/Share76Com.py (renamed from module/plugins/hoster/Share76Com.py)0
-rw-r--r--pyload/plugins/hoster/ShareFilesCo.py (renamed from module/plugins/hoster/ShareFilesCo.py)0
-rw-r--r--pyload/plugins/hoster/ShareRapidCom.py (renamed from module/plugins/hoster/ShareRapidCom.py)0
-rw-r--r--pyload/plugins/hoster/SharebeesCom.py (renamed from module/plugins/hoster/SharebeesCom.py)0
-rw-r--r--pyload/plugins/hoster/ShareonlineBiz.py (renamed from module/plugins/hoster/ShareonlineBiz.py)0
-rw-r--r--pyload/plugins/hoster/ShareplaceCom.py (renamed from module/plugins/hoster/ShareplaceCom.py)168
-rw-r--r--pyload/plugins/hoster/ShragleCom.py (renamed from module/plugins/hoster/ShragleCom.py)0
-rw-r--r--pyload/plugins/hoster/SpeedLoadOrg.py (renamed from module/plugins/hoster/SpeedLoadOrg.py)0
-rw-r--r--pyload/plugins/hoster/SpeedfileCz.py (renamed from module/plugins/hoster/SpeedfileCz.py)0
-rw-r--r--pyload/plugins/hoster/StreamCz.py (renamed from module/plugins/hoster/StreamCz.py)0
-rw-r--r--pyload/plugins/hoster/TurbobitNet.py (renamed from module/plugins/hoster/TurbobitNet.py)0
-rw-r--r--pyload/plugins/hoster/TurbouploadCom.py (renamed from module/plugins/hoster/TurbouploadCom.py)0
-rw-r--r--pyload/plugins/hoster/TusfilesNet.py (renamed from module/plugins/hoster/TusfilesNet.py)0
-rw-r--r--pyload/plugins/hoster/TwoSharedCom.py (renamed from module/plugins/hoster/TwoSharedCom.py)0
-rw-r--r--pyload/plugins/hoster/UlozTo.py (renamed from module/plugins/hoster/UlozTo.py)0
-rw-r--r--pyload/plugins/hoster/UloziskoSk.py (renamed from module/plugins/hoster/UloziskoSk.py)0
-rw-r--r--pyload/plugins/hoster/UnibytesCom.py (renamed from module/plugins/hoster/UnibytesCom.py)0
-rw-r--r--pyload/plugins/hoster/UploadStationCom.py (renamed from module/plugins/hoster/UploadStationCom.py)40
-rw-r--r--pyload/plugins/hoster/UploadedTo.py (renamed from module/plugins/hoster/UploadedTo.py)0
-rw-r--r--pyload/plugins/hoster/UploadheroCom.py (renamed from module/plugins/hoster/UploadheroCom.py)0
-rw-r--r--pyload/plugins/hoster/UploadingCom.py (renamed from module/plugins/hoster/UploadingCom.py)218
-rw-r--r--pyload/plugins/hoster/UptoboxCom.py (renamed from module/plugins/hoster/UptoboxCom.py)0
-rw-r--r--pyload/plugins/hoster/VeehdCom.py (renamed from module/plugins/hoster/VeehdCom.py)0
-rw-r--r--pyload/plugins/hoster/WarserverCz.py (renamed from module/plugins/hoster/WarserverCz.py)0
-rw-r--r--pyload/plugins/hoster/WebshareCz.py (renamed from module/plugins/hoster/WebshareCz.py)0
-rw-r--r--pyload/plugins/hoster/WrzucTo.py (renamed from module/plugins/hoster/WrzucTo.py)0
-rw-r--r--pyload/plugins/hoster/WuploadCom.py (renamed from module/plugins/hoster/WuploadCom.py)0
-rw-r--r--pyload/plugins/hoster/X7To.py (renamed from module/plugins/hoster/X7To.py)186
-rw-r--r--pyload/plugins/hoster/XFileSharingPro.py (renamed from module/plugins/hoster/XFileSharingPro.py)0
-rw-r--r--pyload/plugins/hoster/XHamsterCom.py (renamed from module/plugins/hoster/XHamsterCom.py)0
-rw-r--r--pyload/plugins/hoster/XVideosCom.py (renamed from module/plugins/hoster/XVideosCom.py)0
-rw-r--r--pyload/plugins/hoster/Xdcc.py (renamed from module/plugins/hoster/Xdcc.py)458
-rw-r--r--pyload/plugins/hoster/XvidstageCom.py (renamed from module/plugins/hoster/XvidstageCom.py)0
-rw-r--r--pyload/plugins/hoster/YibaishiwuCom.py (renamed from module/plugins/hoster/YibaishiwuCom.py)0
-rw-r--r--pyload/plugins/hoster/YoupornCom.py (renamed from module/plugins/hoster/YoupornCom.py)0
-rw-r--r--pyload/plugins/hoster/YourfilesTo.py (renamed from module/plugins/hoster/YourfilesTo.py)166
-rw-r--r--pyload/plugins/hoster/YoutubeCom.py (renamed from module/plugins/hoster/YoutubeCom.py)0
-rw-r--r--pyload/plugins/hoster/ZDF.py (renamed from module/plugins/hoster/ZDF.py)0
-rw-r--r--pyload/plugins/hoster/ZeveraCom.py (renamed from module/plugins/hoster/ZeveraCom.py)0
-rw-r--r--pyload/plugins/hoster/ZippyshareCom.py (renamed from module/plugins/hoster/ZippyshareCom.py)0
-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/DeadHoster.py (renamed from module/plugins/internal/DeadHoster.py)0
-rw-r--r--pyload/plugins/internal/NetloadInOCR.py (renamed from module/plugins/internal/NetloadInOCR.py)0
-rw-r--r--pyload/plugins/internal/OCR.py (renamed from module/plugins/internal/OCR.py)0
-rw-r--r--pyload/plugins/internal/ShareonlineBizOCR.py (renamed from module/plugins/internal/ShareonlineBizOCR.py)0
-rw-r--r--pyload/plugins/internal/SimpleCrypter.py (renamed from module/plugins/internal/SimpleCrypter.py)0
-rw-r--r--pyload/plugins/internal/SimpleHoster.py (renamed from module/plugins/internal/SimpleHoster.py)0
-rw-r--r--pyload/plugins/internal/UnRar.py (renamed from module/plugins/internal/UnRar.py)0
-rw-r--r--pyload/plugins/internal/UnZip.py (renamed from module/plugins/internal/UnZip.py)0
-rw-r--r--pyload/plugins/internal/XFSPAccount.py (renamed from module/plugins/internal/XFSPAccount.py)0
-rw-r--r--pyload/plugins/internal/__init__.py (renamed from module/plugins/internal/__init__.py)0
-rw-r--r--pyload/remote/ClickAndLoadBackend.py (renamed from module/remote/ClickAndLoadBackend.py)0
-rw-r--r--pyload/remote/JSONClient.py (renamed from module/remote/JSONClient.py)0
-rw-r--r--pyload/remote/RemoteManager.py (renamed from module/remote/RemoteManager.py)2
-rw-r--r--pyload/remote/WSClient.py (renamed from module/remote/WSClient.py)0
-rw-r--r--pyload/remote/WebSocketBackend.py (renamed from module/remote/WebSocketBackend.py)2
-rw-r--r--pyload/remote/__init__.py (renamed from module/remote/__init__.py)0
-rw-r--r--pyload/remote/apitypes.py (renamed from module/remote/apitypes.py)0
-rw-r--r--pyload/remote/apitypes_debug.py (renamed from module/remote/apitypes_debug.py)0
-rw-r--r--pyload/remote/create_apitypes.py (renamed from module/remote/create_apitypes.py)0
-rw-r--r--pyload/remote/create_jstypes.py (renamed from module/remote/create_jstypes.py)0
-rw-r--r--pyload/remote/json_converter.py (renamed from module/remote/json_converter.py)2
-rw-r--r--pyload/remote/pyload.thrift (renamed from module/remote/pyload.thrift)0
-rw-r--r--pyload/remote/ttypes.py (renamed from module/remote/ttypes.py)0
-rw-r--r--pyload/remote/wsbackend/AbstractHandler.py (renamed from module/remote/wsbackend/AbstractHandler.py)4
-rw-r--r--pyload/remote/wsbackend/ApiHandler.py (renamed from module/remote/wsbackend/ApiHandler.py)2
-rw-r--r--pyload/remote/wsbackend/AsyncHandler.py (renamed from module/remote/wsbackend/AsyncHandler.py)4
-rw-r--r--pyload/remote/wsbackend/Dispatcher.py (renamed from module/remote/wsbackend/Dispatcher.py)0
-rw-r--r--pyload/remote/wsbackend/Server.py (renamed from module/remote/wsbackend/Server.py)0
-rw-r--r--pyload/remote/wsbackend/__init__.py (renamed from module/threads/__init__.py)0
-rw-r--r--pyload/setup/System_Checks.py (renamed from module/setup/System_Checks.py)0
-rw-r--r--pyload/threads/AddonThread.py (renamed from module/threads/AddonThread.py)0
-rw-r--r--pyload/threads/BaseThread.py (renamed from module/threads/BaseThread.py)4
-rw-r--r--pyload/threads/DecrypterThread.py (renamed from module/threads/DecrypterThread.py)6
-rw-r--r--pyload/threads/DownloadThread.py (renamed from module/threads/DownloadThread.py)6
-rw-r--r--pyload/threads/InfoThread.py (renamed from module/threads/InfoThread.py)6
-rw-r--r--pyload/threads/ThreadManager.py (renamed from module/threads/ThreadManager.py)8
-rw-r--r--pyload/threads/__init__.py (renamed from module/web/__init__.py)0
-rw-r--r--pyload/utils/ImportDebugger.py (renamed from module/utils/ImportDebugger.py)0
-rw-r--r--pyload/utils/JsEngine.py (renamed from module/utils/JsEngine.py)0
-rw-r--r--pyload/utils/__init__.py (renamed from module/utils/__init__.py)0
-rw-r--r--pyload/utils/fs.py (renamed from module/utils/fs.py)0
-rw-r--r--pyload/utils/json_layer.py (renamed from module/utils/json_layer.py)0
-rw-r--r--pyload/utils/packagetools.py (renamed from module/utils/packagetools.py)0
-rw-r--r--pyload/utils/pylgettext.py (renamed from module/utils/pylgettext.py)0
-rw-r--r--pyload/web/.bowerrc (renamed from module/web/.bowerrc)0
-rw-r--r--pyload/web/.jshintrc (renamed from module/web/.jshintrc)0
-rw-r--r--pyload/web/Gruntfile.js (renamed from module/web/Gruntfile.js)0
-rw-r--r--pyload/web/ServerThread.py (renamed from module/web/ServerThread.py)2
-rw-r--r--pyload/web/__init__.py0
-rw-r--r--pyload/web/api_app.py (renamed from module/web/api_app.py)6
-rw-r--r--pyload/web/app/favicon.ico (renamed from module/web/app/favicon.ico)bin6006 -> 6006 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Bold-webfont.eot (renamed from module/web/app/fonts/Sansation_Bold-webfont.eot)bin35336 -> 35336 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Bold-webfont.ttf (renamed from module/web/app/fonts/Sansation_Bold-webfont.ttf)bin35160 -> 35160 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Bold-webfont.woff (renamed from module/web/app/fonts/Sansation_Bold-webfont.woff)bin18496 -> 18496 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Light-webfont.eot (renamed from module/web/app/fonts/Sansation_Light-webfont.eot)bin36700 -> 36700 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Light-webfont.ttf (renamed from module/web/app/fonts/Sansation_Light-webfont.ttf)bin36520 -> 36520 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Light-webfont.woff (renamed from module/web/app/fonts/Sansation_Light-webfont.woff)bin18408 -> 18408 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Regular-webfont.eot (renamed from module/web/app/fonts/Sansation_Regular-webfont.eot)bin36368 -> 36368 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Regular-webfont.ttf (renamed from module/web/app/fonts/Sansation_Regular-webfont.ttf)bin36180 -> 36180 bytes
-rw-r--r--pyload/web/app/fonts/Sansation_Regular-webfont.woff (renamed from module/web/app/fonts/Sansation_Regular-webfont.woff)bin18316 -> 18316 bytes
-rw-r--r--pyload/web/app/images/default/bgpattern.png (renamed from module/web/app/images/default/bgpattern.png)bin2487 -> 2487 bytes
-rw-r--r--pyload/web/app/images/default/checks_sheet.png (renamed from module/web/app/images/default/checks_sheet.png)bin1145 -> 1145 bytes
-rw-r--r--pyload/web/app/images/default/fancy_deboss.png (renamed from module/web/app/images/default/fancy_deboss.png)bin265 -> 265 bytes
-rw-r--r--pyload/web/app/images/default/logo.png (renamed from module/web/app/images/default/logo.png)bin5329 -> 5329 bytes
-rw-r--r--pyload/web/app/images/default/logo_grey.png (renamed from module/web/app/images/default/logo_grey.png)bin1141 -> 1141 bytes
-rw-r--r--pyload/web/app/images/icon.png (renamed from module/web/app/images/icon.png)bin1912 -> 1912 bytes
-rw-r--r--pyload/web/app/index.html (renamed from module/web/app/index.html)0
-rw-r--r--pyload/web/app/scripts/app.js (renamed from module/web/app/scripts/app.js)0
-rw-r--r--pyload/web/app/scripts/collections/AccountList.js (renamed from module/web/app/scripts/collections/AccountList.js)0
-rw-r--r--pyload/web/app/scripts/collections/FileList.js (renamed from module/web/app/scripts/collections/FileList.js)0
-rw-r--r--pyload/web/app/scripts/collections/InteractionList.js (renamed from module/web/app/scripts/collections/InteractionList.js)0
-rw-r--r--pyload/web/app/scripts/collections/PackageList.js (renamed from module/web/app/scripts/collections/PackageList.js)0
-rw-r--r--pyload/web/app/scripts/collections/ProgressList.js (renamed from module/web/app/scripts/collections/ProgressList.js)0
-rw-r--r--pyload/web/app/scripts/config.js (renamed from module/web/app/scripts/config.js)0
-rw-r--r--pyload/web/app/scripts/controller.js (renamed from module/web/app/scripts/controller.js)0
-rw-r--r--pyload/web/app/scripts/default.js (renamed from module/web/app/scripts/default.js)0
-rw-r--r--pyload/web/app/scripts/helpers/fileHelper.js (renamed from module/web/app/scripts/helpers/fileHelper.js)0
-rw-r--r--pyload/web/app/scripts/helpers/formatSize.js (renamed from module/web/app/scripts/helpers/formatSize.js)0
-rw-r--r--pyload/web/app/scripts/helpers/formatTime.js (renamed from module/web/app/scripts/helpers/formatTime.js)0
-rw-r--r--pyload/web/app/scripts/helpers/pluginIcon.js (renamed from module/web/app/scripts/helpers/pluginIcon.js)0
-rw-r--r--pyload/web/app/scripts/models/Account.js (renamed from module/web/app/scripts/models/Account.js)0
-rw-r--r--pyload/web/app/scripts/models/ConfigHolder.js (renamed from module/web/app/scripts/models/ConfigHolder.js)0
-rw-r--r--pyload/web/app/scripts/models/ConfigItem.js (renamed from module/web/app/scripts/models/ConfigItem.js)0
-rw-r--r--pyload/web/app/scripts/models/File.js (renamed from module/web/app/scripts/models/File.js)0
-rw-r--r--pyload/web/app/scripts/models/InteractionTask.js (renamed from module/web/app/scripts/models/InteractionTask.js)0
-rw-r--r--pyload/web/app/scripts/models/Package.js (renamed from module/web/app/scripts/models/Package.js)0
-rw-r--r--pyload/web/app/scripts/models/Progress.js (renamed from module/web/app/scripts/models/Progress.js)0
-rw-r--r--pyload/web/app/scripts/models/ServerStatus.js (renamed from module/web/app/scripts/models/ServerStatus.js)0
-rw-r--r--pyload/web/app/scripts/models/TreeCollection.js (renamed from module/web/app/scripts/models/TreeCollection.js)0
-rw-r--r--pyload/web/app/scripts/models/UserSession.js (renamed from module/web/app/scripts/models/UserSession.js)0
-rw-r--r--pyload/web/app/scripts/router.js (renamed from module/web/app/scripts/router.js)0
-rw-r--r--pyload/web/app/scripts/routers/defaultRouter.js (renamed from module/web/app/scripts/routers/defaultRouter.js)0
-rw-r--r--pyload/web/app/scripts/routers/mobileRouter.js (renamed from module/web/app/scripts/routers/mobileRouter.js)0
-rw-r--r--pyload/web/app/scripts/utils/animations.js (renamed from module/web/app/scripts/utils/animations.js)0
-rw-r--r--pyload/web/app/scripts/utils/apitypes.js (renamed from module/web/app/scripts/utils/apitypes.js)0
-rw-r--r--pyload/web/app/scripts/utils/dialogs.js (renamed from module/web/app/scripts/utils/dialogs.js)0
-rw-r--r--pyload/web/app/scripts/utils/initHB.js (renamed from module/web/app/scripts/utils/initHB.js)0
-rw-r--r--pyload/web/app/scripts/utils/lazyRequire.js (renamed from module/web/app/scripts/utils/lazyRequire.js)0
-rw-r--r--pyload/web/app/scripts/vendor/Handlebars-1.0rc1.js (renamed from module/web/app/scripts/vendor/Handlebars-1.0rc1.js)0
-rwxr-xr-xpyload/web/app/scripts/vendor/bootstrap-2.3.2.js (renamed from module/web/app/scripts/vendor/bootstrap-2.3.2.js)0
-rw-r--r--pyload/web/app/scripts/vendor/jquery.omniwindow.js (renamed from module/web/app/scripts/vendor/jquery.omniwindow.js)0
-rw-r--r--pyload/web/app/scripts/vendor/remaining.js (renamed from module/web/app/scripts/vendor/remaining.js)0
-rw-r--r--pyload/web/app/scripts/views/abstract/itemView.js (renamed from module/web/app/scripts/views/abstract/itemView.js)0
-rw-r--r--pyload/web/app/scripts/views/abstract/modalView.js (renamed from module/web/app/scripts/views/abstract/modalView.js)0
-rw-r--r--pyload/web/app/scripts/views/accounts/accountListView.js (renamed from module/web/app/scripts/views/accounts/accountListView.js)0
-rw-r--r--pyload/web/app/scripts/views/accounts/accountModal.js (renamed from module/web/app/scripts/views/accounts/accountModal.js)0
-rw-r--r--pyload/web/app/scripts/views/accounts/accountView.js (renamed from module/web/app/scripts/views/accounts/accountView.js)0
-rw-r--r--pyload/web/app/scripts/views/dashboard/dashboardView.js (renamed from module/web/app/scripts/views/dashboard/dashboardView.js)0
-rw-r--r--pyload/web/app/scripts/views/dashboard/fileView.js (renamed from module/web/app/scripts/views/dashboard/fileView.js)0
-rw-r--r--pyload/web/app/scripts/views/dashboard/filterView.js (renamed from module/web/app/scripts/views/dashboard/filterView.js)0
-rw-r--r--pyload/web/app/scripts/views/dashboard/packageView.js (renamed from module/web/app/scripts/views/dashboard/packageView.js)0
-rw-r--r--pyload/web/app/scripts/views/dashboard/selectionView.js (renamed from module/web/app/scripts/views/dashboard/selectionView.js)0
-rw-r--r--pyload/web/app/scripts/views/headerView.js (renamed from module/web/app/scripts/views/headerView.js)0
-rw-r--r--pyload/web/app/scripts/views/input/inputLoader.js (renamed from module/web/app/scripts/views/input/inputLoader.js)0
-rw-r--r--pyload/web/app/scripts/views/input/inputView.js (renamed from module/web/app/scripts/views/input/inputView.js)0
-rw-r--r--pyload/web/app/scripts/views/input/textInput.js (renamed from module/web/app/scripts/views/input/textInput.js)0
-rw-r--r--pyload/web/app/scripts/views/linkGrabberModal.js (renamed from module/web/app/scripts/views/linkGrabberModal.js)0
-rw-r--r--pyload/web/app/scripts/views/loginView.js (renamed from module/web/app/scripts/views/loginView.js)0
-rw-r--r--pyload/web/app/scripts/views/notificationView.js (renamed from module/web/app/scripts/views/notificationView.js)0
-rw-r--r--pyload/web/app/scripts/views/progressView.js (renamed from module/web/app/scripts/views/progressView.js)0
-rw-r--r--pyload/web/app/scripts/views/queryModal.js (renamed from module/web/app/scripts/views/queryModal.js)0
-rw-r--r--pyload/web/app/scripts/views/settings/configSectionView.js (renamed from module/web/app/scripts/views/settings/configSectionView.js)0
-rw-r--r--pyload/web/app/scripts/views/settings/pluginChooserModal.js (renamed from module/web/app/scripts/views/settings/pluginChooserModal.js)0
-rw-r--r--pyload/web/app/scripts/views/settings/settingsView.js (renamed from module/web/app/scripts/views/settings/settingsView.js)0
-rw-r--r--pyload/web/app/styles/default/accounts.less (renamed from module/web/app/styles/default/accounts.less)0
-rw-r--r--pyload/web/app/styles/default/admin.less (renamed from module/web/app/styles/default/admin.less)0
-rw-r--r--pyload/web/app/styles/default/base.less (renamed from module/web/app/styles/default/base.less)0
-rw-r--r--pyload/web/app/styles/default/common.less (renamed from module/web/app/styles/default/common.less)0
-rw-r--r--pyload/web/app/styles/default/dashboard.less (renamed from module/web/app/styles/default/dashboard.less)0
-rw-r--r--pyload/web/app/styles/default/main.less (renamed from module/web/app/styles/default/main.less)0
-rw-r--r--pyload/web/app/styles/default/settings.less (renamed from module/web/app/styles/default/settings.less)0
-rw-r--r--pyload/web/app/styles/default/style.less (renamed from module/web/app/styles/default/style.less)0
-rw-r--r--pyload/web/app/styles/font.css (renamed from module/web/app/styles/font.css)0
-rw-r--r--pyload/web/app/templates/default/accounts/account.html (renamed from module/web/app/templates/default/accounts/account.html)0
-rw-r--r--pyload/web/app/templates/default/accounts/actionbar.html (renamed from module/web/app/templates/default/accounts/actionbar.html)0
-rw-r--r--pyload/web/app/templates/default/accounts/layout.html (renamed from module/web/app/templates/default/accounts/layout.html)0
-rw-r--r--pyload/web/app/templates/default/admin.html (renamed from module/web/app/templates/default/admin.html)0
-rw-r--r--pyload/web/app/templates/default/dashboard/actionbar.html (renamed from module/web/app/templates/default/dashboard/actionbar.html)0
-rw-r--r--pyload/web/app/templates/default/dashboard/file.html (renamed from module/web/app/templates/default/dashboard/file.html)0
-rw-r--r--pyload/web/app/templates/default/dashboard/layout.html (renamed from module/web/app/templates/default/dashboard/layout.html)0
-rw-r--r--pyload/web/app/templates/default/dashboard/package.html (renamed from module/web/app/templates/default/dashboard/package.html)0
-rw-r--r--pyload/web/app/templates/default/dashboard/select.html (renamed from module/web/app/templates/default/dashboard/select.html)0
-rwxr-xr-xpyload/web/app/templates/default/dialogs/addAccount.html (renamed from module/web/app/templates/default/dialogs/addAccount.html)0
-rwxr-xr-xpyload/web/app/templates/default/dialogs/addPluginConfig.html (renamed from module/web/app/templates/default/dialogs/addPluginConfig.html)0
-rw-r--r--pyload/web/app/templates/default/dialogs/confirmDelete.html (renamed from module/web/app/templates/default/dialogs/confirmDelete.html)0
-rwxr-xr-xpyload/web/app/templates/default/dialogs/interactionTask.html (renamed from module/web/app/templates/default/dialogs/interactionTask.html)0
-rwxr-xr-xpyload/web/app/templates/default/dialogs/linkgrabber.html (renamed from module/web/app/templates/default/dialogs/linkgrabber.html)0
-rwxr-xr-xpyload/web/app/templates/default/dialogs/modal.html (renamed from module/web/app/templates/default/dialogs/modal.html)0
-rw-r--r--pyload/web/app/templates/default/header/layout.html (renamed from module/web/app/templates/default/header/layout.html)0
-rw-r--r--pyload/web/app/templates/default/header/progress.html (renamed from module/web/app/templates/default/header/progress.html)0
-rw-r--r--pyload/web/app/templates/default/header/progressbar.html (renamed from module/web/app/templates/default/header/progressbar.html)0
-rw-r--r--pyload/web/app/templates/default/header/status.html (renamed from module/web/app/templates/default/header/status.html)0
-rw-r--r--pyload/web/app/templates/default/login.html (renamed from module/web/app/templates/default/login.html)0
-rw-r--r--pyload/web/app/templates/default/notification.html (renamed from module/web/app/templates/default/notification.html)0
-rw-r--r--pyload/web/app/templates/default/settings/actionbar.html (renamed from module/web/app/templates/default/settings/actionbar.html)0
-rw-r--r--pyload/web/app/templates/default/settings/config.html (renamed from module/web/app/templates/default/settings/config.html)0
-rw-r--r--pyload/web/app/templates/default/settings/configItem.html (renamed from module/web/app/templates/default/settings/configItem.html)0
-rw-r--r--pyload/web/app/templates/default/settings/layout.html (renamed from module/web/app/templates/default/settings/layout.html)0
-rw-r--r--pyload/web/app/templates/default/settings/menu.html (renamed from module/web/app/templates/default/settings/menu.html)0
-rw-r--r--pyload/web/app/templates/default/setup.html (renamed from module/web/app/templates/default/setup.html)0
-rw-r--r--pyload/web/app/unavailable.html (renamed from module/web/app/unavailable.html)0
-rw-r--r--pyload/web/bower.json (renamed from module/web/bower.json)0
-rw-r--r--pyload/web/cnl_app.py (renamed from module/web/cnl_app.py)2
-rw-r--r--pyload/web/middlewares.py (renamed from module/web/middlewares.py)0
-rw-r--r--pyload/web/package.json (renamed from module/web/package.json)0
-rw-r--r--pyload/web/pyload_app.py (renamed from module/web/pyload_app.py)0
-rw-r--r--pyload/web/servers.py (renamed from module/web/servers.py)0
-rw-r--r--pyload/web/setup_app.py (renamed from module/web/setup_app.py)0
-rw-r--r--pyload/web/utils.py (renamed from module/web/utils.py)0
-rw-r--r--pyload/web/webinterface.py (renamed from module/web/webinterface.py)6
592 files changed, 3069 insertions, 4251 deletions
diff --git a/.gitignore b/.gitignore
index a5b06fed6..2384b1ff3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,14 +47,15 @@ Downloads/*
container/*
Logs/*
docs/module/
+docs/pyload/
docs/_build
-module/plugins/container/DLC_*.py
+pyload/plugins/container/DLC_*.py
failed_links.txt
links.txt
ssl.crt
ssl.key
cert.pem
-module/web/pyload.db
+pyload/web/pyload.db
*.prefs
*.po
*.orig
diff --git a/docs/api/components.rst b/docs/api/components.rst
index 116cfa90b..08560b535 100644
--- a/docs/api/components.rst
+++ b/docs/api/components.rst
@@ -9,12 +9,12 @@ of the available components listed by topic can be found below.
.. autosummary::
:toctree: module
- module.api.CoreApi.CoreApi
- module.api.ConfigApi.ConfigApi
- module.api.DownloadPreparingApi.DownloadPreparingApi
- module.api.DownloadApi.DownloadApi
- module.api.FileApi.FileApi
- module.api.CollectorApi.CollectorApi
- module.api.AccountApi.AccountApi
- module.api.UserInteractionApi.UserInteractionApi
- module.api.AddonApi.AddonApi \ No newline at end of file
+ pyload.api.CoreApi.CoreApi
+ pyload.api.ConfigApi.ConfigApi
+ pyload.api.DownloadPreparingApi.DownloadPreparingApi
+ pyload.api.DownloadApi.DownloadApi
+ pyload.api.FileApi.FileApi
+ pyload.api.CollectorApi.CollectorApi
+ pyload.api.AccountApi.AccountApi
+ pyload.api.UserInteractionApi.UserInteractionApi
+ pyload.api.AddonApi.AddonApi \ No newline at end of file
diff --git a/docs/api/datatypes.rst b/docs/api/datatypes.rst
index 5516189f3..cc07a5f28 100644
--- a/docs/api/datatypes.rst
+++ b/docs/api/datatypes.rst
@@ -4,12 +4,12 @@
Datatype Definition
*******************
-Below you find a copy of :file:`module/remote/thriftbackend/pyload.thrift`, which is used to generate the data structs
+Below you find a copy of :file:`pyload/remote/thriftbackend/pyload.thrift`, which is used to generate the data structs
for various languages. It is also a good overview of avaible methods and return data.
.. code-block:: c
- .. [[[cog cog.out(open('module/remote/pyload.thrift', 'rb').read()) ]]]
+ .. [[[cog cog.out(open('pyload/remote/pyload.thrift', 'rb').read()) ]]]
namespace java org.pyload.thrift
typedef i32 FileID
diff --git a/docs/api/json_api.rst b/docs/api/json_api.rst
index 1f54e40aa..504de20bf 100644
--- a/docs/api/json_api.rst
+++ b/docs/api/json_api.rst
@@ -6,7 +6,7 @@ JSON API
JSON [1]_ is a lightweight object notation and wrappers exists for nearly every programming language. Every
modern browser is able to load JSON objects with JavaScript. Unlike other RPC methods you don't need to generate or precompile
-any stub methods. The JSON :class:`Api <module.Api.Api>` is ready to be used in most languages and most JSON libraries are lightweight
+any stub methods. The JSON :class:`Api <pyload.Api.Api>` is ready to be used in most languages and most JSON libraries are lightweight
enough to build very small and performant scripts. Because of the builtin support, JSON is the first choice for all browser
applications.
@@ -28,7 +28,7 @@ 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 thrift backend.
Access works simply via ``http://pyload-core/api/methodName``, where ``pyload-core`` is the ip address
@@ -43,7 +43,7 @@ Passing parameters
To pass arguments you have two choices:
Either use positional arguments, e.g.: ``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>` documentation.
+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
1 represents an integer in json format. On the other hand if the method is expecting strings, this would be correct:
diff --git a/docs/api/overview.rst b/docs/api/overview.rst
index 99e7075ca..3b65a45b0 100644
--- a/docs/api/overview.rst
+++ b/docs/api/overview.rst
@@ -12,10 +12,10 @@ From Wikipedia, the free encyclopedia [1]_:
.. rubric:: Motivation
-The idea of the centralized pyLoad :class:`Api <module.Api.Api>` is to give uniform access to all integral parts
+The idea of the centralized pyLoad :class:`Api <pyload.Api.Api>` is to give uniform access to all integral parts
and plugins in pyLoad as well as other clients written in arbitrary programming languages.
-Most of the :class:`Api <module.Api.Api>` functionality is exposed via HTTP or WebSocktes [2]_ as
-simple JSON objects [3]_. In conclusion the :class:`Api <module.Api.Api>` is accessible via many programming languages,
+Most of the :class:`Api <pyload.Api.Api>` functionality is exposed via HTTP or WebSocktes [2]_ as
+simple JSON objects [3]_. In conclusion the :class:`Api <pyload.Api.Api>` is accessible via many programming languages,
over network from remote machines and over browser with javascript.
diff --git a/docs/conf.py b/docs/conf.py
index 258dab745..8bd7c5f56 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,
@@ -129,12 +129,12 @@ 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", "static", "img", "default", "logo.png")
+html_logo = join(dir_name, "pyload", "web", "static", "img", "default", "logo.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
# pixels large.
-html_favicon = join(dir_name, "module", "web", "static", "img", "favicon.ico")
+html_favicon = join(dir_name, "pyload", "web", "static", "img", "favicon.ico")
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
diff --git a/docs/docs.conf b/docs/docs.conf
index e197cfa43..d41ad8bc6 100644
--- a/docs/docs.conf
+++ b/docs/docs.conf
@@ -3,12 +3,12 @@
[epydoc]
-modules: pyLoadCore.py, pyLoadCli.py, pyloadGui.py, module
+modules: pyLoadCore.py, pyLoadCli.py, pyloadGui.py, pyload
output: html
target: docs
docformat: restructuredtext
-exclude: module\.lib|module\.remote\.thriftbackend\.thriftgen|PyQt4|\.pyc|\.pyo|module\.plugins\.(accounts|captcha|container|crypter|hooks|hoster)
+exclude: pyload\.lib|pyload\.remote\.thriftbackend\.thriftgen|PyQt4|\.pyc|\.pyo|pyload\.plugins\.(accounts|captcha|container|crypter|hooks|hoster)
name: pyLoad Documentation
url: http://docs.pyload.org
diff --git a/docs/index.rst b/docs/index.rst
index 37fba3501..0b5885f0b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -37,7 +37,7 @@ Contents
module_overview.rst
-.. currentmodule:: module
+.. currentmodule:: pyload
.. rubric:: Footnotes
diff --git a/docs/module_overview.rst b/docs/module_overview.rst
index 56934e298..2876e465e 100644
--- a/docs/module_overview.rst
+++ b/docs/module_overview.rst
@@ -5,19 +5,19 @@ Module Overview
A little selection of most important modules in pyLoad.
.. autosummary::
- :toctree: module
+ :toctree: pyload
- module.Api.Api
- module.plugins.Base.Base
- module.plugins.Hoster.Hoster
- module.plugins.internal.SimpleHoster.SimpleHoster
- module.plugins.Crypter.Crypter
- module.plugins.internal.SimpleCrypter.SimpleCrypter
- module.plugins.Addon.Addon
- module.plugins.Account.Account
- module.plugins.MultiHoster.MultiHoster
- module.AddonManager.AddonManager
- module.interaction.EventManager.EventManager
- module.interaction.InteractionManager.InteractionManager
- module.interaction.InteractionTask.InteractionTask
- module.remote.ttypes
+ pyload.Api.Api
+ pyload.plugins.Base.Base
+ pyload.plugins.Hoster.Hoster
+ pyload.plugins.internal.SimpleHoster.SimpleHoster
+ pyload.plugins.Crypter.Crypter
+ pyload.plugins.internal.SimpleCrypter.SimpleCrypter
+ pyload.plugins.Addon.Addon
+ pyload.plugins.Account.Account
+ pyload.plugins.MultiHoster.MultiHoster
+ pyload.AddonManager.AddonManager
+ pyload.interaction.EventManager.EventManager
+ pyload.interaction.InteractionManager.InteractionManager
+ pyload.interaction.InteractionTask.InteractionTask
+ pyload.remote.ttypes
diff --git a/docs/plugins/addon_plugin.rst b/docs/plugins/addon_plugin.rst
index e18bd6b0f..bef5b115e 100644
--- a/docs/plugins/addon_plugin.rst
+++ b/docs/plugins/addon_plugin.rst
@@ -3,20 +3,20 @@
Addon - Add new functionality
=============================
-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 completely 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 completely 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 implemented as hooks.
Hook header
-----------
-Your hook needs to subclass :class:`Hook <module.plugins.Hook.Hook>` and will inherit all of its methods, so make sure to check it's documentation!
+Your hook needs to subclass :class:`Hook <pyload.plugins.Hook.Hook>` and will inherit all of its methods, so make sure to check it's 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"
@@ -43,16 +43,16 @@ Interacting on Events
The next step is to think about where your Hook action takes place.
-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 the relevant documentation to know how to access it's 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 the relevant documentation to know how to access it's great power and manipulate them.
What a basic excerpt would look like: ::
- from module.plugins.Hook import Hook
+ from pyload.plugins.Hook import Hook
class YourHook(Hook):
"""
@@ -70,12 +70,12 @@ in a thread, in order to not block the main thread. This should be used for all
Another and more flexible and powerful way is to use the 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 your own events and other people may listen on them.
+at :class:`HookManager <pyload.HookManager.HookManager>`. Keep in mind that you can define your own events and other people may listen on them.
For your convenience it's possible to register listeners automatically 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):
"""
@@ -96,7 +96,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 is a huge amount of events and hooks. So all future interactions will be exclusively
@@ -107,12 +107,12 @@ Providing
RPC services
----------------------
-You may have noticed that pyLoad has an :class:`Api <module.Api.Api>`, which can be used internal or called by clients via RPC.
+You may have 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):
"""
@@ -123,7 +123,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
@@ -133,11 +133,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):
"""
@@ -160,4 +160,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/plugins/base_plugin.rst b/docs/plugins/base_plugin.rst
index 3e1d5f952..5fa110fe7 100644
--- a/docs/plugins/base_plugin.rst
+++ b/docs/plugins/base_plugin.rst
@@ -3,8 +3,8 @@
Base Plugin - And here it begins...
===================================
-A Plugin in pyLoad is a python file located at one of the subfolders in :file:`module/plugins/`.
-All different plugin types inherit from :class:`Base <module.plugins.Base.Base>`, which defines basic methods
+A Plugin in pyLoad is a python file located at one of the subfolders in :file:`pyload/plugins/`.
+All different plugin types inherit from :class:`Base <pyload.plugins.Base.Base>`, which defines basic methods
and meta data. You should read this section carefully, because it's the base for all plugin development. It
is also a good idea to look at the class diagram [1]_ for all plugin types to get an overview.
At last you should look at several already existing plugin to get a more detailed idea of how
@@ -14,23 +14,23 @@ Meta Data
---------
All important data which must be known by pyLoad is set using class attributes pre- and suffixed with ``__``.
-An overview of acceptable values can be found in :class:`Base <module.plugins.Base.Base>` source code.
+An overview of acceptable values can be found in :class:`Base <pyload.plugins.Base.Base>` source code.
Unneeded attributes can be left out, except ``__version__``. Nevertheless please fill out most information
as you can, when you want to submit your plugin to the public repository.
-Additionally :class:`Crypter <module.plugins.Crypter.Crypter>` and :class:`Hoster <module.plugins.Hoster.Hoster>`
+Additionally :class:`Crypter <pyload.plugins.Crypter.Crypter>` and :class:`Hoster <pyload.plugins.Hoster.Hoster>`
needs to have a specific regexp [2]_ ``__pattern__``. This will be matched against input url's and if a suited
plugin is found it is selected to handle the url.
For localization pyLoad supports gettext [3]_, to mark strings for translation surround them with ``_("...")``.
-You don't need to subclass :class:`Base <module.plugins.Base.Base>` directly, but the
+You don't need to subclass :class:`Base <pyload.plugins.Base.Base>` directly, but the
intermediate type according to your plugin. As an example we choose a hoster plugin, but the same is true for all
plugin types.
How a basic hoster plugin header could look like::
- from module.plugin.Hoster import Hoster
+ from pyload.plugin.Hoster import Hoster
class MyFileHoster(Hoster):
__version__ = "0.1"
@@ -81,10 +81,10 @@ ip_check A hoster that checks ip, that can be avoided with reconnect
Basic Methods
-------------
-All methods can be looked up at :class:`Base <module.plugins.Base.Base>`. To note some important ones:
+All methods can be looked up at :class:`Base <pyload.plugins.Base.Base>`. To note some important ones:
The pyload core instance is accessible at ``self.core`` attribute
-and the :class:`Api <module.Api.Api>` at ``self.core.api``
+and the :class:`Api <pyload.Api.Api>` at ``self.core.api``
With ``self.load(...)`` you can load any url and get the result. This method is only available to Hoster and Crypter.
For other plugins use ``getURL(...)`` or ``getRequest()``.
diff --git a/docs/plugins/crypter_plugin.rst b/docs/plugins/crypter_plugin.rst
index 8c54dccb1..b10dd27f9 100644
--- a/docs/plugins/crypter_plugin.rst
+++ b/docs/plugins/crypter_plugin.rst
@@ -3,12 +3,12 @@
Crypter - Extract links from pages
==================================
-We are starting with the simplest plugin, the :class:`Crypter <module.plugins.Crypter.Crypter>`.
+We are starting with the simplest plugin, the :class:`Crypter <pyload.plugins.Crypter.Crypter>`.
It's job is to take an url as input and generate a new package or links, for example by filtering the urls or
loading a page and extracting links from the html code. You need to define the ``__pattern__`` to match
-target urls and subclass from :class:`Crypter <module.plugins.Crypter.Crypter>`. ::
+target urls and subclass from :class:`Crypter <pyload.plugins.Crypter.Crypter>`. ::
- from module.plugin.Crypter import Crypter
+ from pyload.plugin.Crypter import Crypter
class MyFileCrypter(Crypter):
__pattern__ = r"mycrypter.com/id/([0-9]+)"
@@ -28,7 +28,7 @@ Generating Packages
When finished with decrypting just return the urls as list and they will be added to the package. You can also
create new Packages if needed by instantiating a :class:`Package` instance, which will look like the following::
- from module.plugin.Crypter import Crypter, Package
+ from pyload.plugin.Crypter import Crypter, Package
class MyFileCrypter(Crypter):
@@ -52,12 +52,12 @@ your code you can use::
SimpleCrypter
-------------
-For simple crypter services there is the :class:`SimpleCrypter <module.plugins.internal.SimpleCrypter.SimpleCrypter>` class which handles most of the workflow. Only the regexp
+For simple crypter services there is the :class:`SimpleCrypter <pyload.plugins.internal.SimpleCrypter.SimpleCrypter>` class which handles most of the workflow. Only the regexp
pattern has to be defined.
Exmaple::
- from module.plugins.internal.SimpleCrypter import SimpleCrypter
+ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class MyFileCrypter(SimpleCrypter):
diff --git a/docs/plugins/hoster_plugin.rst b/docs/plugins/hoster_plugin.rst
index 9cd99a1f5..55a973463 100644
--- a/docs/plugins/hoster_plugin.rst
+++ b/docs/plugins/hoster_plugin.rst
@@ -7,7 +7,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):
"""
@@ -27,7 +27,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 a parameter to every pyfile.
+You need to know about the :class:`PyFile <pyload.PyFile.PyFile>` class, since an instance of it is given as a parameter to every pyfile.
Some tasks your plugin should handle: check if the file is online, get filename, wait if needed, download the file, etc..
Common Tasks
@@ -37,7 +37,7 @@ Some hosters require you to wait a specific time. Just set the time with ``self.
``self.setWait(seconds, True)`` if you want pyLoad to perform a reconnect if needed.
To handle captcha input just use ``self.decryptCaptcha(url, ...)``, it will be send to clients
-or handled by :class:`Addon <module.plugins.Addon.Addon>` plugins
+or handled by :class:`Addon <pyload.plugins.Addon.Addon>` plugins
Online status fetching
@@ -54,4 +54,4 @@ Testing
Examples
--------
-The best examples are the already existing plugins in :file:`module/plugins/`. \ No newline at end of file
+The best examples are the already existing plugins in :file:`pyload/plugins/`. \ No newline at end of file
diff --git a/module/remote/wsbackend/__init__.py b/module/remote/wsbackend/__init__.py
deleted file mode 100644
index de6d13128..000000000
--- a/module/remote/wsbackend/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-__author__ = 'christian'
- \ No newline at end of file
diff --git a/pavement.py b/pavement.py
index 4a7b5c0b0..3682281b3 100644
--- a/pavement.py
+++ b/pavement.py
@@ -26,9 +26,7 @@ path.fnmatch = new_fnmatch
import sys
import re
-from urllib import urlretrieve
from subprocess import call, Popen
-from zipfile import ZipFile
PROJECT_DIR = path(__file__).dirname()
sys.path.append(PROJECT_DIR)
@@ -59,7 +57,7 @@ setup(
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=['pycurl', 'jinja2 >= 2.6', 'Beaker >= 1.6'] + extradeps,
+ install_requires=['pycurl', 'Beaker >= 1.6'] + extradeps,
extras_require={
'SSL': ["pyOpenSSL"],
'DLC': ['pycrypto'],
@@ -70,12 +68,12 @@ setup(
#setup_requires=["setuptools_hg"],
test_suite='nose.collector',
tests_require=['nose', 'websocket-client >= 0.8.0', 'requests >= 1.2.2'],
-# scripts=['pyload', 'pyload-cli'],
- entry_points={
- 'console_scripts': [
- 'pyload = pyload:main',
- 'pyload-cli = pyload_cli:main' #TODO fix
- ]},
+ scripts=['pyload.py', 'pyload-cli.py'],
+ # entry_points={
+ # 'console_scripts': [
+ # 'pyload = pyload:main',
+ # 'pyload-cli = pyload_cli:main' #TODO fix
+ # ]},
zip_safe=False,
classifiers=[
"Development Status :: 5 - Production/Stable",
@@ -94,11 +92,6 @@ options(
builddir="_build",
sourcedir=""
),
- get_source=Bunch(
- src="https://bitbucket.org/spoob/pyload/get/tip.zip",
- rev=None,
- clean=False
- ),
apitypes=Bunch(
path="thrift",
),
@@ -116,7 +109,6 @@ options(
xargs = ["--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():
@@ -127,50 +119,7 @@ def 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 / ".hgignore").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', 'get_source', 'setuptools.command.sdist')
+@needs('clean', 'generate_setup', 'webapp', 'setuptools.command.sdist')
def sdist():
""" Build source code package with distutils """
diff --git a/pyload-cli.py b/pyload-cli.py
index 684958f1e..b91e7d215 100755
--- a/pyload-cli.py
+++ b/pyload-cli.py
@@ -1,590 +1,20 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+
+###############################################################################
+# Copyright(c) 2008-2013 pyLoad Team
+# http://www.pyload.org
#
-#Copyright (C) 2012 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/>.
+# This file is part of pyLoad.
+# pyLoad is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
#
-###
-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('pyLoadCli')
- 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.pauseServer()
-
- elif command == "unpause":
- self.client.unpauseServer()
-
- 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 "pyLoadCli Copyright (c) 2008-2012 the pyLoad Team"
- print
- print "Usage: [python] pyLoadCli.py [options] [command]"
- print
- print "<Commands>"
- print "See pyLoadCli.py -c for a complete listing."
- print
- print "<Options>"
- print " -i, --interactive", " Start in interactive mode"
- print
- print " -u, --username=", " " * 2, "Specify user name"
- print " --pw=<password>", " " * 2, "Password"
- print " -a, --address=", " " * 3, "Use address (current=%s)" % config["addr"]
- print " -p, --port", " " * 7, "Use 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 text"
- 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, ".pyloadcli"), "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, ".pyloadcli"))
-
- 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("pyLoadCli", 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("pyLoadCli", 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)
+# Subjected to the terms and conditions in LICENSE
+###############################################################################
+from pyload.cli.Cli import main
if __name__ == "__main__":
- main()
+ main() \ No newline at end of file
diff --git a/pyload.py b/pyload.py
index b1b76d6af..19d51ed38 100755
--- a/pyload.py
+++ b/pyload.py
@@ -1,607 +1,29 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-"""
- Copyright(c) 2008-2013 pyLoad Team
- http://www.pyload.org
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
+###############################################################################
+# Copyright(c) 2008-2013 pyLoad Team
+# http://www.pyload.org
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# Subjected to the terms and conditions in LICENSE
+#
+# @author: spoob
+# @author: sebnapi
+# @author: RaNaN
+# @author: mkaay
+# @version: v0.5.0
+###############################################################################
- Subjected to the terms and conditions in LICENSE
-
- @author: spoob
- @author: sebnapi
- @author: RaNaN
- @author: mkaay
- @version: v0.4.9
-"""
-CURRENT_VERSION = '0.4.9.9-dev'
-
-import __builtin__
-
-from getopt import getopt, GetoptError
-import logging
-import logging.handlers
import os
-from os import _exit, execl, getcwd, remove, walk, chdir, close
-import signal
import sys
-from sys import argv, executable, exit
-from time import time, sleep
-from traceback import print_exc
-
-import locale
-locale.locale_alias = locale.windows_locale = {} #save ~100kb ram, no known sideeffects for now
-
-import subprocess
-subprocess.__doc__ = None # the module with the largest doc we are using
-
-from module import InitHomeDir
-from module.AccountManager import AccountManager
-from module.config.ConfigParser import ConfigParser
-from module.config.ConfigManager import ConfigManager
-from module.PluginManager import PluginManager
-from module.interaction.EventManager import EventManager
-from module.network.RequestFactory import RequestFactory
-from module.web.ServerThread import WebServer
-from module.Scheduler import Scheduler
-from module.remote.RemoteManager import RemoteManager
-from module.utils.JsEngine import JsEngine
-
-import module.utils.pylgettext as gettext
-from module.utils import formatSize, get_console_encoding
-from module.utils.fs import free_space, exists, makedirs, join, chmod
-
-from codecs import getwriter
-
-# test runner overwrites sys.stdout
-if hasattr(sys.stdout, "encoding"): enc = get_console_encoding(sys.stdout.encoding)
-else: enc = "utf8"
-
-sys._stdout = sys.stdout
-sys.stdout = getwriter(enc)(sys.stdout, errors="replace")
-
-# TODO List
-# - configurable auth system ldap/mysql
-# - cron job like sheduler
-# - plugin stack / multi decrypter
-# - media plugin type
-# - general progress info
-# - content attribute for files / sync status
-# - sync with disk content / file manager / nested packages
-# - sync between pyload cores
-# - new attributes (date|sync status)
-# - embedded packages
-# - would require new/modified link collector concept
-# - pausable links/packages
-# - toggable accounts
-# - interaction manager
-# - improve external scripts
-# - make pyload undestructable to fail plugins -> see ConfigParser first
-
-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.pdb = None
- 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-2013 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 configuration directory"
- print " -p, --pidfile=<file>", " " * 3, "Set pidfile to <file>"
- print " --changedir", " " * 12, "Change configuration directory permanently"
- print " --daemon", " " * 15, "Daemonize after startup"
- print " --no-remote", " " * 12, "Disable remote access"
- print " --status", " " * 15, "Display pid if running or False"
- print " --clean", " " * 16, "Remove .pyc/.pyo files"
- print " -q, --quit", " " * 13, "Quit a running pyLoad instance"
- print " -h, --help", " " * 13, "Display this help screen"
- print ""
-
-
- 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()
- chmod(self.pidfile, 0660)
-
- 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, tests=False):
- """ starts the fun :D """
-
- self.version = CURRENT_VERSION
-
- # TODO: Re-enable when its working again
- # TODO: Don't forget it
- if False and not exists("pyload.conf") and not tests:
- from module.Setup import Setup
-
- print "This is your first start, running configuration assistant 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)
-
- # load again so translations are propagated
- self.config.loadDefault()
-
- self.debug = self.doDebug or self.config['general']['debug_mode']
- self.remote &= self.config['remote']['activated']
-
- pid = self.isAlreadyRunning()
- # don't exit when in test runner
- if pid and not tests:
- 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
-
- 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())
-
- if not tests:
- self.writePidFile()
+from os import _exit
- self.captcha = True # checks seems to fail, although tesseract is available
-
- self.eventManager = self.evm = EventManager(self)
- self.setupDB()
-
- # Upgrade to configManager
- self.config = ConfigManager(self, self.config)
-
- if self.deleteLinks:
- self.log.info(_("All links removed"))
- self.db.purgeLinks()
-
- self.requestFactory = RequestFactory(self)
- __builtin__.pyreq = self.requestFactory
-
- # deferred import, could improve start-up time
- from module.Api import Api
- from module.AddonManager import AddonManager
- from module.interaction.InteractionManager import InteractionManager
- from module.threads.ThreadManager import ThreadManager
-
- Api.initComponents()
- self.api = Api(self)
-
- self.scheduler = Scheduler(self)
-
- #hell yeah, so many important managers :D
- self.pluginManager = PluginManager(self)
- self.interactionManager = self.im = InteractionManager(self)
- self.accountManager = AccountManager(self)
- self.threadManager = ThreadManager(self)
- self.addonManager = AddonManager(self)
- self.remoteManager = RemoteManager(self)
-
- self.js = JsEngine()
-
- # enough initialization for test cases
- if tests: return
-
- self.log.info(_("Download time: %s") % self.api.isTimeDownload())
-
- if rpc:
- self.remoteManager.startBackends()
-
- if web:
- self.init_webserver()
-
- dl_folder = self.config["general"]["download_folder"]
-
- if not exists(dl_folder):
- makedirs(dl_folder)
-
- spaceLeft = free_space(dl_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.refreshAllAccounts()
-
- #restart failed
- if self.config["download"]["restart_failed"]:
- self.log.info(_("Restarting failed downloads..."))
- self.api.restartFailed()
-
- self.threadManager.pause = False
- self.running = True
-
- self.addonManager.activateAddons()
-
- self.log.info(_("pyLoad is up and running"))
- self.eventManager.dispatchEvent("core:ready")
-
- #test api
-# from module.common.APIExerciser import startApiExerciser
-# startApiExerciser(self, 3)
-
- #some memory stats
-# from guppy import hpy
-# hp=hpy()
-# print hp.heap()
-# import objgraph
-# objgraph.show_most_common_types(limit=30)
-# import memdebug
-# memdebug.start(8002)
-# from meliae import scanner
-# scanner.dump_all_objects(self.path('objs.json'))
-
- locals().clear()
-
- while True:
- sleep(1.5)
- 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 check exits codes, clean exit is still blocked
-
- self.threadManager.work()
- self.interactionManager.work()
- self.scheduler.work()
-
- def setupDB(self):
- from module.database import DatabaseBackend
- from module.FileManager import FileManager
-
- self.db = DatabaseBackend(self) # the backend
- self.db.setup()
-
- self.files = FileManager(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)
-
- # try to get a time formatting depending on system locale
- tfrm = None
- try: # change current locale to default if it is not set
- current_locale = locale.getlocale()
- if current_locale == (None, None):
- current_locale = locale.setlocale(locale.LC_ALL, '')
-
- # We use timeformat provided by locale when available
- if current_locale != (None, None):
- tfrm = locale.nl_langinfo(locale.D_FMT) + " " + locale.nl_langinfo(locale.T_FMT)
- except: # something did go wrong, locale is heavily platform dependant
- pass
-
- # default formatting when no one was obtained
- if not tfrm:
- tfrm = "%d.%m.%Y %H:%M:%S"
-
- frm = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", tfrm)
- console.setFormatter(frm)
- self.log = logging.getLogger("log") # setable in config
-
- if not exists(self.config['log']['log_folder']):
- makedirs(self.config['log']['log_folder'], 0700)
-
- 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 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..."))
- self.eventManager.dispatchEvent("coreShutdown")
- try:
- if self.config['webinterface']['activated'] and hasattr(self, "webserver"):
- pass # TODO: quit webserver?
-# self.webserver.quit()
-
- for thread in self.threadManager.threads:
- thread.put("quit")
-
- self.api.stopAllDownloads()
- self.addonManager.deactivateAddons()
-
- except:
- self.print_exc()
- self.log.info(_("error while shutting down"))
-
- finally:
- self.files.syncSave()
- self.db.shutdown()
- self.shuttedDown = True
-
- self.deletePidFile()
-
- def shell(self):
- """ stop and open an ipython shell inplace"""
- if self.debug:
- from IPython import embed
- sys.stdout = sys._stdout
- embed()
-
- def breakpoint(self):
- if self.debug:
- from IPython.core.debugger import Pdb
- sys.stdout = sys._stdout
- if not self.pdb: self.pdb = Pdb()
- self.pdb.set_trace()
-
- def print_exc(self):
- if self.debug:
- print_exc()
-
- def path(self, *args):
- return join(pypath, *args)
+from pyload.Core import Core
def deamon():
try:
@@ -612,7 +34,7 @@ def deamon():
print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
- # decouple from parent environment
+ # decouple from parent environment
os.setsid()
os.umask(0)
@@ -658,7 +80,6 @@ def main():
pyload_core.removeLogger()
_exit(1)
-# And so it begins...
+# And so it begins...
if __name__ == "__main__":
- main()
-
+ main() \ No newline at end of file
diff --git a/module/AccountManager.py b/pyload/AccountManager.py
index 5cdcfb57a..a476c75c1 100644
--- a/module/AccountManager.py
+++ b/pyload/AccountManager.py
@@ -19,7 +19,7 @@
from threading import Lock
from random import choice
-from module.utils import lock, json
+from pyload.utils import lock, json
class AccountManager:
"""manages all accounts"""
diff --git a/module/AddonManager.py b/pyload/AddonManager.py
index 9a8ad44ac..5637b1a8e 100644
--- a/module/AddonManager.py
+++ b/pyload/AddonManager.py
@@ -22,8 +22,8 @@ from threading import RLock
from types import MethodType
-from module.threads.AddonThread import AddonThread
-from module.PluginManager import literal_eval
+from pyload.threads.AddonThread import AddonThread
+from pyload.PluginManager import literal_eval
from utils import lock, to_string
class AddonManager:
diff --git a/module/Api.py b/pyload/Api.py
index bfeeff10c..32a077c08 100644
--- a/module/Api.py
+++ b/pyload/Api.py
@@ -87,7 +87,7 @@ class Api(Iface):
# but will only work once when they are imported
cls.EXTEND = True
# Import all Api modules, they register themselves.
- import module.api
+ import pyload.api
# they will vanish from the namespace afterwards
diff --git a/module/FileManager.py b/pyload/FileManager.py
index 7b14613f7..b1d3891e9 100644
--- a/module/FileManager.py
+++ b/pyload/FileManager.py
@@ -19,7 +19,7 @@
from time import time
from ReadWriteLock import ReadWriteLock
-from module.utils import lock, read_lock
+from pyload.utils import lock, read_lock
from Api import PackageStatus, DownloadStatus as DS, TreeCollection, PackageDoesNotExists
from datatypes.PyFile import PyFile
diff --git a/module/InitHomeDir.py b/pyload/InitHomeDir.py
index ccf525576..8fca42196 100644
--- a/module/InitHomeDir.py
+++ b/pyload/InitHomeDir.py
@@ -29,7 +29,7 @@ import __builtin__
__builtin__.owd = path.abspath("") #original working directory
__builtin__.pypath = path.abspath(path.join(__file__, "..", ".."))
-sys.path.append(join(pypath, "module", "lib"))
+sys.path.append(join(pypath, "pyload", "lib"))
homedir = ""
@@ -65,8 +65,8 @@ elif "nosetests" in args:
print "Running in test mode"
configdir = join(pypath, "tests", "config")
-elif path.exists(path.join(pypath, "module", "config", "configdir")):
- f = open(path.join(pypath, "module", "config", "configdir"), "rb")
+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)
diff --git a/module/PluginManager.py b/pyload/PluginManager.py
index bb1c76bf3..159e7d9de 100644
--- a/module/PluginManager.py
+++ b/pyload/PluginManager.py
@@ -23,8 +23,8 @@ from os.path import isfile, join, exists, abspath, basename
from sys import version_info
from time import time
-from module.lib.SafeEval import const_eval as literal_eval
-from module.plugins.Base import Base
+from pyload.lib.SafeEval import const_eval as literal_eval
+from pyload.plugins.Base import Base
from new_collections import namedtuple
@@ -39,7 +39,7 @@ IGNORE = (
PluginTuple = namedtuple("PluginTuple", "version re deps category user path")
class PluginManager:
- ROOT = "module.plugins."
+ ROOT = "pyload.plugins."
LOCALROOT = "localplugins."
TYPES = ("crypter", "hoster", "accounts", "addons", "internal")
@@ -98,7 +98,7 @@ class PluginManager:
f.close()
else:
- pfolder = join(pypath, "module", "plugins", folder)
+ 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(
@@ -329,8 +329,27 @@ class PluginManager:
if user and not self.plugins[type][name].user:
return self
+ # TODO: Remove when all plugin imports are adapted
+ if "module" in fullname:
+ return self
+
+
def load_module(self, name, replace=True):
if name not in sys.modules: #could be already in modules
+
+ # TODO: only temporary
+ if name.endswith("module"):
+ # name = "pyload."
+ name = name.replace(".module", "")
+ self.log.debug("Old import reference detected, use %s" % name)
+ replace = False
+ return __import__("pyload")
+ if name.startswith("module"):
+ name = name.replace("module", "pyload")
+ self.log.debug("Old import reference detected, use %s" % name)
+ replace = False
+
+
if replace:
if self.ROOT in name:
newname = name.replace(self.ROOT, self.LOCALROOT)
diff --git a/module/Scheduler.py b/pyload/Scheduler.py
index 0bc396b69..0bc396b69 100644
--- a/module/Scheduler.py
+++ b/pyload/Scheduler.py
diff --git a/module/Setup.py b/pyload/Setup.py
index eef7a88ca..2ecd6ebe6 100644
--- a/module/Setup.py
+++ b/pyload/Setup.py
@@ -16,7 +16,7 @@
# @author: RaNaN
###############################################################################
-import module.utils.pylgettext as gettext
+import pyload.utils.pylgettext as gettext
import os
import sys
import socket
@@ -26,9 +26,9 @@ from getpass import getpass
from time import time
from sys import exit
-from module.utils.fs import abspath, dirname, exists, join, makedirs
-from module.utils import get_console_encoding
-from module.web.ServerThread import WebServer
+from pyload.utils.fs import abspath, dirname, exists, join, makedirs
+from pyload.utils import get_console_encoding
+from pyload.web.ServerThread import WebServer
class Setup():
@@ -173,9 +173,9 @@ class Setup():
print _("Webinterface running for setup.")
# TODO start browser?
try:
- from module.web import ServerThread
+ from pyload.web import ServerThread
ServerThread.setup = self
- from module.web import webinterface
+ from pyload.web import webinterface
webinterface.run_simple()
self.web = True
return True
@@ -192,7 +192,7 @@ class Setup():
print ""
print _("The following logindata is valid for CLI, GUI and webinterface.")
- from module.database import DatabaseBackend
+ from pyload.database import DatabaseBackend
db = DatabaseBackend(None)
db.setup()
@@ -238,7 +238,7 @@ class Setup():
"Can be used by apache, lighttpd, requires you to configure them, which is not too easy job.")
print "lightweight:", _("Very fast alternative written in C, requires libev and linux knowledge.")
print "\t", _("Get it from here: https://github.com/jonashaag/bjoern, compile it")
- print "\t", _("and copy bjoern.so to module/lib")
+ print "\t", _("and copy bjoern.so to pyload/lib")
print
print _(
@@ -267,7 +267,7 @@ class Setup():
languages=[self.config["general"]["language"], "en"], fallback=True)
translation.install(True)
- from module.database import DatabaseBackend
+ from pyload.database import DatabaseBackend
db = DatabaseBackend(None)
db.setup()
@@ -325,7 +325,7 @@ class Setup():
path = join(pypath, path)
if not exists(path):
makedirs(path)
- f = open(join(pypath, "module", "config", "configdir"), "wb")
+ f = open(join(pypath, "pyload", "config", "configdir"), "wb")
f.write(path)
f.close()
print _("Configpath changed, setup will now close, please restart to go on.")
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/api/AccountApi.py b/pyload/api/AccountApi.py
index 981842b5c..999484974 100644
--- a/module/api/AccountApi.py
+++ b/pyload/api/AccountApi.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission
+from pyload.Api import Api, RequirePerm, Permission
from ApiComponent import ApiComponent
diff --git a/module/api/AddonApi.py b/pyload/api/AddonApi.py
index 917c7dc4c..4ae686d2d 100644
--- a/module/api/AddonApi.py
+++ b/pyload/api/AddonApi.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission
+from pyload.Api import Api, RequirePerm, Permission
from ApiComponent import ApiComponent
diff --git a/module/api/ApiComponent.py b/pyload/api/ApiComponent.py
index 3948086c2..bb333c259 100644
--- a/module/api/ApiComponent.py
+++ b/pyload/api/ApiComponent.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.remote.apitypes import Iface
+from pyload.remote.apitypes import Iface
# Workaround to let code-completion think, this is subclass of Iface
Iface = object
@@ -12,7 +12,7 @@ class ApiComponent(Iface):
def __init__(self, core, user):
# Only for auto completion, this class can not be instantiated
from pyload import Core
- from module.datatypes.User import User
+ from pyload.datatypes.User import User
assert isinstance(core, Core)
assert issubclass(ApiComponent, Iface)
self.core = core
diff --git a/module/api/CollectorApi.py b/pyload/api/CollectorApi.py
index eb36f7a21..49340285e 100644
--- a/module/api/CollectorApi.py
+++ b/pyload/api/CollectorApi.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission
+from pyload.Api import Api, RequirePerm, Permission
from ApiComponent import ApiComponent
diff --git a/module/api/ConfigApi.py b/pyload/api/ConfigApi.py
index 527f494ce..82cfdd418 100644
--- a/module/api/ConfigApi.py
+++ b/pyload/api/ConfigApi.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission, ConfigHolder, ConfigItem, ConfigInfo
-from module.utils import to_string
+from pyload.Api import Api, RequirePerm, Permission, ConfigHolder, ConfigItem, ConfigInfo
+from pyload.utils import to_string
from ApiComponent import ApiComponent
diff --git a/module/api/CoreApi.py b/pyload/api/CoreApi.py
index e5c5e8b41..ebb194134 100644
--- a/module/api/CoreApi.py
+++ b/pyload/api/CoreApi.py
@@ -1,9 +1,9 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission, ServerStatus, Interaction
-from module.utils.fs import join, free_space
-from module.utils import compare_time
+from pyload.Api import Api, RequirePerm, Permission, ServerStatus, Interaction
+from pyload.utils.fs import join, free_space
+from pyload.utils import compare_time
from ApiComponent import ApiComponent
diff --git a/module/api/DownloadApi.py b/pyload/api/DownloadApi.py
index ba49435b3..0a01007b5 100644
--- a/module/api/DownloadApi.py
+++ b/pyload/api/DownloadApi.py
@@ -3,8 +3,8 @@
from os.path import isabs
-from module.Api import Api, RequirePerm, Permission
-from module.utils.fs import join
+from pyload.Api import Api, RequirePerm, Permission
+from pyload.utils.fs import join
from ApiComponent import ApiComponent
diff --git a/module/api/DownloadPreparingApi.py b/pyload/api/DownloadPreparingApi.py
index edd5d362c..0a47fe5ab 100644
--- a/module/api/DownloadPreparingApi.py
+++ b/pyload/api/DownloadPreparingApi.py
@@ -3,10 +3,10 @@
from itertools import chain
-from module.Api import Api, RequirePerm, Permission, OnlineCheck, LinkStatus, urlmatcher
-from module.utils.fs import join
-from module.utils.packagetools import parseNames
-from module.network.RequestFactory import getURL
+from pyload.Api import Api, RequirePerm, Permission, OnlineCheck, LinkStatus, urlmatcher
+from pyload.utils.fs import join
+from pyload.utils.packagetools import parseNames
+from pyload.network.RequestFactory import getURL
from ApiComponent import ApiComponent
diff --git a/module/api/FileApi.py b/pyload/api/FileApi.py
index 8a55d9dfd..2ca409165 100644
--- a/module/api/FileApi.py
+++ b/pyload/api/FileApi.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission, DownloadState, PackageDoesNotExists, FileDoesNotExists
-from module.utils import uniqify
+from pyload.Api import Api, RequirePerm, Permission, DownloadState, PackageDoesNotExists, FileDoesNotExists
+from pyload.utils import uniqify
from ApiComponent import ApiComponent
diff --git a/module/api/UserInteractionApi.py b/pyload/api/UserInteractionApi.py
index b95b7c468..f5a9e9290 100644
--- a/module/api/UserInteractionApi.py
+++ b/pyload/api/UserInteractionApi.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.Api import Api, RequirePerm, Permission, Interaction
+from pyload.Api import Api, RequirePerm, Permission, Interaction
from ApiComponent import ApiComponent
diff --git a/module/api/__init__.py b/pyload/api/__init__.py
index 1348fd26f..1348fd26f 100644
--- a/module/api/__init__.py
+++ b/pyload/api/__init__.py
diff --git a/module/cli/AddPackage.py b/pyload/cli/AddPackage.py
index a73401586..a73401586 100644
--- a/module/cli/AddPackage.py
+++ b/pyload/cli/AddPackage.py
diff --git a/module/cli/Handler.py b/pyload/cli/Handler.py
index 476d09386..476d09386 100644
--- a/module/cli/Handler.py
+++ b/pyload/cli/Handler.py
diff --git a/module/cli/ManageFiles.py b/pyload/cli/ManageFiles.py
index c133d9959..2304af355 100644
--- a/module/cli/ManageFiles.py
+++ b/pyload/cli/ManageFiles.py
@@ -24,7 +24,7 @@ from time import time
from Handler import Handler
from printer import *
-from module.Api import Destination, PackageData
+from pyload.Api import Destination, PackageData
class ManageFiles(Handler):
""" possibility to manage queue/collector """
diff --git a/module/cli/__init__.py b/pyload/cli/__init__.py
index fa8a09291..fa8a09291 100644
--- a/module/cli/__init__.py
+++ b/pyload/cli/__init__.py
diff --git a/module/cli/printer.py b/pyload/cli/printer.py
index c62c1800e..c62c1800e 100644
--- a/module/cli/printer.py
+++ b/pyload/cli/printer.py
diff --git a/module/config/ConfigManager.py b/pyload/config/ConfigManager.py
index 3290ed4ec..f9dc3795b 100644
--- a/module/config/ConfigManager.py
+++ b/pyload/config/ConfigManager.py
@@ -3,8 +3,8 @@
from new_collections import OrderedDict
-from module.Api import InvalidConfigSection
-from module.utils import from_string, json
+from pyload.Api import InvalidConfigSection
+from pyload.utils import from_string, json
from ConfigParser import ConfigParser
diff --git a/module/config/ConfigParser.py b/pyload/config/ConfigParser.py
index bf9192270..fd22e93b9 100644
--- a/module/config/ConfigParser.py
+++ b/pyload/config/ConfigParser.py
@@ -6,8 +6,8 @@ from os.path import exists
from gettext import gettext
from new_collections import namedtuple, OrderedDict
-from module.utils import from_string
-from module.utils.fs import chmod
+from pyload.utils import from_string
+from pyload.utils.fs import chmod
from default import make_config
diff --git a/module/config/__init__.py b/pyload/config/__init__.py
index 4b31e848b..4b31e848b 100644
--- a/module/config/__init__.py
+++ b/pyload/config/__init__.py
diff --git a/module/config/default.py b/pyload/config/default.py
index 8a2044281..8a2044281 100644
--- a/module/config/default.py
+++ b/pyload/config/default.py
diff --git a/module/database/AccountDatabase.py b/pyload/database/AccountDatabase.py
index 518674951..eaa1a3203 100644
--- a/module/database/AccountDatabase.py
+++ b/pyload/database/AccountDatabase.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
-from module.database import queue, async
-from module.database import DatabaseBackend
+from pyload.database import queue, async
+from pyload.database import DatabaseBackend
class AccountMethods:
diff --git a/module/database/ConfigDatabase.py b/pyload/database/ConfigDatabase.py
index 554e07132..0c0dd72dd 100644
--- a/module/database/ConfigDatabase.py
+++ b/pyload/database/ConfigDatabase.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.database import DatabaseMethods, queue, async
+from pyload.database import DatabaseMethods, queue, async
class ConfigMethods(DatabaseMethods):
diff --git a/module/database/DatabaseBackend.py b/pyload/database/DatabaseBackend.py
index 54d1c54bb..99a406d9c 100644
--- a/module/database/DatabaseBackend.py
+++ b/pyload/database/DatabaseBackend.py
@@ -22,7 +22,7 @@ from shutil import move
from Queue import Queue
from traceback import print_exc
-from module.utils.fs import chmod, exists, remove
+from pyload.utils.fs import chmod, exists, remove
try:
from pysqlite2 import dbapi2 as sqlite3
diff --git a/module/database/FileDatabase.py b/pyload/database/FileDatabase.py
index 023dd1dc5..7b39cfa47 100644
--- a/module/database/FileDatabase.py
+++ b/pyload/database/FileDatabase.py
@@ -17,8 +17,8 @@
from new_collections import OrderedDict
-from module.Api import DownloadInfo, FileInfo, PackageInfo, PackageStats, DownloadState as DS, state_string
-from module.database import DatabaseMethods, queue, async, inner
+from pyload.Api import DownloadInfo, FileInfo, PackageInfo, PackageStats, DownloadState as DS, state_string
+from pyload.database import DatabaseMethods, queue, async, inner
zero_stats = PackageStats(0, 0, 0, 0)
diff --git a/module/database/StatisticDatabase.py b/pyload/database/StatisticDatabase.py
index 10619eb5b..d5f9658f2 100644
--- a/module/database/StatisticDatabase.py
+++ b/pyload/database/StatisticDatabase.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-from module.database import DatabaseMethods, queue, async, inner
+from pyload.database import DatabaseMethods, queue, async, inner
# TODO
diff --git a/module/database/StorageDatabase.py b/pyload/database/StorageDatabase.py
index ffaf51763..2d4c8a9c7 100644
--- a/module/database/StorageDatabase.py
+++ b/pyload/database/StorageDatabase.py
@@ -16,7 +16,7 @@
@author: mkaay
"""
-from module.database import DatabaseBackend, queue
+from pyload.database import DatabaseBackend, queue
class StorageMethods():
@queue
diff --git a/module/database/UserDatabase.py b/pyload/database/UserDatabase.py
index 0df94e0eb..3dd06c912 100644
--- a/module/database/UserDatabase.py
+++ b/pyload/database/UserDatabase.py
@@ -21,7 +21,7 @@ from random import choice
alphnum = letters+digits
-from module.Api import UserData
+from pyload.Api import UserData
from DatabaseBackend import DatabaseMethods, queue, async
diff --git a/module/database/__init__.py b/pyload/database/__init__.py
index d3f97fb53..d3f97fb53 100644
--- a/module/database/__init__.py
+++ b/pyload/database/__init__.py
diff --git a/module/datatypes/PyFile.py b/pyload/datatypes/PyFile.py
index 5f2be8769..ba5208795 100644
--- a/module/datatypes/PyFile.py
+++ b/pyload/datatypes/PyFile.py
@@ -19,8 +19,8 @@
from time import sleep, time
from ReadWriteLock import ReadWriteLock
-from module.Api import ProgressInfo, DownloadProgress, FileInfo, DownloadInfo, DownloadStatus
-from module.utils import lock, read_lock
+from pyload.Api import ProgressInfo, DownloadProgress, FileInfo, DownloadInfo, DownloadStatus
+from pyload.utils import lock, read_lock
statusMap = {
"none": 0,
diff --git a/module/datatypes/PyPackage.py b/pyload/datatypes/PyPackage.py
index 6ba37ee12..d23ae88e7 100644
--- a/module/datatypes/PyPackage.py
+++ b/pyload/datatypes/PyPackage.py
@@ -18,8 +18,8 @@
from time import time
-from module.Api import PackageInfo, PackageStatus
-from module.utils.fs import join
+from pyload.Api import PackageInfo, PackageStatus
+from pyload.utils.fs import join
class PyPackage:
"""
diff --git a/module/datatypes/User.py b/pyload/datatypes/User.py
index 141191df4..31c9a55cc 100644
--- a/module/datatypes/User.py
+++ b/pyload/datatypes/User.py
@@ -17,8 +17,8 @@
###############################################################################
-from module.Api import UserData, Permission, Role
-from module.utils import bits_set
+from pyload.Api import UserData, Permission, Role
+from pyload.utils import bits_set
#TODO: activate user
#noinspection PyUnresolvedReferences
diff --git a/module/datatypes/__init__.py b/pyload/datatypes/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/datatypes/__init__.py
+++ b/pyload/datatypes/__init__.py
diff --git a/module/interaction/EventManager.py b/pyload/interaction/EventManager.py
index 7d37ca6b9..7d37ca6b9 100644
--- a/module/interaction/EventManager.py
+++ b/pyload/interaction/EventManager.py
diff --git a/module/interaction/InteractionManager.py b/pyload/interaction/InteractionManager.py
index e4ae05501..9c5449b31 100644
--- a/module/interaction/InteractionManager.py
+++ b/pyload/interaction/InteractionManager.py
@@ -21,9 +21,9 @@ from base64 import standard_b64encode
from new_collections import OrderedDict
-from module.utils import lock, bits_set
-from module.Api import Interaction as IA
-from module.Api import InputType, Input
+from pyload.utils import lock, bits_set
+from pyload.Api import Interaction as IA
+from pyload.Api import InputType, Input
from InteractionTask import InteractionTask
diff --git a/module/interaction/InteractionTask.py b/pyload/interaction/InteractionTask.py
index d2877b2b0..b404aa6ce 100644
--- a/module/interaction/InteractionTask.py
+++ b/pyload/interaction/InteractionTask.py
@@ -18,8 +18,8 @@
from time import time
-from module.Api import InteractionTask as BaseInteractionTask
-from module.Api import Interaction, InputType, Input
+from pyload.Api import InteractionTask as BaseInteractionTask
+from pyload.Api import Interaction, InputType, Input
#noinspection PyUnresolvedReferences
class InteractionTask(BaseInteractionTask):
diff --git a/module/interaction/__init__.py b/pyload/interaction/__init__.py
index de6d13128..de6d13128 100644
--- a/module/interaction/__init__.py
+++ b/pyload/interaction/__init__.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/ReadWriteLock.py b/pyload/lib/ReadWriteLock.py
index cc82f3d48..cc82f3d48 100644
--- a/module/lib/ReadWriteLock.py
+++ b/pyload/lib/ReadWriteLock.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 792d60054..792d60054 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 4a96537ff..4a96537ff 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 515e97af6..515e97af6 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 f0ad34963..f0ad34963 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 3e26b0c13..3e26b0c13 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 4062d513e..4062d513e 100644
--- a/module/lib/beaker/crypto/jcecrypto.py
+++ b/pyload/lib/beaker/crypto/jcecrypto.py
diff --git a/module/lib/beaker/crypto/pbkdf2.py b/pyload/lib/beaker/crypto/pbkdf2.py
index 96dc5fbb2..96dc5fbb2 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 a3eb4d9db..a3eb4d9db 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 d97e8ce6f..d97e8ce6f 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 cc0eed286..cc0eed286 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 701e6f7d2..701e6f7d2 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 dd8380d7f..dd8380d7f 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 96516953f..96516953f 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 8c79633c1..8c79633c1 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 7ba88b37d..7ba88b37d 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 7d465530b..7d465530b 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 761303707..761303707 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 04c9617c5..04c9617c5 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 b00bda1c9..b00bda1c9 100644
--- a/module/lib/bottle.py
+++ b/pyload/lib/bottle.py
diff --git a/module/lib/forwarder.py b/pyload/lib/forwarder.py
index eacb33c2b..eacb33c2b 100644
--- a/module/lib/forwarder.py
+++ b/pyload/lib/forwarder.py
diff --git a/module/lib/hg_tool.py b/pyload/lib/hg_tool.py
index cd97833df..cd97833df 100644
--- a/module/lib/hg_tool.py
+++ b/pyload/lib/hg_tool.py
diff --git a/module/lib/mod_pywebsocket/COPYING b/pyload/lib/mod_pywebsocket/COPYING
index 989d02e4c..989d02e4c 100644
--- a/module/lib/mod_pywebsocket/COPYING
+++ b/pyload/lib/mod_pywebsocket/COPYING
diff --git a/module/lib/mod_pywebsocket/__init__.py b/pyload/lib/mod_pywebsocket/__init__.py
index 454ae0c45..454ae0c45 100644
--- a/module/lib/mod_pywebsocket/__init__.py
+++ b/pyload/lib/mod_pywebsocket/__init__.py
diff --git a/module/lib/mod_pywebsocket/_stream_base.py b/pyload/lib/mod_pywebsocket/_stream_base.py
index 60fb33d2c..60fb33d2c 100644
--- a/module/lib/mod_pywebsocket/_stream_base.py
+++ b/pyload/lib/mod_pywebsocket/_stream_base.py
diff --git a/module/lib/mod_pywebsocket/_stream_hixie75.py b/pyload/lib/mod_pywebsocket/_stream_hixie75.py
index 94cf5b31b..94cf5b31b 100644
--- a/module/lib/mod_pywebsocket/_stream_hixie75.py
+++ b/pyload/lib/mod_pywebsocket/_stream_hixie75.py
diff --git a/module/lib/mod_pywebsocket/_stream_hybi.py b/pyload/lib/mod_pywebsocket/_stream_hybi.py
index bd158fa6b..bd158fa6b 100644
--- a/module/lib/mod_pywebsocket/_stream_hybi.py
+++ b/pyload/lib/mod_pywebsocket/_stream_hybi.py
diff --git a/module/lib/mod_pywebsocket/common.py b/pyload/lib/mod_pywebsocket/common.py
index 2388379c0..2388379c0 100644
--- a/module/lib/mod_pywebsocket/common.py
+++ b/pyload/lib/mod_pywebsocket/common.py
diff --git a/module/lib/mod_pywebsocket/dispatch.py b/pyload/lib/mod_pywebsocket/dispatch.py
index 25905f180..25905f180 100644
--- a/module/lib/mod_pywebsocket/dispatch.py
+++ b/pyload/lib/mod_pywebsocket/dispatch.py
diff --git a/module/lib/mod_pywebsocket/extensions.py b/pyload/lib/mod_pywebsocket/extensions.py
index 03dbf9ee1..03dbf9ee1 100644
--- a/module/lib/mod_pywebsocket/extensions.py
+++ b/pyload/lib/mod_pywebsocket/extensions.py
diff --git a/module/lib/mod_pywebsocket/handshake/__init__.py b/pyload/lib/mod_pywebsocket/handshake/__init__.py
index 194f6b395..194f6b395 100644
--- a/module/lib/mod_pywebsocket/handshake/__init__.py
+++ b/pyload/lib/mod_pywebsocket/handshake/__init__.py
diff --git a/module/lib/mod_pywebsocket/handshake/_base.py b/pyload/lib/mod_pywebsocket/handshake/_base.py
index e5c94ca90..e5c94ca90 100644
--- a/module/lib/mod_pywebsocket/handshake/_base.py
+++ b/pyload/lib/mod_pywebsocket/handshake/_base.py
diff --git a/module/lib/mod_pywebsocket/handshake/hybi.py b/pyload/lib/mod_pywebsocket/handshake/hybi.py
index fc0e2a096..fc0e2a096 100644
--- a/module/lib/mod_pywebsocket/handshake/hybi.py
+++ b/pyload/lib/mod_pywebsocket/handshake/hybi.py
diff --git a/module/lib/mod_pywebsocket/handshake/hybi00.py b/pyload/lib/mod_pywebsocket/handshake/hybi00.py
index cc6f8dc43..cc6f8dc43 100644
--- a/module/lib/mod_pywebsocket/handshake/hybi00.py
+++ b/pyload/lib/mod_pywebsocket/handshake/hybi00.py
diff --git a/module/lib/mod_pywebsocket/headerparserhandler.py b/pyload/lib/mod_pywebsocket/headerparserhandler.py
index 2cc62de04..2cc62de04 100644
--- a/module/lib/mod_pywebsocket/headerparserhandler.py
+++ b/pyload/lib/mod_pywebsocket/headerparserhandler.py
diff --git a/module/lib/mod_pywebsocket/http_header_util.py b/pyload/lib/mod_pywebsocket/http_header_util.py
index b77465393..b77465393 100644
--- a/module/lib/mod_pywebsocket/http_header_util.py
+++ b/pyload/lib/mod_pywebsocket/http_header_util.py
diff --git a/module/lib/mod_pywebsocket/memorizingfile.py b/pyload/lib/mod_pywebsocket/memorizingfile.py
index 4d4cd9585..4d4cd9585 100644
--- a/module/lib/mod_pywebsocket/memorizingfile.py
+++ b/pyload/lib/mod_pywebsocket/memorizingfile.py
diff --git a/module/lib/mod_pywebsocket/msgutil.py b/pyload/lib/mod_pywebsocket/msgutil.py
index 4c1a0114b..4c1a0114b 100644
--- a/module/lib/mod_pywebsocket/msgutil.py
+++ b/pyload/lib/mod_pywebsocket/msgutil.py
diff --git a/module/lib/mod_pywebsocket/mux.py b/pyload/lib/mod_pywebsocket/mux.py
index f0bdd2461..f0bdd2461 100644
--- a/module/lib/mod_pywebsocket/mux.py
+++ b/pyload/lib/mod_pywebsocket/mux.py
diff --git a/module/lib/mod_pywebsocket/standalone.py b/pyload/lib/mod_pywebsocket/standalone.py
index 07a33d9c9..07a33d9c9 100755
--- a/module/lib/mod_pywebsocket/standalone.py
+++ b/pyload/lib/mod_pywebsocket/standalone.py
diff --git a/module/lib/mod_pywebsocket/stream.py b/pyload/lib/mod_pywebsocket/stream.py
index edc533279..edc533279 100644
--- a/module/lib/mod_pywebsocket/stream.py
+++ b/pyload/lib/mod_pywebsocket/stream.py
diff --git a/module/lib/mod_pywebsocket/util.py b/pyload/lib/mod_pywebsocket/util.py
index 7bb0b5d9e..7bb0b5d9e 100644
--- a/module/lib/mod_pywebsocket/util.py
+++ b/pyload/lib/mod_pywebsocket/util.py
diff --git a/module/lib/new_collections.py b/pyload/lib/new_collections.py
index 12d05b4b9..12d05b4b9 100644
--- a/module/lib/new_collections.py
+++ b/pyload/lib/new_collections.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 ef5c0db48..ef5c0db48 100644
--- a/module/lib/simplejson/__init__.py
+++ b/pyload/lib/simplejson/__init__.py
diff --git a/module/lib/simplejson/decoder.py b/pyload/lib/simplejson/decoder.py
index e5496d6e7..e5496d6e7 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 5ec7440f1..5ec7440f1 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 54593a371..54593a371 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 73370db55..73370db55 100644
--- a/module/lib/simplejson/tool.py
+++ b/pyload/lib/simplejson/tool.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 c380e18b0..c380e18b0 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 25cbf669b..25cbf669b 100644
--- a/module/network/Browser.py
+++ b/pyload/network/Browser.py
diff --git a/module/network/Bucket.py b/pyload/network/Bucket.py
index db67faa4a..db67faa4a 100644
--- a/module/network/Bucket.py
+++ b/pyload/network/Bucket.py
diff --git a/module/network/CookieJar.py b/pyload/network/CookieJar.py
index ea2c43a9e..ea2c43a9e 100644
--- a/module/network/CookieJar.py
+++ b/pyload/network/CookieJar.py
diff --git a/module/network/HTTPChunk.py b/pyload/network/HTTPChunk.py
index 84a2acc5f..4389aef28 100644
--- a/module/network/HTTPChunk.py
+++ b/pyload/network/HTTPChunk.py
@@ -24,8 +24,8 @@ from re import search
import codecs
import pycurl
-from module.utils import remove_chars
-from module.utils.fs import fs_encode
+from pyload.utils import remove_chars
+from pyload.utils.fs import fs_encode
from HTTPRequest import HTTPRequest
diff --git a/module/network/HTTPDownload.py b/pyload/network/HTTPDownload.py
index 498cd5979..04bf2363a 100644
--- a/module/network/HTTPDownload.py
+++ b/pyload/network/HTTPDownload.py
@@ -28,8 +28,8 @@ import pycurl
from HTTPChunk import ChunkInfo, HTTPChunk
from HTTPRequest import BadHeader
-from module.plugins.Base import Abort
-from module.utils.fs import save_join, fs_encode
+from pyload.plugins.Base import Abort
+from pyload.utils.fs import save_join, fs_encode
# TODO: save content-disposition for resuming
diff --git a/module/network/HTTPRequest.py b/pyload/network/HTTPRequest.py
index 874da368b..ebf2c3132 100644
--- a/module/network/HTTPRequest.py
+++ b/pyload/network/HTTPRequest.py
@@ -25,7 +25,7 @@ from httplib import responses
from logging import getLogger
from cStringIO import StringIO
-from module.plugins.Base import Abort
+from pyload.plugins.Base import Abort
def myquote(url):
return quote(url.encode('utf8') if isinstance(url, unicode) else url, safe="%/:=&?~#+!$,;'@()*[]")
diff --git a/module/network/RequestFactory.py b/pyload/network/RequestFactory.py
index 1581be9fc..1581be9fc 100644
--- a/module/network/RequestFactory.py
+++ b/pyload/network/RequestFactory.py
diff --git a/module/network/XDCCRequest.py b/pyload/network/XDCCRequest.py
index 7a1a98cb5..89c4f3b73 100644
--- a/module/network/XDCCRequest.py
+++ b/pyload/network/XDCCRequest.py
@@ -28,7 +28,7 @@ from time import time
import struct
from select import select
-from module.plugins.Plugin import Abort
+from pyload.plugins.Plugin import Abort
class XDCCRequest():
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/module/plugins/Account.py b/pyload/plugins/Account.py
index 3ba819a6f..2a85e2b44 100644
--- a/module/plugins/Account.py
+++ b/pyload/plugins/Account.py
@@ -4,9 +4,9 @@ from time import time
from traceback import print_exc
from threading import RLock
-from module.utils import compare_time, format_size, parseFileSize, lock, from_string
-from module.Api import AccountInfo
-from module.network.CookieJar import CookieJar
+from pyload.utils import compare_time, format_size, parseFileSize, lock, from_string
+from pyload.Api import AccountInfo
+from pyload.network.CookieJar import CookieJar
from Base import Base
diff --git a/module/plugins/Addon.py b/pyload/plugins/Addon.py
index ff9c57bef..ff9c57bef 100644
--- a/module/plugins/Addon.py
+++ b/pyload/plugins/Addon.py
diff --git a/module/plugins/Base.py b/pyload/plugins/Base.py
index 7825e1c49..47369e21f 100644
--- a/module/plugins/Base.py
+++ b/pyload/plugins/Base.py
@@ -21,8 +21,8 @@ import sys
from time import time, sleep
from random import randint
-from module.utils import decode
-from module.utils.fs import exists, makedirs, join, remove
+from pyload.utils import decode
+from pyload.utils.fs import exists, makedirs, join, remove
# TODO
# more attributes if needed
diff --git a/module/plugins/Crypter.py b/pyload/plugins/Crypter.py
index c665888ad..b881510ea 100644
--- a/module/plugins/Crypter.py
+++ b/pyload/plugins/Crypter.py
@@ -2,9 +2,9 @@
from traceback import print_exc
-from module.utils import to_list, has_method, uniqify
-from module.utils.fs import exists, remove, fs_encode
-from module.utils.packagetools import parseNames
+from pyload.utils import to_list, has_method, uniqify
+from pyload.utils.fs import exists, remove, fs_encode
+from pyload.utils.packagetools import parseNames
from Base import Base, Retry
diff --git a/module/plugins/Hoster.py b/pyload/plugins/Hoster.py
index 651471a93..bc82aac09 100644
--- a/module/plugins/Hoster.py
+++ b/pyload/plugins/Hoster.py
@@ -21,13 +21,13 @@ import os
from time import time
if os.name != "nt":
- from module.utils.fs import chown
+ from pyload.utils.fs import chown
from pwd import getpwnam
from grp import getgrnam
from Base import Base, Fail, Retry
-from module.utils import chunks as _chunks
-from module.utils.fs import save_join, save_filename, fs_encode, fs_decode,\
+from pyload.utils import chunks as _chunks
+from pyload.utils.fs import save_join, save_filename, fs_encode, fs_decode,\
remove, makedirs, chmod, stat, exists, join
# Import for Hoster Plugins
diff --git a/module/plugins/MultiHoster.py b/pyload/plugins/MultiHoster.py
index 1936478b4..8825cc2f8 100644
--- a/module/plugins/MultiHoster.py
+++ b/pyload/plugins/MultiHoster.py
@@ -2,7 +2,7 @@
from time import time
-from module.utils import remove_chars
+from pyload.utils import remove_chars
from Account import Account
diff --git a/module/plugins/ReCaptcha.py b/pyload/plugins/ReCaptcha.py
index e47522b4a..e47522b4a 100644
--- a/module/plugins/ReCaptcha.py
+++ b/pyload/plugins/ReCaptcha.py
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/module/plugins/accounts/AlldebridCom.py b/pyload/plugins/accounts/AlldebridCom.py
index beaddeac9..baaa9d264 100644
--- a/module/plugins/accounts/AlldebridCom.py
+++ b/pyload/plugins/accounts/AlldebridCom.py
@@ -1,46 +1,46 @@
-from module.plugins.Account import Account
-import xml.dom.minidom as dom
-from BeautifulSoup import BeautifulSoup
-from time import time
-import re
+from module.plugins.Account import Account
+import xml.dom.minidom as dom
+from BeautifulSoup import BeautifulSoup
+from time import time
+import re
import urllib
-
-class AlldebridCom(Account):
- __name__ = "AlldebridCom"
- __version__ = "0.21"
- __type__ = "account"
- __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.log.debug("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.log.debug(page)
- xml = dom.parseString(page)
- exp_time=time()+int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue)*86400
- account_info = {"validuntil": exp_time, "trafficleft": -1}
- return account_info
-
- def login(self, user, data, req):
+
+class AlldebridCom(Account):
+ __name__ = "AlldebridCom"
+ __version__ = "0.21"
+ __type__ = "account"
+ __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.log.debug("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.log.debug(page)
+ xml = dom.parseString(page)
+ exp_time=time()+int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue)*86400
+ account_info = {"validuntil": exp_time, "trafficleft": -1}
+ return account_info
+
+ def login(self, user, data, req):
urlparams = urllib.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 "This login doesn't exist" in page:
+ self.wrongPassword()
if "The password is not valid" in page:
self.wrongPassword()
diff --git a/module/plugins/accounts/BayfilesCom.py b/pyload/plugins/accounts/BayfilesCom.py
index 0d036488b..0d036488b 100644
--- a/module/plugins/accounts/BayfilesCom.py
+++ b/pyload/plugins/accounts/BayfilesCom.py
diff --git a/module/plugins/accounts/BitshareCom.py b/pyload/plugins/accounts/BitshareCom.py
index a4f56e31c..a4f56e31c 100644
--- a/module/plugins/accounts/BitshareCom.py
+++ b/pyload/plugins/accounts/BitshareCom.py
diff --git a/module/plugins/accounts/BoltsharingCom.py b/pyload/plugins/accounts/BoltsharingCom.py
index 678591d1d..678591d1d 100644
--- a/module/plugins/accounts/BoltsharingCom.py
+++ b/pyload/plugins/accounts/BoltsharingCom.py
diff --git a/module/plugins/accounts/CramitIn.py b/pyload/plugins/accounts/CramitIn.py
index 182c9d647..182c9d647 100644
--- a/module/plugins/accounts/CramitIn.py
+++ b/pyload/plugins/accounts/CramitIn.py
diff --git a/module/plugins/accounts/CyberlockerCh.py b/pyload/plugins/accounts/CyberlockerCh.py
index 31e0c3e24..31e0c3e24 100644
--- a/module/plugins/accounts/CyberlockerCh.py
+++ b/pyload/plugins/accounts/CyberlockerCh.py
diff --git a/module/plugins/accounts/CzshareCom.py b/pyload/plugins/accounts/CzshareCom.py
index 7b1a8edc5..7b1a8edc5 100644
--- a/module/plugins/accounts/CzshareCom.py
+++ b/pyload/plugins/accounts/CzshareCom.py
diff --git a/module/plugins/accounts/DdlstorageCom.py b/pyload/plugins/accounts/DdlstorageCom.py
index 01d165f23..01d165f23 100644
--- a/module/plugins/accounts/DdlstorageCom.py
+++ b/pyload/plugins/accounts/DdlstorageCom.py
diff --git a/module/plugins/accounts/DebridItaliaCom.py b/pyload/plugins/accounts/DebridItaliaCom.py
index 91dd3787f..91dd3787f 100644
--- a/module/plugins/accounts/DebridItaliaCom.py
+++ b/pyload/plugins/accounts/DebridItaliaCom.py
diff --git a/module/plugins/accounts/DepositfilesCom.py b/pyload/plugins/accounts/DepositfilesCom.py
index b0730de8e..b0730de8e 100644
--- a/module/plugins/accounts/DepositfilesCom.py
+++ b/pyload/plugins/accounts/DepositfilesCom.py
diff --git a/module/plugins/accounts/EasybytezCom.py b/pyload/plugins/accounts/EasybytezCom.py
index ba7829b83..ba7829b83 100644
--- a/module/plugins/accounts/EasybytezCom.py
+++ b/pyload/plugins/accounts/EasybytezCom.py
diff --git a/module/plugins/accounts/EgoFilesCom.py b/pyload/plugins/accounts/EgoFilesCom.py
index da1ed03ad..da1ed03ad 100644
--- a/module/plugins/accounts/EgoFilesCom.py
+++ b/pyload/plugins/accounts/EgoFilesCom.py
diff --git a/module/plugins/accounts/EuroshareEu.py b/pyload/plugins/accounts/EuroshareEu.py
index 42967d975..42967d975 100644
--- a/module/plugins/accounts/EuroshareEu.py
+++ b/pyload/plugins/accounts/EuroshareEu.py
diff --git a/module/plugins/accounts/FastshareCz.py b/pyload/plugins/accounts/FastshareCz.py
index 69bbb0827..69bbb0827 100644
--- a/module/plugins/accounts/FastshareCz.py
+++ b/pyload/plugins/accounts/FastshareCz.py
diff --git a/module/plugins/accounts/FilebeerInfo.py b/pyload/plugins/accounts/FilebeerInfo.py
index 40ab70519..40ab70519 100644
--- a/module/plugins/accounts/FilebeerInfo.py
+++ b/pyload/plugins/accounts/FilebeerInfo.py
diff --git a/module/plugins/accounts/FilecloudIo.py b/pyload/plugins/accounts/FilecloudIo.py
index cf9f92209..cf9f92209 100644
--- a/module/plugins/accounts/FilecloudIo.py
+++ b/pyload/plugins/accounts/FilecloudIo.py
diff --git a/module/plugins/accounts/FilefactoryCom.py b/pyload/plugins/accounts/FilefactoryCom.py
index 8e163e2f6..8e163e2f6 100644
--- a/module/plugins/accounts/FilefactoryCom.py
+++ b/pyload/plugins/accounts/FilefactoryCom.py
diff --git a/module/plugins/accounts/FilejungleCom.py b/pyload/plugins/accounts/FilejungleCom.py
index 8ac25c201..8ac25c201 100644
--- a/module/plugins/accounts/FilejungleCom.py
+++ b/pyload/plugins/accounts/FilejungleCom.py
diff --git a/module/plugins/accounts/FilerioCom.py b/pyload/plugins/accounts/FilerioCom.py
index feacacaf5..feacacaf5 100644
--- a/module/plugins/accounts/FilerioCom.py
+++ b/pyload/plugins/accounts/FilerioCom.py
diff --git a/module/plugins/accounts/FilesMailRu.py b/pyload/plugins/accounts/FilesMailRu.py
index 98fe13248..98fe13248 100644
--- a/module/plugins/accounts/FilesMailRu.py
+++ b/pyload/plugins/accounts/FilesMailRu.py
diff --git a/module/plugins/accounts/FileserveCom.py b/pyload/plugins/accounts/FileserveCom.py
index 5e5068f22..5e5068f22 100644
--- a/module/plugins/accounts/FileserveCom.py
+++ b/pyload/plugins/accounts/FileserveCom.py
diff --git a/module/plugins/accounts/FourSharedCom.py b/pyload/plugins/accounts/FourSharedCom.py
index bd3820277..bd3820277 100644
--- a/module/plugins/accounts/FourSharedCom.py
+++ b/pyload/plugins/accounts/FourSharedCom.py
diff --git a/module/plugins/accounts/FreakshareCom.py b/pyload/plugins/accounts/FreakshareCom.py
index 732f9e203..732f9e203 100644
--- a/module/plugins/accounts/FreakshareCom.py
+++ b/pyload/plugins/accounts/FreakshareCom.py
diff --git a/module/plugins/accounts/FshareVn.py b/pyload/plugins/accounts/FshareVn.py
index 9b22cbafb..9b22cbafb 100644
--- a/module/plugins/accounts/FshareVn.py
+++ b/pyload/plugins/accounts/FshareVn.py
diff --git a/module/plugins/accounts/Ftp.py b/pyload/plugins/accounts/Ftp.py
index 9c1081662..9c1081662 100644
--- a/module/plugins/accounts/Ftp.py
+++ b/pyload/plugins/accounts/Ftp.py
diff --git a/module/plugins/accounts/HellshareCz.py b/pyload/plugins/accounts/HellshareCz.py
index c7a918dec..c7a918dec 100644
--- a/module/plugins/accounts/HellshareCz.py
+++ b/pyload/plugins/accounts/HellshareCz.py
diff --git a/module/plugins/accounts/HellspyCz.py b/pyload/plugins/accounts/HellspyCz.py
index 5f14a093e..5f14a093e 100644
--- a/module/plugins/accounts/HellspyCz.py
+++ b/pyload/plugins/accounts/HellspyCz.py
diff --git a/module/plugins/accounts/HotfileCom.py b/pyload/plugins/accounts/HotfileCom.py
index 23e42dacf..23e42dacf 100644
--- a/module/plugins/accounts/HotfileCom.py
+++ b/pyload/plugins/accounts/HotfileCom.py
diff --git a/module/plugins/accounts/Http.py b/pyload/plugins/accounts/Http.py
index 805d19900..805d19900 100644
--- a/module/plugins/accounts/Http.py
+++ b/pyload/plugins/accounts/Http.py
diff --git a/module/plugins/accounts/MegasharesCom.py b/pyload/plugins/accounts/MegasharesCom.py
index 91601fc95..91601fc95 100644
--- a/module/plugins/accounts/MegasharesCom.py
+++ b/pyload/plugins/accounts/MegasharesCom.py
diff --git a/module/plugins/accounts/MultiDebridCom.py b/pyload/plugins/accounts/MultiDebridCom.py
index 904be5ee7..904be5ee7 100644
--- a/module/plugins/accounts/MultiDebridCom.py
+++ b/pyload/plugins/accounts/MultiDebridCom.py
diff --git a/module/plugins/accounts/MultishareCz.py b/pyload/plugins/accounts/MultishareCz.py
index 39439cbbe..39439cbbe 100644
--- a/module/plugins/accounts/MultishareCz.py
+++ b/pyload/plugins/accounts/MultishareCz.py
diff --git a/module/plugins/accounts/NetloadIn.py b/pyload/plugins/accounts/NetloadIn.py
index cef3e298b..cef3e298b 100755
--- a/module/plugins/accounts/NetloadIn.py
+++ b/pyload/plugins/accounts/NetloadIn.py
diff --git a/module/plugins/accounts/Premium4Me.py b/pyload/plugins/accounts/Premium4Me.py
index 6a52cb61a..de1538e4a 100644
--- a/module/plugins/accounts/Premium4Me.py
+++ b/pyload/plugins/accounts/Premium4Me.py
@@ -1,27 +1,27 @@
-# -*- coding: utf-8 -*-
-from module.plugins.MultiHoster import MultiHoster
-
-class Premium4Me(MultiHoster):
- __name__ = "Premium4Me"
- __version__ = "0.10"
- __type__ = "account"
- __description__ = """Premium4.me account plugin"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- def loadAccountInfo(self, req):
- traffic = req.load("http://premium4.me/api/traffic.php?authcode=%s" % self.authcode)
-
- account_info = {"trafficleft": int(traffic) / 1024, "validuntil": -1}
-
- return account_info
-
- def login(self, req):
- self.authcode = req.load("http://premium4.me/api/getauthcode.php?username=%s&password=%s" % (self.loginname, self.password)).strip()
-
- if "wrong username" in self.authcode:
- self.wrongPassword()
-
- def loadHosterList(self, req):
- page = req.load("http://premium4.me/api/hosters.php?authcode=%s" % self.authcode)
+# -*- coding: utf-8 -*-
+from module.plugins.MultiHoster import MultiHoster
+
+class Premium4Me(MultiHoster):
+ __name__ = "Premium4Me"
+ __version__ = "0.10"
+ __type__ = "account"
+ __description__ = """Premium4.me account plugin"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ def loadAccountInfo(self, req):
+ traffic = req.load("http://premium4.me/api/traffic.php?authcode=%s" % self.authcode)
+
+ account_info = {"trafficleft": int(traffic) / 1024, "validuntil": -1}
+
+ return account_info
+
+ def login(self, req):
+ self.authcode = req.load("http://premium4.me/api/getauthcode.php?username=%s&password=%s" % (self.loginname, self.password)).strip()
+
+ if "wrong username" in self.authcode:
+ self.wrongPassword()
+
+ def loadHosterList(self, req):
+ page = req.load("http://premium4.me/api/hosters.php?authcode=%s" % self.authcode)
return [x.strip() for x in page.replace("\"", "").split(";")] \ No newline at end of file
diff --git a/module/plugins/accounts/PremiumizeMe.py b/pyload/plugins/accounts/PremiumizeMe.py
index 1a446b842..696fdf88f 100644
--- a/module/plugins/accounts/PremiumizeMe.py
+++ b/pyload/plugins/accounts/PremiumizeMe.py
@@ -1,44 +1,44 @@
-from module.plugins.Account import Account
-
-from module.common.json_layer import json_loads
-
-class PremiumizeMe(Account):
- __name__ = "PremiumizeMe"
- __version__ = "0.11"
- __type__ = "account"
- __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)
-
+from module.plugins.Account import Account
+
+from module.common.json_layer import json_loads
+
+class PremiumizeMe(Account):
+ __name__ = "PremiumizeMe"
+ __version__ = "0.11"
+ __type__ = "account"
+ __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/pyload/plugins/accounts/QuickshareCz.py
index 94649cc43..94649cc43 100644
--- a/module/plugins/accounts/QuickshareCz.py
+++ b/pyload/plugins/accounts/QuickshareCz.py
diff --git a/module/plugins/accounts/RapidgatorNet.py b/pyload/plugins/accounts/RapidgatorNet.py
index 85adc71a3..85adc71a3 100644
--- a/module/plugins/accounts/RapidgatorNet.py
+++ b/pyload/plugins/accounts/RapidgatorNet.py
diff --git a/module/plugins/accounts/RapidshareCom.py b/pyload/plugins/accounts/RapidshareCom.py
index 15722e099..15722e099 100644
--- a/module/plugins/accounts/RapidshareCom.py
+++ b/pyload/plugins/accounts/RapidshareCom.py
diff --git a/module/plugins/accounts/RarefileNet.py b/pyload/plugins/accounts/RarefileNet.py
index 90ad02d43..90ad02d43 100644
--- a/module/plugins/accounts/RarefileNet.py
+++ b/pyload/plugins/accounts/RarefileNet.py
diff --git a/module/plugins/accounts/RealdebridCom.py b/pyload/plugins/accounts/RealdebridCom.py
index 9460fc815..9460fc815 100644
--- a/module/plugins/accounts/RealdebridCom.py
+++ b/pyload/plugins/accounts/RealdebridCom.py
diff --git a/module/plugins/accounts/RehostTo.py b/pyload/plugins/accounts/RehostTo.py
index e1cb2668f..e1cb2668f 100644
--- a/module/plugins/accounts/RehostTo.py
+++ b/pyload/plugins/accounts/RehostTo.py
diff --git a/module/plugins/accounts/ReloadCc.py b/pyload/plugins/accounts/ReloadCc.py
index e4cb32c42..e4cb32c42 100644
--- a/module/plugins/accounts/ReloadCc.py
+++ b/pyload/plugins/accounts/ReloadCc.py
diff --git a/module/plugins/accounts/RyushareCom.py b/pyload/plugins/accounts/RyushareCom.py
index f734eb11b..f734eb11b 100644
--- a/module/plugins/accounts/RyushareCom.py
+++ b/pyload/plugins/accounts/RyushareCom.py
diff --git a/module/plugins/accounts/Share76Com.py b/pyload/plugins/accounts/Share76Com.py
index 9c946ae50..9c946ae50 100644
--- a/module/plugins/accounts/Share76Com.py
+++ b/pyload/plugins/accounts/Share76Com.py
diff --git a/module/plugins/accounts/ShareFilesCo.py b/pyload/plugins/accounts/ShareFilesCo.py
index 0d8ea6635..0d8ea6635 100644
--- a/module/plugins/accounts/ShareFilesCo.py
+++ b/pyload/plugins/accounts/ShareFilesCo.py
diff --git a/module/plugins/accounts/ShareRapidCom.py b/pyload/plugins/accounts/ShareRapidCom.py
index f8043449c..f8043449c 100644
--- a/module/plugins/accounts/ShareRapidCom.py
+++ b/pyload/plugins/accounts/ShareRapidCom.py
diff --git a/module/plugins/accounts/ShareonlineBiz.py b/pyload/plugins/accounts/ShareonlineBiz.py
index fe2b412db..fe2b412db 100644
--- a/module/plugins/accounts/ShareonlineBiz.py
+++ b/pyload/plugins/accounts/ShareonlineBiz.py
diff --git a/module/plugins/accounts/SpeedLoadOrg.py b/pyload/plugins/accounts/SpeedLoadOrg.py
index 4eb2b52de..4eb2b52de 100644
--- a/module/plugins/accounts/SpeedLoadOrg.py
+++ b/pyload/plugins/accounts/SpeedLoadOrg.py
diff --git a/module/plugins/accounts/StahnuTo.py b/pyload/plugins/accounts/StahnuTo.py
index 8a4523bc5..8a4523bc5 100644
--- a/module/plugins/accounts/StahnuTo.py
+++ b/pyload/plugins/accounts/StahnuTo.py
diff --git a/module/plugins/accounts/TurbobitNet.py b/pyload/plugins/accounts/TurbobitNet.py
index c4b819131..c4b819131 100644
--- a/module/plugins/accounts/TurbobitNet.py
+++ b/pyload/plugins/accounts/TurbobitNet.py
diff --git a/module/plugins/accounts/UlozTo.py b/pyload/plugins/accounts/UlozTo.py
index 6652c8b7c..6652c8b7c 100644
--- a/module/plugins/accounts/UlozTo.py
+++ b/pyload/plugins/accounts/UlozTo.py
diff --git a/module/plugins/accounts/UploadedTo.py b/pyload/plugins/accounts/UploadedTo.py
index e10b93e8d..e10b93e8d 100644
--- a/module/plugins/accounts/UploadedTo.py
+++ b/pyload/plugins/accounts/UploadedTo.py
diff --git a/module/plugins/accounts/UploadheroCom.py b/pyload/plugins/accounts/UploadheroCom.py
index f1e0649e6..18ed69ae6 100644
--- a/module/plugins/accounts/UploadheroCom.py
+++ b/pyload/plugins/accounts/UploadheroCom.py
@@ -1,35 +1,35 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from module.plugins.Account import Account
-import re,datetime,time
-
-class UploadheroCom(Account):
- __name__ = "UploadheroCom"
- __version__ = "0.1"
- __type__ = "account"
- __description__ = """Uploadhero.com 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.com/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.com/lib/connexion.php", post={"pseudo_login": user, "password_login": data["password"]})
-
- if "mot de passe invalide" in page:
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from module.plugins.Account import Account
+import re,datetime,time
+
+class UploadheroCom(Account):
+ __name__ = "UploadheroCom"
+ __version__ = "0.1"
+ __type__ = "account"
+ __description__ = """Uploadhero.com 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.com/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.com/lib/connexion.php", post={"pseudo_login": user, "password_login": data["password"]})
+
+ if "mot de passe invalide" in page:
self.wrongPassword() \ No newline at end of file
diff --git a/module/plugins/accounts/UploadingCom.py b/pyload/plugins/accounts/UploadingCom.py
index 507e4ab18..507e4ab18 100644
--- a/module/plugins/accounts/UploadingCom.py
+++ b/pyload/plugins/accounts/UploadingCom.py
diff --git a/module/plugins/accounts/UploadstationCom.py b/pyload/plugins/accounts/UploadstationCom.py
index e86cec7ce..e86cec7ce 100644
--- a/module/plugins/accounts/UploadstationCom.py
+++ b/pyload/plugins/accounts/UploadstationCom.py
diff --git a/module/plugins/accounts/UptoboxCom.py b/pyload/plugins/accounts/UptoboxCom.py
index b07991817..b07991817 100644
--- a/module/plugins/accounts/UptoboxCom.py
+++ b/pyload/plugins/accounts/UptoboxCom.py
diff --git a/module/plugins/accounts/WarserverCz.py b/pyload/plugins/accounts/WarserverCz.py
index 21961956b..21961956b 100644
--- a/module/plugins/accounts/WarserverCz.py
+++ b/pyload/plugins/accounts/WarserverCz.py
diff --git a/module/plugins/accounts/WuploadCom.py b/pyload/plugins/accounts/WuploadCom.py
index 3d9ddfffa..3d9ddfffa 100644
--- a/module/plugins/accounts/WuploadCom.py
+++ b/pyload/plugins/accounts/WuploadCom.py
diff --git a/module/plugins/accounts/X7To.py b/pyload/plugins/accounts/X7To.py
index 8c2bf245a..90f65d55e 100644
--- a/module/plugins/accounts/X7To.py
+++ b/pyload/plugins/accounts/X7To.py
@@ -1,66 +1,66 @@
-# -*- 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: ernieb
-"""
-
-import re
-from time import strptime, mktime
-
-from module.plugins.Account import Account
-
-class X7To(Account):
- __name__ = "X7To"
- __version__ = "0.1"
- __type__ = "account"
- __description__ = """X7.To account plugin"""
- __author_name__ = ("ernieb")
- __author_mail__ = ("ernieb")
-
- def loadAccountInfo(self, user, req):
- page = req.load("http://www.x7.to/my")
-
- validCheck = re.search("Premium-Mitglied bis ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
- if validCheck:
- valid = validCheck.group(1)
- valid = int(mktime(strptime(valid, "%Y-%m-%d")))
- else:
- validCheck = re.search("Premium member until ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
- if validCheck:
- valid = validCheck.group(1)
- valid = int(mktime(strptime(valid, "%Y-%m-%d")))
- else:
- valid = 0
-
- trafficleft = re.search(r'<em style="white-space:nowrap">([\d]*[,]?[\d]?[\d]?) (KB|MB|GB)</em>', page, re.IGNORECASE)
- if trafficleft:
- units = float(trafficleft.group(1).replace(",", "."))
- pow = {'KB': 0, 'MB': 1, 'GB': 2}[trafficleft.group(2)]
- trafficleft = int(units * 1024 ** pow)
- else:
- trafficleft = -1
-
- return {"trafficleft": trafficleft, "validuntil": valid}
-
-
- def login(self, user, data, req):
- #req.cj.setCookie("share.cx", "lang", "english")
- page = req.load("http://x7.to/lang/en", None, {})
- page = req.load("http://x7.to/james/login", None,
- {"redirect": "http://www.x7.to/", "id": user, "pw": data['password'], "submit": "submit"})
-
- if "Username and password are not matching." in page:
- self.wrongPassword()
+# -*- 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: ernieb
+"""
+
+import re
+from time import strptime, mktime
+
+from module.plugins.Account import Account
+
+class X7To(Account):
+ __name__ = "X7To"
+ __version__ = "0.1"
+ __type__ = "account"
+ __description__ = """X7.To account plugin"""
+ __author_name__ = ("ernieb")
+ __author_mail__ = ("ernieb")
+
+ def loadAccountInfo(self, user, req):
+ page = req.load("http://www.x7.to/my")
+
+ validCheck = re.search("Premium-Mitglied bis ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
+ if validCheck:
+ valid = validCheck.group(1)
+ valid = int(mktime(strptime(valid, "%Y-%m-%d")))
+ else:
+ validCheck = re.search("Premium member until ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
+ if validCheck:
+ valid = validCheck.group(1)
+ valid = int(mktime(strptime(valid, "%Y-%m-%d")))
+ else:
+ valid = 0
+
+ trafficleft = re.search(r'<em style="white-space:nowrap">([\d]*[,]?[\d]?[\d]?) (KB|MB|GB)</em>', page, re.IGNORECASE)
+ if trafficleft:
+ units = float(trafficleft.group(1).replace(",", "."))
+ pow = {'KB': 0, 'MB': 1, 'GB': 2}[trafficleft.group(2)]
+ trafficleft = int(units * 1024 ** pow)
+ else:
+ trafficleft = -1
+
+ return {"trafficleft": trafficleft, "validuntil": valid}
+
+
+ def login(self, user, data, req):
+ #req.cj.setCookie("share.cx", "lang", "english")
+ page = req.load("http://x7.to/lang/en", None, {})
+ page = req.load("http://x7.to/james/login", None,
+ {"redirect": "http://www.x7.to/", "id": user, "pw": data['password'], "submit": "submit"})
+
+ if "Username and password are not matching." in page:
+ self.wrongPassword()
diff --git a/module/plugins/accounts/YibaishiwuCom.py b/pyload/plugins/accounts/YibaishiwuCom.py
index e2aa6f11d..e2aa6f11d 100644
--- a/module/plugins/accounts/YibaishiwuCom.py
+++ b/pyload/plugins/accounts/YibaishiwuCom.py
diff --git a/module/plugins/accounts/ZeveraCom.py b/pyload/plugins/accounts/ZeveraCom.py
index 61a66cd89..61a66cd89 100644
--- a/module/plugins/accounts/ZeveraCom.py
+++ b/pyload/plugins/accounts/ZeveraCom.py
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/module/plugins/addons/AlldebridCom.py b/pyload/plugins/addons/AlldebridCom.py
index 6818b8c43..6818b8c43 100644
--- a/module/plugins/addons/AlldebridCom.py
+++ b/pyload/plugins/addons/AlldebridCom.py
diff --git a/module/plugins/addons/BypassCaptcha.py b/pyload/plugins/addons/BypassCaptcha.py
index 24ad17dd8..24ad17dd8 100644
--- a/module/plugins/addons/BypassCaptcha.py
+++ b/pyload/plugins/addons/BypassCaptcha.py
diff --git a/module/plugins/addons/CaptchaBrotherhood.py b/pyload/plugins/addons/CaptchaBrotherhood.py
index bdf547827..bdf547827 100644
--- a/module/plugins/addons/CaptchaBrotherhood.py
+++ b/pyload/plugins/addons/CaptchaBrotherhood.py
diff --git a/module/plugins/addons/CaptchaTrader.py b/pyload/plugins/addons/CaptchaTrader.py
index 889fa38ef..889fa38ef 100644
--- a/module/plugins/addons/CaptchaTrader.py
+++ b/pyload/plugins/addons/CaptchaTrader.py
diff --git a/module/plugins/addons/Checksum.py b/pyload/plugins/addons/Checksum.py
index b290838bb..b290838bb 100644
--- a/module/plugins/addons/Checksum.py
+++ b/pyload/plugins/addons/Checksum.py
diff --git a/module/plugins/addons/ClickAndLoad.py b/pyload/plugins/addons/ClickAndLoad.py
index 6d6928557..6d6928557 100644
--- a/module/plugins/addons/ClickAndLoad.py
+++ b/pyload/plugins/addons/ClickAndLoad.py
diff --git a/module/plugins/addons/DeathByCaptcha.py b/pyload/plugins/addons/DeathByCaptcha.py
index 59ff40ded..59ff40ded 100644
--- a/module/plugins/addons/DeathByCaptcha.py
+++ b/pyload/plugins/addons/DeathByCaptcha.py
diff --git a/module/plugins/addons/DebridItaliaCom.py b/pyload/plugins/addons/DebridItaliaCom.py
index 80cdc45f6..80cdc45f6 100644
--- a/module/plugins/addons/DebridItaliaCom.py
+++ b/pyload/plugins/addons/DebridItaliaCom.py
diff --git a/module/plugins/addons/DeleteFinished.py b/pyload/plugins/addons/DeleteFinished.py
index e0df69eef..e0df69eef 100644
--- a/module/plugins/addons/DeleteFinished.py
+++ b/pyload/plugins/addons/DeleteFinished.py
diff --git a/module/plugins/addons/DownloadScheduler.py b/pyload/plugins/addons/DownloadScheduler.py
index 4049d71c5..4049d71c5 100644
--- a/module/plugins/addons/DownloadScheduler.py
+++ b/pyload/plugins/addons/DownloadScheduler.py
diff --git a/module/plugins/addons/EasybytezCom.py b/pyload/plugins/addons/EasybytezCom.py
index 6a4ded85b..6a4ded85b 100644
--- a/module/plugins/addons/EasybytezCom.py
+++ b/pyload/plugins/addons/EasybytezCom.py
diff --git a/module/plugins/addons/Ev0InFetcher.py b/pyload/plugins/addons/Ev0InFetcher.py
index 608baf217..608baf217 100644
--- a/module/plugins/addons/Ev0InFetcher.py
+++ b/pyload/plugins/addons/Ev0InFetcher.py
diff --git a/module/plugins/addons/ExpertDecoders.py b/pyload/plugins/addons/ExpertDecoders.py
index 2e66e49ca..2e66e49ca 100644
--- a/module/plugins/addons/ExpertDecoders.py
+++ b/pyload/plugins/addons/ExpertDecoders.py
diff --git a/module/plugins/addons/ExternalScripts.py b/pyload/plugins/addons/ExternalScripts.py
index 8f5a5841e..8f5a5841e 100644
--- a/module/plugins/addons/ExternalScripts.py
+++ b/pyload/plugins/addons/ExternalScripts.py
diff --git a/module/plugins/addons/ExtractArchive.py b/pyload/plugins/addons/ExtractArchive.py
index 369b20ba9..369b20ba9 100644
--- a/module/plugins/addons/ExtractArchive.py
+++ b/pyload/plugins/addons/ExtractArchive.py
diff --git a/module/plugins/addons/HotFolder.py b/pyload/plugins/addons/HotFolder.py
index d05026448..d05026448 100644
--- a/module/plugins/addons/HotFolder.py
+++ b/pyload/plugins/addons/HotFolder.py
diff --git a/module/plugins/addons/IRCInterface.py b/pyload/plugins/addons/IRCInterface.py
index c261fc6f3..c261fc6f3 100644
--- a/module/plugins/addons/IRCInterface.py
+++ b/pyload/plugins/addons/IRCInterface.py
diff --git a/module/plugins/addons/ImageTyperz.py b/pyload/plugins/addons/ImageTyperz.py
index 59b6334a7..59b6334a7 100644
--- a/module/plugins/addons/ImageTyperz.py
+++ b/pyload/plugins/addons/ImageTyperz.py
diff --git a/module/plugins/addons/LinkdecrypterCom.py b/pyload/plugins/addons/LinkdecrypterCom.py
index d3d6bce68..d3d6bce68 100644
--- a/module/plugins/addons/LinkdecrypterCom.py
+++ b/pyload/plugins/addons/LinkdecrypterCom.py
diff --git a/module/plugins/addons/MergeFiles.py b/pyload/plugins/addons/MergeFiles.py
index 48f997681..48f997681 100644
--- a/module/plugins/addons/MergeFiles.py
+++ b/pyload/plugins/addons/MergeFiles.py
diff --git a/module/plugins/addons/MultiDebridCom.py b/pyload/plugins/addons/MultiDebridCom.py
index c95138648..c95138648 100644
--- a/module/plugins/addons/MultiDebridCom.py
+++ b/pyload/plugins/addons/MultiDebridCom.py
diff --git a/module/plugins/addons/MultiHome.py b/pyload/plugins/addons/MultiHome.py
index af3f55416..af3f55416 100644
--- a/module/plugins/addons/MultiHome.py
+++ b/pyload/plugins/addons/MultiHome.py
diff --git a/module/plugins/addons/MultiHoster.py b/pyload/plugins/addons/MultiHoster.py
index 825085df8..825085df8 100644
--- a/module/plugins/addons/MultiHoster.py
+++ b/pyload/plugins/addons/MultiHoster.py
diff --git a/module/plugins/addons/MultishareCz.py b/pyload/plugins/addons/MultishareCz.py
index 7e5a3e007..7e5a3e007 100644
--- a/module/plugins/addons/MultishareCz.py
+++ b/pyload/plugins/addons/MultishareCz.py
diff --git a/module/plugins/addons/Premium4Me.py b/pyload/plugins/addons/Premium4Me.py
index b49eb41a9..b4e4f822f 100644
--- a/module/plugins/addons/Premium4Me.py
+++ b/pyload/plugins/addons/Premium4Me.py
@@ -1,33 +1,33 @@
-# -*- coding: utf-8 -*-
-
-from module.network.RequestFactory import getURL
-from module.plugins.internal.MultiHoster import MultiHoster
-
-class Premium4Me(MultiHoster):
- __name__ = "Premium4Me"
- __version__ = "0.02"
- __type__ = "hook"
-
- __config__ = [("activated", "bool", "Activated", "False"),
- ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
- __description__ = """premium4.me hook plugin"""
- __author_name__ = ("RaNaN", "zoidberg")
- __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
-
- def getHoster(self):
-
- page = getURL("http://premium4.me/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 premium4.me account first and restart pyLoad"))
- return
-
+# -*- coding: utf-8 -*-
+
+from module.network.RequestFactory import getURL
+from module.plugins.internal.MultiHoster import MultiHoster
+
+class Premium4Me(MultiHoster):
+ __name__ = "Premium4Me"
+ __version__ = "0.02"
+ __type__ = "hook"
+
+ __config__ = [("activated", "bool", "Activated", "False"),
+ ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"),
+ ("hosterList", "str", "Hoster list (comma separated)", "")]
+ __description__ = """premium4.me hook plugin"""
+ __author_name__ = ("RaNaN", "zoidberg")
+ __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
+
+ def getHoster(self):
+
+ page = getURL("http://premium4.me/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 premium4.me account first and restart pyLoad"))
+ return
+
return MultiHoster.coreReady(self) \ No newline at end of file
diff --git a/module/plugins/addons/PremiumizeMe.py b/pyload/plugins/addons/PremiumizeMe.py
index a10c24f85..a10c24f85 100644
--- a/module/plugins/addons/PremiumizeMe.py
+++ b/pyload/plugins/addons/PremiumizeMe.py
diff --git a/module/plugins/addons/RealdebridCom.py b/pyload/plugins/addons/RealdebridCom.py
index be74b47c3..be74b47c3 100644
--- a/module/plugins/addons/RealdebridCom.py
+++ b/pyload/plugins/addons/RealdebridCom.py
diff --git a/module/plugins/addons/RehostTo.py b/pyload/plugins/addons/RehostTo.py
index 7ca5e5cde..7ca5e5cde 100644
--- a/module/plugins/addons/RehostTo.py
+++ b/pyload/plugins/addons/RehostTo.py
diff --git a/module/plugins/addons/RestartFailed.py b/pyload/plugins/addons/RestartFailed.py
index 7ee53deb9..7ee53deb9 100644
--- a/module/plugins/addons/RestartFailed.py
+++ b/pyload/plugins/addons/RestartFailed.py
diff --git a/module/plugins/addons/UnSkipOnFail.py b/pyload/plugins/addons/UnSkipOnFail.py
index 4b7a58be8..4b7a58be8 100644
--- a/module/plugins/addons/UnSkipOnFail.py
+++ b/pyload/plugins/addons/UnSkipOnFail.py
diff --git a/module/plugins/addons/UpdateManager.py b/pyload/plugins/addons/UpdateManager.py
index c800b44bf..c800b44bf 100644
--- a/module/plugins/addons/UpdateManager.py
+++ b/pyload/plugins/addons/UpdateManager.py
diff --git a/module/plugins/addons/XFileSharingPro.py b/pyload/plugins/addons/XFileSharingPro.py
index 105c70113..105c70113 100644
--- a/module/plugins/addons/XFileSharingPro.py
+++ b/pyload/plugins/addons/XFileSharingPro.py
diff --git a/module/plugins/addons/XMPPInterface.py b/pyload/plugins/addons/XMPPInterface.py
index e8ef1d2ca..e8ef1d2ca 100644
--- a/module/plugins/addons/XMPPInterface.py
+++ b/pyload/plugins/addons/XMPPInterface.py
diff --git a/module/plugins/addons/ZeveraCom.py b/pyload/plugins/addons/ZeveraCom.py
index cadf60069..cadf60069 100644
--- a/module/plugins/addons/ZeveraCom.py
+++ b/pyload/plugins/addons/ZeveraCom.py
diff --git a/module/plugins/addons/__init__.py b/pyload/plugins/addons/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/plugins/addons/__init__.py
+++ b/pyload/plugins/addons/__init__.py
diff --git a/module/plugins/crypter/C1neonCom.py b/pyload/plugins/crypter/C1neonCom.py
index 36b84764e..36b84764e 100644
--- a/module/plugins/crypter/C1neonCom.py
+++ b/pyload/plugins/crypter/C1neonCom.py
diff --git a/module/plugins/crypter/CCF.py b/pyload/plugins/crypter/CCF.py
index ab7ff1099..ab7ff1099 100644
--- a/module/plugins/crypter/CCF.py
+++ b/pyload/plugins/crypter/CCF.py
diff --git a/module/plugins/crypter/CrockoComFolder.py b/pyload/plugins/crypter/CrockoComFolder.py
index d727ec7ab..d727ec7ab 100644
--- a/module/plugins/crypter/CrockoComFolder.py
+++ b/pyload/plugins/crypter/CrockoComFolder.py
diff --git a/module/plugins/crypter/CryptItCom.py b/pyload/plugins/crypter/CryptItCom.py
index 4935758c7..4935758c7 100644
--- a/module/plugins/crypter/CryptItCom.py
+++ b/pyload/plugins/crypter/CryptItCom.py
diff --git a/module/plugins/crypter/CzshareComFolder.py b/pyload/plugins/crypter/CzshareComFolder.py
index c240c6a70..c240c6a70 100644
--- a/module/plugins/crypter/CzshareComFolder.py
+++ b/pyload/plugins/crypter/CzshareComFolder.py
diff --git a/module/plugins/crypter/DDLMusicOrg.py b/pyload/plugins/crypter/DDLMusicOrg.py
index f7cc996d0..f7cc996d0 100644
--- a/module/plugins/crypter/DDLMusicOrg.py
+++ b/pyload/plugins/crypter/DDLMusicOrg.py
diff --git a/module/plugins/crypter/DataHuFolder.py b/pyload/plugins/crypter/DataHuFolder.py
index f710f60d7..f710f60d7 100644
--- a/module/plugins/crypter/DataHuFolder.py
+++ b/pyload/plugins/crypter/DataHuFolder.py
diff --git a/module/plugins/crypter/DdlstorageComFolder.py b/pyload/plugins/crypter/DdlstorageComFolder.py
index d536032c6..d536032c6 100644
--- a/module/plugins/crypter/DdlstorageComFolder.py
+++ b/pyload/plugins/crypter/DdlstorageComFolder.py
diff --git a/module/plugins/crypter/DepositfilesComFolder.py b/pyload/plugins/crypter/DepositfilesComFolder.py
index 9023b238f..9023b238f 100644
--- a/module/plugins/crypter/DepositfilesComFolder.py
+++ b/pyload/plugins/crypter/DepositfilesComFolder.py
diff --git a/module/plugins/crypter/Dereferer.py b/pyload/plugins/crypter/Dereferer.py
index 584835e18..584835e18 100644
--- a/module/plugins/crypter/Dereferer.py
+++ b/pyload/plugins/crypter/Dereferer.py
diff --git a/module/plugins/crypter/DontKnowMe.py b/pyload/plugins/crypter/DontKnowMe.py
index dfa72df47..dfa72df47 100644
--- a/module/plugins/crypter/DontKnowMe.py
+++ b/pyload/plugins/crypter/DontKnowMe.py
diff --git a/module/plugins/crypter/DownloadVimeoCom.py b/pyload/plugins/crypter/DownloadVimeoCom.py
index 88310915b..88310915b 100644
--- a/module/plugins/crypter/DownloadVimeoCom.py
+++ b/pyload/plugins/crypter/DownloadVimeoCom.py
diff --git a/module/plugins/crypter/DuckCryptInfo.py b/pyload/plugins/crypter/DuckCryptInfo.py
index 4886d24db..4886d24db 100644
--- a/module/plugins/crypter/DuckCryptInfo.py
+++ b/pyload/plugins/crypter/DuckCryptInfo.py
diff --git a/module/plugins/crypter/EasybytezComFolder.py b/pyload/plugins/crypter/EasybytezComFolder.py
index 1b887e421..1b887e421 100644
--- a/module/plugins/crypter/EasybytezComFolder.py
+++ b/pyload/plugins/crypter/EasybytezComFolder.py
diff --git a/module/plugins/crypter/EmbeduploadCom.py b/pyload/plugins/crypter/EmbeduploadCom.py
index 8fd70882f..8fd70882f 100644
--- a/module/plugins/crypter/EmbeduploadCom.py
+++ b/pyload/plugins/crypter/EmbeduploadCom.py
diff --git a/module/plugins/crypter/FilebeerInfoFolder.py b/pyload/plugins/crypter/FilebeerInfoFolder.py
index f45144f14..f45144f14 100644
--- a/module/plugins/crypter/FilebeerInfoFolder.py
+++ b/pyload/plugins/crypter/FilebeerInfoFolder.py
diff --git a/module/plugins/crypter/FilefactoryComFolder.py b/pyload/plugins/crypter/FilefactoryComFolder.py
index 32793b491..32793b491 100644
--- a/module/plugins/crypter/FilefactoryComFolder.py
+++ b/pyload/plugins/crypter/FilefactoryComFolder.py
diff --git a/module/plugins/crypter/FileserveComFolder.py b/pyload/plugins/crypter/FileserveComFolder.py
index 9fe806971..9fe806971 100644
--- a/module/plugins/crypter/FileserveComFolder.py
+++ b/pyload/plugins/crypter/FileserveComFolder.py
diff --git a/module/plugins/crypter/FourChanOrg.py b/pyload/plugins/crypter/FourChanOrg.py
index 5c96e723d..5c96e723d 100644
--- a/module/plugins/crypter/FourChanOrg.py
+++ b/pyload/plugins/crypter/FourChanOrg.py
diff --git a/module/plugins/crypter/FshareVnFolder.py b/pyload/plugins/crypter/FshareVnFolder.py
index 2515e7edd..2515e7edd 100644
--- a/module/plugins/crypter/FshareVnFolder.py
+++ b/pyload/plugins/crypter/FshareVnFolder.py
diff --git a/module/plugins/crypter/GooGl.py b/pyload/plugins/crypter/GooGl.py
index bcb1d7494..bcb1d7494 100644
--- a/module/plugins/crypter/GooGl.py
+++ b/pyload/plugins/crypter/GooGl.py
diff --git a/module/plugins/crypter/HoerbuchIn.py b/pyload/plugins/crypter/HoerbuchIn.py
index 6f23b2eb9..6f23b2eb9 100644
--- a/module/plugins/crypter/HoerbuchIn.py
+++ b/pyload/plugins/crypter/HoerbuchIn.py
diff --git a/module/plugins/crypter/HotfileFolderCom.py b/pyload/plugins/crypter/HotfileFolderCom.py
index ea7311e3c..ea7311e3c 100644
--- a/module/plugins/crypter/HotfileFolderCom.py
+++ b/pyload/plugins/crypter/HotfileFolderCom.py
diff --git a/module/plugins/crypter/ILoadTo.py b/pyload/plugins/crypter/ILoadTo.py
index 9815ae266..100ba2bc6 100644
--- a/module/plugins/crypter/ILoadTo.py
+++ b/pyload/plugins/crypter/ILoadTo.py
@@ -1,62 +1,62 @@
-
-import re
-import urllib
-
-from module.plugins.Crypter import Crypter
-from module.lib.BeautifulSoup import BeautifulSoup
-
-class ILoadTo(Crypter):
- __name__ = "ILoadTo"
- __type__ = "crypter"
- __pattern__ = r"http://iload\.to/go/\d+-[\w\.-]+/"
- __config__ = []
- __version__ = "0.1"
- __description__ = """iload.to Crypter Plugin"""
- __author_name__ = ("hzpz")
- __author_mail__ = ("none")
-
-
- def decrypt(self, pyfile):
- url = pyfile.url
- src = self.req.load(str(url))
- soup = BeautifulSoup(src)
-
- # find captcha URL and decrypt
- captchaTag = soup.find("img", attrs={"id": "Captcha"})
- if not captchaTag:
- self.fail("Cannot find Captcha")
-
- captchaUrl = "http://iload.to" + captchaTag["src"]
- self.logDebug("Captcha URL: %s" % captchaUrl)
- result = self.decryptCaptcha(str(captchaUrl))
-
- # find captcha form URL
- formTag = soup.find("form", attrs={"id": "CaptchaForm"})
- formUrl = "http://iload.to" + formTag["action"]
- self.logDebug("Form URL: %s" % formUrl)
-
- # submit decrypted captcha
- self.req.lastURL = url
- src = self.req.load(str(formUrl), post={'captcha': result})
-
- # find decrypted links
- links = re.findall(r"<a href=\"(.+)\" style=\"text-align:center;font-weight:bold;\" class=\"button\" target=\"_blank\" onclick=\"this.className\+=' success';\">", src)
-
- if not len(links) > 0:
- self.retry()
-
- self.correctCaptcha()
-
- cleanedLinks = []
- for link in links:
- if link.startswith("http://dontknow.me/at/?"):
- cleanedLink = urllib.unquote(link[23:])
- else:
- cleanedLink = link
- self.logDebug("Link: %s" % cleanedLink)
- cleanedLinks.append(cleanedLink)
-
- self.logDebug("Decrypted %d links" % len(links))
-
- self.pyfile.package().password = "iload.to"
+
+import re
+import urllib
+
+from module.plugins.Crypter import Crypter
+from module.lib.BeautifulSoup import BeautifulSoup
+
+class ILoadTo(Crypter):
+ __name__ = "ILoadTo"
+ __type__ = "crypter"
+ __pattern__ = r"http://iload\.to/go/\d+-[\w\.-]+/"
+ __config__ = []
+ __version__ = "0.1"
+ __description__ = """iload.to Crypter Plugin"""
+ __author_name__ = ("hzpz")
+ __author_mail__ = ("none")
+
+
+ def decrypt(self, pyfile):
+ url = pyfile.url
+ src = self.req.load(str(url))
+ soup = BeautifulSoup(src)
+
+ # find captcha URL and decrypt
+ captchaTag = soup.find("img", attrs={"id": "Captcha"})
+ if not captchaTag:
+ self.fail("Cannot find Captcha")
+
+ captchaUrl = "http://iload.to" + captchaTag["src"]
+ self.logDebug("Captcha URL: %s" % captchaUrl)
+ result = self.decryptCaptcha(str(captchaUrl))
+
+ # find captcha form URL
+ formTag = soup.find("form", attrs={"id": "CaptchaForm"})
+ formUrl = "http://iload.to" + formTag["action"]
+ self.logDebug("Form URL: %s" % formUrl)
+
+ # submit decrypted captcha
+ self.req.lastURL = url
+ src = self.req.load(str(formUrl), post={'captcha': result})
+
+ # find decrypted links
+ links = re.findall(r"<a href=\"(.+)\" style=\"text-align:center;font-weight:bold;\" class=\"button\" target=\"_blank\" onclick=\"this.className\+=' success';\">", src)
+
+ if not len(links) > 0:
+ self.retry()
+
+ self.correctCaptcha()
+
+ cleanedLinks = []
+ for link in links:
+ if link.startswith("http://dontknow.me/at/?"):
+ cleanedLink = urllib.unquote(link[23:])
+ else:
+ cleanedLink = link
+ self.logDebug("Link: %s" % cleanedLink)
+ cleanedLinks.append(cleanedLink)
+
+ self.logDebug("Decrypted %d links" % len(links))
+
+ self.pyfile.package().password = "iload.to"
self.packages.append((self.pyfile.package().name, cleanedLinks, self.pyfile.package().folder)) \ No newline at end of file
diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/pyload/plugins/crypter/LetitbitNetFolder.py
index 68aad9dd7..68aad9dd7 100644
--- a/module/plugins/crypter/LetitbitNetFolder.py
+++ b/pyload/plugins/crypter/LetitbitNetFolder.py
diff --git a/module/plugins/crypter/LinkList.py b/pyload/plugins/crypter/LinkList.py
index ebfa373eb..ebfa373eb 100644
--- a/module/plugins/crypter/LinkList.py
+++ b/pyload/plugins/crypter/LinkList.py
diff --git a/module/plugins/crypter/LinkSaveIn.py b/pyload/plugins/crypter/LinkSaveIn.py
index 30cc61055..e021316bf 100644
--- a/module/plugins/crypter/LinkSaveIn.py
+++ b/pyload/plugins/crypter/LinkSaveIn.py
@@ -1,227 +1,227 @@
-# -*- coding: utf-8 -*-
-
-#
-# v2.01 - hagg
-# * 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
-#
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-from module.unescape import unescape
-import base64
-import binascii
-import re
-
-class LinkSaveIn(Crypter):
- __name__ = "LinkSaveIn"
- __type__ = "crypter"
- __pattern__ = r"http://(www\.)?linksave.in/(?P<id>\w+)$"
- __version__ = "2.01"
- __description__ = """LinkSave.in Crypter Plugin"""
- __author_name__ = ("fragonib")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es")
-
- # Constants
- _JK_KEY_ = "jk"
- _CRYPTED_KEY_ = "crypted"
- HOSTER_DOMAIN = "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_DOMAIN, "Linksave_Language", "english")
-
- # Request package
- self.html = self.load(self.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
-
+# -*- coding: utf-8 -*-
+
+#
+# v2.01 - hagg
+# * 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
+#
+
+from Crypto.Cipher import AES
+from module.plugins.Crypter import Crypter
+from module.unescape import unescape
+import base64
+import binascii
+import re
+
+class LinkSaveIn(Crypter):
+ __name__ = "LinkSaveIn"
+ __type__ = "crypter"
+ __pattern__ = r"http://(www\.)?linksave.in/(?P<id>\w+)$"
+ __version__ = "2.01"
+ __description__ = """LinkSave.in Crypter Plugin"""
+ __author_name__ = ("fragonib")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es")
+
+ # Constants
+ _JK_KEY_ = "jk"
+ _CRYPTED_KEY_ = "crypted"
+ HOSTER_DOMAIN = "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_DOMAIN, "Linksave_Language", "english")
+
+ # Request package
+ self.html = self.load(self.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/pyload/plugins/crypter/LinkdecrypterCom.py
index 69d2f8192..69d2f8192 100644
--- a/module/plugins/crypter/LinkdecrypterCom.py
+++ b/pyload/plugins/crypter/LinkdecrypterCom.py
diff --git a/module/plugins/crypter/LixIn.py b/pyload/plugins/crypter/LixIn.py
index e2ee30731..e2ee30731 100644
--- a/module/plugins/crypter/LixIn.py
+++ b/pyload/plugins/crypter/LixIn.py
diff --git a/module/plugins/crypter/LofCc.py b/pyload/plugins/crypter/LofCc.py
index 9c98c48a0..9c98c48a0 100644
--- a/module/plugins/crypter/LofCc.py
+++ b/pyload/plugins/crypter/LofCc.py
diff --git a/module/plugins/crypter/MBLinkInfo.py b/pyload/plugins/crypter/MBLinkInfo.py
index e266c7722..e266c7722 100644
--- a/module/plugins/crypter/MBLinkInfo.py
+++ b/pyload/plugins/crypter/MBLinkInfo.py
diff --git a/module/plugins/crypter/MediafireComFolder.py b/pyload/plugins/crypter/MediafireComFolder.py
index ddd61379c..ddd61379c 100644
--- a/module/plugins/crypter/MediafireComFolder.py
+++ b/pyload/plugins/crypter/MediafireComFolder.py
diff --git a/module/plugins/crypter/Movie2kTo.py b/pyload/plugins/crypter/Movie2kTo.py
index 097cb702e..097cb702e 100644
--- a/module/plugins/crypter/Movie2kTo.py
+++ b/pyload/plugins/crypter/Movie2kTo.py
diff --git a/module/plugins/crypter/MultiloadCz.py b/pyload/plugins/crypter/MultiloadCz.py
index 2c71b8fea..2c71b8fea 100644
--- a/module/plugins/crypter/MultiloadCz.py
+++ b/pyload/plugins/crypter/MultiloadCz.py
diff --git a/module/plugins/crypter/MultiuploadCom.py b/pyload/plugins/crypter/MultiuploadCom.py
index bf5540982..bf5540982 100644
--- a/module/plugins/crypter/MultiuploadCom.py
+++ b/pyload/plugins/crypter/MultiuploadCom.py
diff --git a/module/plugins/crypter/NCryptIn.py b/pyload/plugins/crypter/NCryptIn.py
index 5e1ea347c..bcb563fc6 100644
--- a/module/plugins/crypter/NCryptIn.py
+++ b/pyload/plugins/crypter/NCryptIn.py
@@ -1,251 +1,251 @@
-# -*- coding: utf-8 -*-
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-from module.plugins.ReCaptcha import ReCaptcha
-import base64
-import binascii
-import re
-
-class NCryptIn(Crypter):
- __name__ = "NCryptIn"
- __type__ = "crypter"
- __pattern__ = r"http://(?:www\.)?ncrypt.in/folder-([^/\?]+)"
- __version__ = "1.21"
- __description__ = """NCrypt.in Crypter Plugin"""
- __author_name__ = ("fragonib")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es")
-
- # Constants
- _JK_KEY_ = "jk"
- _CRYPTED_KEY_ = "crypted"
-
- def setup(self):
- self.html = None
- self.cleanedHtml = None
- self.captcha = False
- self.package = None
-
- def decrypt(self, pyfile):
-
- # Init
- self.package = pyfile.package()
-
- # Request package
- self.html = self.load(self.pyfile.url)
- self.cleanedHtml = self.removeCrap(self.html)
- if not self.isOnline():
- self.offline()
-
- # Check for protection
- if self.isProtected():
- self.html = self.unlockProtection()
- self.cleanedHtml = self.removeCrap(self.html)
- self.handleErrors()
-
- # Get package name and folder
- (package_name, folder_name) = self.getPackageInfo()
-
- # Extract package links
- package_links = []
- package_links.extend(self.handleWebLinks())
- package_links.extend(self.handleContainers())
- package_links.extend(self.handleCNL2())
- package_links = self.removeContainers(package_links)
- package_links = set(package_links)
-
- # Pack
- self.packages = [(package_name, package_links, folder_name)]
-
- def removeCrap(self, content):
- patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")',
- r'display:none;">(.*?)</(div|span)>',
- r'<div\s+class="jdownloader"(.*?)</div>',
- 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 removeContainers(self,package_links):
- tmp_package_links = package_links[:]
- for link in tmp_package_links:
- self.logDebug(link)
- if ".dlc" in link or ".ccf" in link or ".rsdf" in link:
- self.logDebug("Removing [%s] from package_links" % link)
- package_links.remove(link)
-
- if len(package_links) > 0:
- return package_links
- else:
- return tmp_package_links
-
- def isOnline(self):
- if "Your folder does not exist" in self.cleanedHtml:
- self.logDebug("File not found")
- return False
- return True
-
- def isProtected(self):
- if re.search(r'''<form.*?name.*?protected.*?>''', self.cleanedHtml):
- self.logDebug("Links are protected")
- return True
- return False
-
- def getPackageInfo(self):
- title_re = r'<h2><span.*?class="arrow".*?>(?P<title>[^<]+).*?</span>.*?</h2>'
- m = re.findall(title_re, self.html, re.DOTALL)
- if m is not None:
- title = m[-1].strip()
- name = folder = title
- 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 found, 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.captcha = True
- self.logDebug("Captcha protected, resolving captcha")
- 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.captcha = True
- id = re.search(r'\?k=(.*?)"', form).group(1)
- self.logDebug("Resolving ReCaptcha with key [%s]" % id)
- recaptcha = ReCaptcha(self)
- challenge, code = recaptcha.challenge(id)
- postData['recaptcha_challenge_field'] = challenge
- postData['recaptcha_response_field'] = code
-
- # Resolve circlecaptcha
- if "circlecaptcha" in form:
- self.captcha = True
- self.logDebug("Captcha 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))
- self.captcha_post_url = self.pyfile.url
-
- 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)
-
- def handleErrors(self):
-
- 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.captcha:
- if "The securitycheck was wrong!" in self.cleanedHtml:
- self.logDebug("Invalid captcha, retrying")
- self.invalidCaptcha()
- self.retry()
- else:
- self.correctCaptcha()
-
- def handleWebLinks(self):
- package_links = []
- self.logDebug("Handling Web links")
-
- pattern = r"(http://ncrypt\.in/link-.*?=)"
- links = re.findall(pattern, self.html)
- self.logDebug("Decrypting %d Web links" % len(links))
- for i, link in enumerate(links):
- self.logDebug("Decrypting Web link %d, %s" % (i+1, link))
- try:
- url = link.replace("link-", "frame-")
- link = self.load(url, just_header=True)['location']
- package_links.append(link)
- except Exception, detail:
- self.logDebug("Error decrypting Web link %s, %s" % (link, detail))
- return package_links
-
- def handleContainers(self):
- package_links = []
- self.logDebug("Handling Container 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 handleCNL2(self):
- package_links = []
- self.logDebug("Handling CNL2 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 _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
+# -*- coding: utf-8 -*-
+
+from Crypto.Cipher import AES
+from module.plugins.Crypter import Crypter
+from module.plugins.ReCaptcha import ReCaptcha
+import base64
+import binascii
+import re
+
+class NCryptIn(Crypter):
+ __name__ = "NCryptIn"
+ __type__ = "crypter"
+ __pattern__ = r"http://(?:www\.)?ncrypt.in/folder-([^/\?]+)"
+ __version__ = "1.21"
+ __description__ = """NCrypt.in Crypter Plugin"""
+ __author_name__ = ("fragonib")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es")
+
+ # Constants
+ _JK_KEY_ = "jk"
+ _CRYPTED_KEY_ = "crypted"
+
+ def setup(self):
+ self.html = None
+ self.cleanedHtml = None
+ self.captcha = False
+ self.package = None
+
+ def decrypt(self, pyfile):
+
+ # Init
+ self.package = pyfile.package()
+
+ # Request package
+ self.html = self.load(self.pyfile.url)
+ self.cleanedHtml = self.removeCrap(self.html)
+ if not self.isOnline():
+ self.offline()
+
+ # Check for protection
+ if self.isProtected():
+ self.html = self.unlockProtection()
+ self.cleanedHtml = self.removeCrap(self.html)
+ self.handleErrors()
+
+ # Get package name and folder
+ (package_name, folder_name) = self.getPackageInfo()
+
+ # Extract package links
+ package_links = []
+ package_links.extend(self.handleWebLinks())
+ package_links.extend(self.handleContainers())
+ package_links.extend(self.handleCNL2())
+ package_links = self.removeContainers(package_links)
+ package_links = set(package_links)
+
+ # Pack
+ self.packages = [(package_name, package_links, folder_name)]
+
+ def removeCrap(self, content):
+ patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")',
+ r'display:none;">(.*?)</(div|span)>',
+ r'<div\s+class="jdownloader"(.*?)</div>',
+ 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 removeContainers(self,package_links):
+ tmp_package_links = package_links[:]
+ for link in tmp_package_links:
+ self.logDebug(link)
+ if ".dlc" in link or ".ccf" in link or ".rsdf" in link:
+ self.logDebug("Removing [%s] from package_links" % link)
+ package_links.remove(link)
+
+ if len(package_links) > 0:
+ return package_links
+ else:
+ return tmp_package_links
+
+ def isOnline(self):
+ if "Your folder does not exist" in self.cleanedHtml:
+ self.logDebug("File not found")
+ return False
+ return True
+
+ def isProtected(self):
+ if re.search(r'''<form.*?name.*?protected.*?>''', self.cleanedHtml):
+ self.logDebug("Links are protected")
+ return True
+ return False
+
+ def getPackageInfo(self):
+ title_re = r'<h2><span.*?class="arrow".*?>(?P<title>[^<]+).*?</span>.*?</h2>'
+ m = re.findall(title_re, self.html, re.DOTALL)
+ if m is not None:
+ title = m[-1].strip()
+ name = folder = title
+ 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 found, 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.captcha = True
+ self.logDebug("Captcha protected, resolving captcha")
+ 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.captcha = True
+ id = re.search(r'\?k=(.*?)"', form).group(1)
+ self.logDebug("Resolving ReCaptcha with key [%s]" % id)
+ recaptcha = ReCaptcha(self)
+ challenge, code = recaptcha.challenge(id)
+ postData['recaptcha_challenge_field'] = challenge
+ postData['recaptcha_response_field'] = code
+
+ # Resolve circlecaptcha
+ if "circlecaptcha" in form:
+ self.captcha = True
+ self.logDebug("Captcha 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))
+ self.captcha_post_url = self.pyfile.url
+
+ 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)
+
+ def handleErrors(self):
+
+ 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.captcha:
+ if "The securitycheck was wrong!" in self.cleanedHtml:
+ self.logDebug("Invalid captcha, retrying")
+ self.invalidCaptcha()
+ self.retry()
+ else:
+ self.correctCaptcha()
+
+ def handleWebLinks(self):
+ package_links = []
+ self.logDebug("Handling Web links")
+
+ pattern = r"(http://ncrypt\.in/link-.*?=)"
+ links = re.findall(pattern, self.html)
+ self.logDebug("Decrypting %d Web links" % len(links))
+ for i, link in enumerate(links):
+ self.logDebug("Decrypting Web link %d, %s" % (i+1, link))
+ try:
+ url = link.replace("link-", "frame-")
+ link = self.load(url, just_header=True)['location']
+ package_links.append(link)
+ except Exception, detail:
+ self.logDebug("Error decrypting Web link %s, %s" % (link, detail))
+ return package_links
+
+ def handleContainers(self):
+ package_links = []
+ self.logDebug("Handling Container 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 handleCNL2(self):
+ package_links = []
+ self.logDebug("Handling CNL2 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 _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/pyload/plugins/crypter/NetfolderIn.py
index c5c602c27..c5c602c27 100644
--- a/module/plugins/crypter/NetfolderIn.py
+++ b/pyload/plugins/crypter/NetfolderIn.py
diff --git a/module/plugins/crypter/OneKhDe.py b/pyload/plugins/crypter/OneKhDe.py
index c77203187..c77203187 100644
--- a/module/plugins/crypter/OneKhDe.py
+++ b/pyload/plugins/crypter/OneKhDe.py
diff --git a/module/plugins/crypter/OronComFolder.py b/pyload/plugins/crypter/OronComFolder.py
index 726371966..726371966 100755
--- a/module/plugins/crypter/OronComFolder.py
+++ b/pyload/plugins/crypter/OronComFolder.py
diff --git a/module/plugins/crypter/QuickshareCzFolder.py b/pyload/plugins/crypter/QuickshareCzFolder.py
index 6cb049935..6cb049935 100644
--- a/module/plugins/crypter/QuickshareCzFolder.py
+++ b/pyload/plugins/crypter/QuickshareCzFolder.py
diff --git a/module/plugins/crypter/RSDF.py b/pyload/plugins/crypter/RSDF.py
index cbc9864b1..cbc9864b1 100644
--- a/module/plugins/crypter/RSDF.py
+++ b/pyload/plugins/crypter/RSDF.py
diff --git a/module/plugins/crypter/RSLayerCom.py b/pyload/plugins/crypter/RSLayerCom.py
index 6e4266f2e..6e4266f2e 100644
--- a/module/plugins/crypter/RSLayerCom.py
+++ b/pyload/plugins/crypter/RSLayerCom.py
diff --git a/module/plugins/crypter/RelinkUs.py b/pyload/plugins/crypter/RelinkUs.py
index 8f29a9158..8f29a9158 100644
--- a/module/plugins/crypter/RelinkUs.py
+++ b/pyload/plugins/crypter/RelinkUs.py
diff --git a/module/plugins/crypter/SecuredIn.py b/pyload/plugins/crypter/SecuredIn.py
index e41896c5f..e41896c5f 100644
--- a/module/plugins/crypter/SecuredIn.py
+++ b/pyload/plugins/crypter/SecuredIn.py
diff --git a/module/plugins/crypter/SerienjunkiesOrg.py b/pyload/plugins/crypter/SerienjunkiesOrg.py
index 3fcc12e36..3fcc12e36 100644
--- a/module/plugins/crypter/SerienjunkiesOrg.py
+++ b/pyload/plugins/crypter/SerienjunkiesOrg.py
diff --git a/module/plugins/crypter/ShareLinksBiz.py b/pyload/plugins/crypter/ShareLinksBiz.py
index 1ffa5d41a..b0e735896 100644
--- a/module/plugins/crypter/ShareLinksBiz.py
+++ b/pyload/plugins/crypter/ShareLinksBiz.py
@@ -1,269 +1,269 @@
-# -*- coding: utf-8 -*-
-
-from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-from module.plugins.ReCaptcha import ReCaptcha
-import base64
-import binascii
-import re
-
-
-class ShareLinksBiz(Crypter):
- __name__ = "ShareLinksBiz"
- __type__ = "crypter"
- __pattern__ = r"(?P<base>http://[\w\.]*?(share-links|s2l)\.biz)/(?P<id>_?[0-9a-z]+)(/.*)?"
- __version__ = "1.12"
- __description__ = """Share-Links.biz Crypter"""
- __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 = re.search(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("(/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):
- map = {}
- for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
- rect = eval('(' + m.group(1) + ')')
- href = m.group(2)
- map[rect] = href
- return map
-
- 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))
+# -*- coding: utf-8 -*-
+
+from Crypto.Cipher import AES
+from module.plugins.Crypter import Crypter
+from module.plugins.ReCaptcha import ReCaptcha
+import base64
+import binascii
+import re
+
+
+class ShareLinksBiz(Crypter):
+ __name__ = "ShareLinksBiz"
+ __type__ = "crypter"
+ __pattern__ = r"(?P<base>http://[\w\.]*?(share-links|s2l)\.biz)/(?P<id>_?[0-9a-z]+)(/.*)?"
+ __version__ = "1.12"
+ __description__ = """Share-Links.biz Crypter"""
+ __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 = re.search(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("(/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):
+ map = {}
+ for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
+ rect = eval('(' + m.group(1) + ')')
+ href = m.group(2)
+ map[rect] = href
+ return map
+
+ 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 \ No newline at end of file
diff --git a/module/plugins/crypter/ShareRapidComFolder.py b/pyload/plugins/crypter/ShareRapidComFolder.py
index cb7f37525..cb7f37525 100644
--- a/module/plugins/crypter/ShareRapidComFolder.py
+++ b/pyload/plugins/crypter/ShareRapidComFolder.py
diff --git a/module/plugins/crypter/SpeedLoadOrgFolder.py b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
index f85ede6f3..f85ede6f3 100644
--- a/module/plugins/crypter/SpeedLoadOrgFolder.py
+++ b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
diff --git a/module/plugins/crypter/StealthTo.py b/pyload/plugins/crypter/StealthTo.py
index cf7a79e9b..cf7a79e9b 100644
--- a/module/plugins/crypter/StealthTo.py
+++ b/pyload/plugins/crypter/StealthTo.py
diff --git a/module/plugins/crypter/TrailerzoneInfo.py b/pyload/plugins/crypter/TrailerzoneInfo.py
index 43a4fcce5..43a4fcce5 100644
--- a/module/plugins/crypter/TrailerzoneInfo.py
+++ b/pyload/plugins/crypter/TrailerzoneInfo.py
diff --git a/module/plugins/crypter/UlozToFolder.py b/pyload/plugins/crypter/UlozToFolder.py
index 814d5240d..814d5240d 100644
--- a/module/plugins/crypter/UlozToFolder.py
+++ b/pyload/plugins/crypter/UlozToFolder.py
diff --git a/module/plugins/crypter/UploadedToFolder.py b/pyload/plugins/crypter/UploadedToFolder.py
index c514f23d0..88d4e04e8 100644
--- a/module/plugins/crypter/UploadedToFolder.py
+++ b/pyload/plugins/crypter/UploadedToFolder.py
@@ -1,50 +1,50 @@
-# -*- coding: utf-8 -*-
-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero 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 Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
-
-import re
-
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class UploadedToFolder(SimpleCrypter):
- __name__ = "UploadedToFolder"
- __type__ = "crypter"
- __pattern__ = r"http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)"
- __version__ = "0.3"
- __description__ = """UploadedTo Crypter 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)]
+# -*- coding: utf-8 -*-
+
+############################################################################
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU Affero 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 Affero General Public License for more details. #
+# #
+# You should have received a copy of the GNU Affero General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+############################################################################
+
+import re
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class UploadedToFolder(SimpleCrypter):
+ __name__ = "UploadedToFolder"
+ __type__ = "crypter"
+ __pattern__ = r"http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)"
+ __version__ = "0.3"
+ __description__ = """UploadedTo Crypter 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/pyload/plugins/crypter/WiiReloadedOrg.py
index 574a147c4..ba101892d 100644
--- a/module/plugins/crypter/WiiReloadedOrg.py
+++ b/pyload/plugins/crypter/WiiReloadedOrg.py
@@ -1,52 +1,52 @@
-
-import re
-
-from module.plugins.Crypter import Crypter
-
-class WiiReloadedOrg(Crypter):
- __name__ = "WiiReloadedOrg"
- __type__ = "crypter"
- __pattern__ = r"http://www\.wii-reloaded\.org/protect/get\.php\?i=.+"
- __config__ = [("changeName", "bool", "Use Wii-Reloaded.org folder name", "True")]
- __version__ = "0.1"
- __description__ = """Wii-Reloaded.org Crypter Plugin"""
- __author_name__ = ("hzpz")
- __author_mail__ = ("none")
-
-
- def decrypt(self, pyfile):
- url = pyfile.url
- src = self.req.load(str(url))
-
- ids = re.findall(r"onClick=\"popup_dl\((.+)\)\"", src)
- if len(ids) == 0:
- self.fail("Unable to decrypt links, this plugin probably needs to be updated")
-
- packageName = self.pyfile.package().name
- if self.getConfig("changeName"):
- packageNameMatch = re.search(r"<div id=\"foldername\">(.+)</div>", src)
- if not packageNameMatch:
- self.logWarning("Unable to get folder name, this plugin probably needs to be updated")
- else:
- packageName = packageNameMatch.group(1)
-
- self.pyfile.package().password = "wii-reloaded.info"
-
- self.logDebug("Processing %d links" % len(ids))
- links = []
- for id in ids:
- self.req.lastURL = str(url)
- header = self.req.load("http://www.wii-reloaded.org/protect/hastesosiehtsaus.php?i=" + id, just_header=True)
- self.logDebug("Header:\n" + header)
- redirectLocationMatch = re.search(r"^Location: (.+)$", header, flags=re.MULTILINE)
- if not redirectLocationMatch:
- self.offline()
- redirectLocation = redirectLocationMatch.group(1)
- self.logDebug(len(redirectLocation))
- if not redirectLocation.startswith("http"):
- self.offline()
- self.logDebug("Decrypted link: %s" % redirectLocation)
- links.append(redirectLocation)
-
- self.logDebug("Decrypted %d links" % len(links))
+
+import re
+
+from module.plugins.Crypter import Crypter
+
+class WiiReloadedOrg(Crypter):
+ __name__ = "WiiReloadedOrg"
+ __type__ = "crypter"
+ __pattern__ = r"http://www\.wii-reloaded\.org/protect/get\.php\?i=.+"
+ __config__ = [("changeName", "bool", "Use Wii-Reloaded.org folder name", "True")]
+ __version__ = "0.1"
+ __description__ = """Wii-Reloaded.org Crypter Plugin"""
+ __author_name__ = ("hzpz")
+ __author_mail__ = ("none")
+
+
+ def decrypt(self, pyfile):
+ url = pyfile.url
+ src = self.req.load(str(url))
+
+ ids = re.findall(r"onClick=\"popup_dl\((.+)\)\"", src)
+ if len(ids) == 0:
+ self.fail("Unable to decrypt links, this plugin probably needs to be updated")
+
+ packageName = self.pyfile.package().name
+ if self.getConfig("changeName"):
+ packageNameMatch = re.search(r"<div id=\"foldername\">(.+)</div>", src)
+ if not packageNameMatch:
+ self.logWarning("Unable to get folder name, this plugin probably needs to be updated")
+ else:
+ packageName = packageNameMatch.group(1)
+
+ self.pyfile.package().password = "wii-reloaded.info"
+
+ self.logDebug("Processing %d links" % len(ids))
+ links = []
+ for id in ids:
+ self.req.lastURL = str(url)
+ header = self.req.load("http://www.wii-reloaded.org/protect/hastesosiehtsaus.php?i=" + id, just_header=True)
+ self.logDebug("Header:\n" + header)
+ redirectLocationMatch = re.search(r"^Location: (.+)$", header, flags=re.MULTILINE)
+ if not redirectLocationMatch:
+ self.offline()
+ redirectLocation = redirectLocationMatch.group(1)
+ self.logDebug(len(redirectLocation))
+ if not redirectLocation.startswith("http"):
+ self.offline()
+ self.logDebug("Decrypted link: %s" % redirectLocation)
+ links.append(redirectLocation)
+
+ self.logDebug("Decrypted %d links" % len(links))
self.packages.append((packageName, links, packageName)) \ No newline at end of file
diff --git a/module/plugins/crypter/XfilesharingProFolder.py b/pyload/plugins/crypter/XfilesharingProFolder.py
index 8e58c207d..90e3044a3 100644
--- a/module/plugins/crypter/XfilesharingProFolder.py
+++ b/pyload/plugins/crypter/XfilesharingProFolder.py
@@ -1,34 +1,34 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.Crypter import Crypter, Package
-import re
-
-class XfilesharingProFolder(Crypter):
- __name__ = "XfilesharingProFolder"
- __type__ = "crypter"
- __pattern__ = r"http://(?:www\.)?((easybytez|turboupload|uploadville|file4safe|fileband|filebeep|grupload|247upload)\.com|(muchshare|annonhost).net|bzlink.us)/users/.*"
- __version__ = "0.01"
- __description__ = """Generic XfilesharingPro Folder Plugin"""
- __author_name__ = ("zoidberg")
- __author_mail__ = ("zoidberg@mujmail.cz")
-
- LINK_PATTERN = r'<div class="link"><a href="([^"]+)" target="_blank">[^<]*</a></div>'
- SUBFOLDER_PATTERN = r'<TD width="1%"><img src="[^"]*/images/folder2.gif"></TD><TD><a href="([^"]+)"><b>(?!\. \.<)([^<]+)</b></a></TD>'
-
- def decryptURL(self, url):
- return self.decryptFile(self.load(url, decode = True))
-
- def decryptFile(self, html):
- new_links = []
-
- new_links.extend(re.findall(self.LINK_PATTERN, html))
-
- subfolders = re.findall(self.SUBFOLDER_PATTERN, html)
- #self.logDebug(subfolders)
- for (url, name) in subfolders:
- if self.package: name = "%s/%s" % (self.package.name, name)
- new_links.append(Package(name, [url]))
-
- if not new_links: self.fail('Could not extract any links')
-
+# -*- coding: utf-8 -*-
+
+from module.plugins.Crypter import Crypter, Package
+import re
+
+class XfilesharingProFolder(Crypter):
+ __name__ = "XfilesharingProFolder"
+ __type__ = "crypter"
+ __pattern__ = r"http://(?:www\.)?((easybytez|turboupload|uploadville|file4safe|fileband|filebeep|grupload|247upload)\.com|(muchshare|annonhost).net|bzlink.us)/users/.*"
+ __version__ = "0.01"
+ __description__ = """Generic XfilesharingPro Folder Plugin"""
+ __author_name__ = ("zoidberg")
+ __author_mail__ = ("zoidberg@mujmail.cz")
+
+ LINK_PATTERN = r'<div class="link"><a href="([^"]+)" target="_blank">[^<]*</a></div>'
+ SUBFOLDER_PATTERN = r'<TD width="1%"><img src="[^"]*/images/folder2.gif"></TD><TD><a href="([^"]+)"><b>(?!\. \.<)([^<]+)</b></a></TD>'
+
+ def decryptURL(self, url):
+ return self.decryptFile(self.load(url, decode = True))
+
+ def decryptFile(self, html):
+ new_links = []
+
+ new_links.extend(re.findall(self.LINK_PATTERN, html))
+
+ subfolders = re.findall(self.SUBFOLDER_PATTERN, html)
+ #self.logDebug(subfolders)
+ for (url, name) in subfolders:
+ if self.package: name = "%s/%s" % (self.package.name, name)
+ new_links.append(Package(name, [url]))
+
+ if not new_links: self.fail('Could not extract any links')
+
return new_links \ No newline at end of file
diff --git a/module/plugins/crypter/YoutubeBatch.py b/pyload/plugins/crypter/YoutubeBatch.py
index 72b72aab7..72b72aab7 100644
--- a/module/plugins/crypter/YoutubeBatch.py
+++ b/pyload/plugins/crypter/YoutubeBatch.py
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/module/plugins/hooks/Captcha9kw.py b/pyload/plugins/hooks/Captcha9kw.py
index bb2b8c862..b80c06662 100755
--- a/module/plugins/hooks/Captcha9kw.py
+++ b/pyload/plugins/hooks/Captcha9kw.py
@@ -1,162 +1,162 @@
-# -*- 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, zoidberg
-"""
-from __future__ import with_statement
-
-from thread import start_new_thread
-from base64 import b64encode
-import cStringIO
-import pycurl
-import time
-
-from module.network.RequestFactory import getURL, getRequest
-from module.network.HTTPRequest import BadHeader
-
-from module.plugins.Hook import Hook
-
-class Captcha9kw(Hook):
- __name__ = "Captcha9kw"
- __version__ = "0.04"
- __description__ = """send captchas to 9kw.eu"""
- __config__ = [("activated", "bool", "Activated", True),
- ("force", "bool", "Force CT even if client is connected", True),
- ("https", "bool", "Enable HTTPS", "False"),
- ("confirm", "bool", "Confirm Captcha", "False"),
- ("captchaperhour", "int", "Captcha per hour", "9999"),
- ("prio", "int", "Prio (1-10)", "0"),
- ("passkey", "password", "API key", ""),]
- __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": "220",
- "pyload": "1",
- "source": "pyload",
- "base64": "1",
- "mouse": mouse,
- "file-upload-01": data,
- "action": "usercaptchaupload" })
-
- if response.isdigit():
- self.logInfo(_("NewCaptchaID from upload: %s : %s" % (response,task.captchaFile)))
-
- for i in range(1, 220, 1):
- response2 = getURL(self.API_URL, get = { "apikey": self.getConfig("passkey"), "id": response,"pyload": "1","source": "pyload", "action": "usercaptchacorrectdata" })
-
- if(response2 != ""):
- break;
-
- time.sleep(1)
-
- 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(220)
- 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)
+# -*- 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, zoidberg
+"""
+from __future__ import with_statement
+
+from thread import start_new_thread
+from base64 import b64encode
+import cStringIO
+import pycurl
+import time
+
+from module.network.RequestFactory import getURL, getRequest
+from module.network.HTTPRequest import BadHeader
+
+from module.plugins.Hook import Hook
+
+class Captcha9kw(Hook):
+ __name__ = "Captcha9kw"
+ __version__ = "0.04"
+ __description__ = """send captchas to 9kw.eu"""
+ __config__ = [("activated", "bool", "Activated", True),
+ ("force", "bool", "Force CT even if client is connected", True),
+ ("https", "bool", "Enable HTTPS", "False"),
+ ("confirm", "bool", "Confirm Captcha", "False"),
+ ("captchaperhour", "int", "Captcha per hour", "9999"),
+ ("prio", "int", "Prio (1-10)", "0"),
+ ("passkey", "password", "API key", ""),]
+ __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": "220",
+ "pyload": "1",
+ "source": "pyload",
+ "base64": "1",
+ "mouse": mouse,
+ "file-upload-01": data,
+ "action": "usercaptchaupload" })
+
+ if response.isdigit():
+ self.logInfo(_("NewCaptchaID from upload: %s : %s" % (response,task.captchaFile)))
+
+ for i in range(1, 220, 1):
+ response2 = getURL(self.API_URL, get = { "apikey": self.getConfig("passkey"), "id": response,"pyload": "1","source": "pyload", "action": "usercaptchacorrectdata" })
+
+ if(response2 != ""):
+ break;
+
+ time.sleep(1)
+
+ 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(220)
+ 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/ReloadCc.py b/pyload/plugins/hooks/ReloadCc.py
index dbd9d659b..dbd9d659b 100644
--- a/module/plugins/hooks/ReloadCc.py
+++ b/pyload/plugins/hooks/ReloadCc.py
diff --git a/module/plugins/hoster/ARD.py b/pyload/plugins/hoster/ARD.py
index 5ab65cd4b..5ab65cd4b 100644
--- a/module/plugins/hoster/ARD.py
+++ b/pyload/plugins/hoster/ARD.py
diff --git a/module/plugins/hoster/AlldebridCom.py b/pyload/plugins/hoster/AlldebridCom.py
index efc96ff28..e5223b011 100644
--- a/module/plugins/hoster/AlldebridCom.py
+++ b/pyload/plugins/hoster/AlldebridCom.py
@@ -1,84 +1,84 @@
-# -*- coding: utf-8 -*-
-
-import re
-from urllib import unquote
-from random import randrange
-from module.plugins.Hoster import Hoster
-from module.common.json_layer import json_loads
-from module.utils import parseFileSize
-
-
-class AlldebridCom(Hoster):
- __name__ = "AlldebridCom"
- __version__ = "0.31"
- __type__ = "hoster"
-
- __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 init(self):
- self.tries = 0
- self.chunkLimit = 3
- self.resumeDownload = True
-
- def process(self, pyfile):
- if not self.account:
- self.logError("Please enter your AllDebrid account or deactivate this plugin")
- self.fail("No AllDebrid account provided")
-
- self.log.debug("AllDebrid: Old URL: %s" % pyfile.url)
- if re.match(self.__pattern__, pyfile.url):
- new_url = pyfile.url
- else:
- 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 self.pyfile.name and not self.pyfile.name.endswith('.tmp'):
- self.pyfile.name = data["filename"]
- self.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://")
-
- self.logDebug("AllDebrid: 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(reason="An error occured while generating link.", wait_time=60)
- elif check == "empty":
- self.retry(reason="Downloaded File was empty.", wait_time=60)
+# -*- coding: utf-8 -*-
+
+import re
+from urllib import unquote
+from random import randrange
+from module.plugins.Hoster import Hoster
+from module.common.json_layer import json_loads
+from module.utils import parseFileSize
+
+
+class AlldebridCom(Hoster):
+ __name__ = "AlldebridCom"
+ __version__ = "0.31"
+ __type__ = "hoster"
+
+ __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 init(self):
+ self.tries = 0
+ self.chunkLimit = 3
+ self.resumeDownload = True
+
+ def process(self, pyfile):
+ if not self.account:
+ self.logError("Please enter your AllDebrid account or deactivate this plugin")
+ self.fail("No AllDebrid account provided")
+
+ self.log.debug("AllDebrid: Old URL: %s" % pyfile.url)
+ if re.match(self.__pattern__, pyfile.url):
+ new_url = pyfile.url
+ else:
+ 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 self.pyfile.name and not self.pyfile.name.endswith('.tmp'):
+ self.pyfile.name = data["filename"]
+ self.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://")
+
+ self.logDebug("AllDebrid: 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(reason="An error occured while generating link.", wait_time=60)
+ elif check == "empty":
+ self.retry(reason="Downloaded File was empty.", wait_time=60)
diff --git a/module/plugins/hoster/BasePlugin.py b/pyload/plugins/hoster/BasePlugin.py
index 7070fafde..7070fafde 100644
--- a/module/plugins/hoster/BasePlugin.py
+++ b/pyload/plugins/hoster/BasePlugin.py
diff --git a/module/plugins/hoster/BayfilesCom.py b/pyload/plugins/hoster/BayfilesCom.py
index 190d9a952..190d9a952 100644
--- a/module/plugins/hoster/BayfilesCom.py
+++ b/pyload/plugins/hoster/BayfilesCom.py
diff --git a/module/plugins/hoster/BezvadataCz.py b/pyload/plugins/hoster/BezvadataCz.py
index 49299d463..49299d463 100644
--- a/module/plugins/hoster/BezvadataCz.py
+++ b/pyload/plugins/hoster/BezvadataCz.py
diff --git a/module/plugins/hoster/BillionuploadsCom.py b/pyload/plugins/hoster/BillionuploadsCom.py
index 5b053d547..5b053d547 100644
--- a/module/plugins/hoster/BillionuploadsCom.py
+++ b/pyload/plugins/hoster/BillionuploadsCom.py
diff --git a/module/plugins/hoster/BitshareCom.py b/pyload/plugins/hoster/BitshareCom.py
index 644345387..644345387 100644
--- a/module/plugins/hoster/BitshareCom.py
+++ b/pyload/plugins/hoster/BitshareCom.py
diff --git a/module/plugins/hoster/BoltsharingCom.py b/pyload/plugins/hoster/BoltsharingCom.py
index 2f42c8b23..2f42c8b23 100644
--- a/module/plugins/hoster/BoltsharingCom.py
+++ b/pyload/plugins/hoster/BoltsharingCom.py
diff --git a/module/plugins/hoster/CatShareNet.py b/pyload/plugins/hoster/CatShareNet.py
index 47063096e..47063096e 100644
--- a/module/plugins/hoster/CatShareNet.py
+++ b/pyload/plugins/hoster/CatShareNet.py
diff --git a/module/plugins/hoster/ChipDe.py b/pyload/plugins/hoster/ChipDe.py
index fcb84a300..fcb84a300 100644
--- a/module/plugins/hoster/ChipDe.py
+++ b/pyload/plugins/hoster/ChipDe.py
diff --git a/module/plugins/hoster/CloudzerNet.py b/pyload/plugins/hoster/CloudzerNet.py
index 7608b193d..7608b193d 100644
--- a/module/plugins/hoster/CloudzerNet.py
+++ b/pyload/plugins/hoster/CloudzerNet.py
diff --git a/module/plugins/hoster/CramitIn.py b/pyload/plugins/hoster/CramitIn.py
index 171fba0ff..171fba0ff 100644
--- a/module/plugins/hoster/CramitIn.py
+++ b/pyload/plugins/hoster/CramitIn.py
diff --git a/module/plugins/hoster/CrockoCom.py b/pyload/plugins/hoster/CrockoCom.py
index 27ab52436..27ab52436 100644
--- a/module/plugins/hoster/CrockoCom.py
+++ b/pyload/plugins/hoster/CrockoCom.py
diff --git a/module/plugins/hoster/CyberlockerCh.py b/pyload/plugins/hoster/CyberlockerCh.py
index 57dd26787..57dd26787 100644
--- a/module/plugins/hoster/CyberlockerCh.py
+++ b/pyload/plugins/hoster/CyberlockerCh.py
diff --git a/module/plugins/hoster/CzshareCom.py b/pyload/plugins/hoster/CzshareCom.py
index 347427586..347427586 100644
--- a/module/plugins/hoster/CzshareCom.py
+++ b/pyload/plugins/hoster/CzshareCom.py
diff --git a/module/plugins/hoster/DailymotionCom.py b/pyload/plugins/hoster/DailymotionCom.py
index 1b411393d..1b411393d 100644
--- a/module/plugins/hoster/DailymotionCom.py
+++ b/pyload/plugins/hoster/DailymotionCom.py
diff --git a/module/plugins/hoster/DataHu.py b/pyload/plugins/hoster/DataHu.py
index 7abd93d1f..7abd93d1f 100644
--- a/module/plugins/hoster/DataHu.py
+++ b/pyload/plugins/hoster/DataHu.py
diff --git a/module/plugins/hoster/DataportCz.py b/pyload/plugins/hoster/DataportCz.py
index 3dc581bf1..3dc581bf1 100644
--- a/module/plugins/hoster/DataportCz.py
+++ b/pyload/plugins/hoster/DataportCz.py
diff --git a/module/plugins/hoster/DateiTo.py b/pyload/plugins/hoster/DateiTo.py
index 8d994c179..8d994c179 100644
--- a/module/plugins/hoster/DateiTo.py
+++ b/pyload/plugins/hoster/DateiTo.py
diff --git a/module/plugins/hoster/DdlstorageCom.py b/pyload/plugins/hoster/DdlstorageCom.py
index 1ad5fa6d8..1ad5fa6d8 100644
--- a/module/plugins/hoster/DdlstorageCom.py
+++ b/pyload/plugins/hoster/DdlstorageCom.py
diff --git a/module/plugins/hoster/DebridItaliaCom.py b/pyload/plugins/hoster/DebridItaliaCom.py
index 470c4ae5d..470c4ae5d 100644
--- a/module/plugins/hoster/DebridItaliaCom.py
+++ b/pyload/plugins/hoster/DebridItaliaCom.py
diff --git a/module/plugins/hoster/DepositfilesCom.py b/pyload/plugins/hoster/DepositfilesCom.py
index eb64ae4de..eb64ae4de 100644
--- a/module/plugins/hoster/DepositfilesCom.py
+++ b/pyload/plugins/hoster/DepositfilesCom.py
diff --git a/module/plugins/hoster/DlFreeFr.py b/pyload/plugins/hoster/DlFreeFr.py
index 67c2d6c17..67c2d6c17 100644
--- a/module/plugins/hoster/DlFreeFr.py
+++ b/pyload/plugins/hoster/DlFreeFr.py
diff --git a/module/plugins/hoster/EasybytezCom.py b/pyload/plugins/hoster/EasybytezCom.py
index 96e3d93d2..96e3d93d2 100644
--- a/module/plugins/hoster/EasybytezCom.py
+++ b/pyload/plugins/hoster/EasybytezCom.py
diff --git a/module/plugins/hoster/EdiskCz.py b/pyload/plugins/hoster/EdiskCz.py
index a253be0d9..a253be0d9 100644
--- a/module/plugins/hoster/EdiskCz.py
+++ b/pyload/plugins/hoster/EdiskCz.py
diff --git a/module/plugins/hoster/EgoFilesCom.py b/pyload/plugins/hoster/EgoFilesCom.py
index 7e6673210..66268550a 100644
--- a/module/plugins/hoster/EgoFilesCom.py
+++ b/pyload/plugins/hoster/EgoFilesCom.py
@@ -1,103 +1,103 @@
-# -*- coding: utf-8 -*-
-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero 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 Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
-
-# Test link (random.bin):
-# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin
-
-import re
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.plugins.ReCaptcha import ReCaptcha
-
-
-class EgoFilesCom(SimpleHoster):
- __name__ = "EgoFilesCom"
- __type__ = "hoster"
- __pattern__ = r"https?://(www\.)?egofiles.com/(\w+)"
- __version__ = "0.13"
- __description__ = """Egofiles.com Download Hoster"""
- __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+) \|'
- FILE_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>'
- DIRECT_LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>'
- RECAPTCHA_KEY = '6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX'
-
- def init(self):
- self.file_info = {}
- # 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.setWait(waittime, True)
- self.wait()
-
- downloadURL = ''
- recaptcha = ReCaptcha(self)
- for i 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.DIRECT_LINK_PATTERN, self.html)
- if not m:
- 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 header.has_key('location'):
- 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 not m:
- 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)
+# -*- coding: utf-8 -*-
+
+############################################################################
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU Affero 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 Affero General Public License for more details. #
+# #
+# You should have received a copy of the GNU Affero General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+############################################################################
+
+# Test link (random.bin):
+# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin
+
+import re
+
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.ReCaptcha import ReCaptcha
+
+
+class EgoFilesCom(SimpleHoster):
+ __name__ = "EgoFilesCom"
+ __type__ = "hoster"
+ __pattern__ = r"https?://(www\.)?egofiles.com/(\w+)"
+ __version__ = "0.13"
+ __description__ = """Egofiles.com Download Hoster"""
+ __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+) \|'
+ FILE_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>'
+ DIRECT_LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>'
+ RECAPTCHA_KEY = '6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX'
+
+ def init(self):
+ self.file_info = {}
+ # 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.setWait(waittime, True)
+ self.wait()
+
+ downloadURL = ''
+ recaptcha = ReCaptcha(self)
+ for i 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.DIRECT_LINK_PATTERN, self.html)
+ if not m:
+ 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 header.has_key('location'):
+ 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 not m:
+ 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/EuroshareEu.py b/pyload/plugins/hoster/EuroshareEu.py
index 5224dfd9f..5224dfd9f 100644
--- a/module/plugins/hoster/EuroshareEu.py
+++ b/pyload/plugins/hoster/EuroshareEu.py
diff --git a/module/plugins/hoster/ExtabitCom.py b/pyload/plugins/hoster/ExtabitCom.py
index fd91bb023..fd91bb023 100644
--- a/module/plugins/hoster/ExtabitCom.py
+++ b/pyload/plugins/hoster/ExtabitCom.py
diff --git a/module/plugins/hoster/FastshareCz.py b/pyload/plugins/hoster/FastshareCz.py
index 1dbf9fe8f..1dbf9fe8f 100644
--- a/module/plugins/hoster/FastshareCz.py
+++ b/pyload/plugins/hoster/FastshareCz.py
diff --git a/module/plugins/hoster/FileApeCom.py b/pyload/plugins/hoster/FileApeCom.py
index 1f933e776..1f933e776 100644
--- a/module/plugins/hoster/FileApeCom.py
+++ b/pyload/plugins/hoster/FileApeCom.py
diff --git a/module/plugins/hoster/FilebeerInfo.py b/pyload/plugins/hoster/FilebeerInfo.py
index 216ecfbca..216ecfbca 100644
--- a/module/plugins/hoster/FilebeerInfo.py
+++ b/pyload/plugins/hoster/FilebeerInfo.py
diff --git a/module/plugins/hoster/FilecloudIo.py b/pyload/plugins/hoster/FilecloudIo.py
index 4a096e400..4a096e400 100644
--- a/module/plugins/hoster/FilecloudIo.py
+++ b/pyload/plugins/hoster/FilecloudIo.py
diff --git a/module/plugins/hoster/FilefactoryCom.py b/pyload/plugins/hoster/FilefactoryCom.py
index fdde1f9d7..fdde1f9d7 100644
--- a/module/plugins/hoster/FilefactoryCom.py
+++ b/pyload/plugins/hoster/FilefactoryCom.py
diff --git a/module/plugins/hoster/FilejungleCom.py b/pyload/plugins/hoster/FilejungleCom.py
index fd833eef2..fd833eef2 100644
--- a/module/plugins/hoster/FilejungleCom.py
+++ b/pyload/plugins/hoster/FilejungleCom.py
diff --git a/module/plugins/hoster/FilepostCom.py b/pyload/plugins/hoster/FilepostCom.py
index bc47856e5..bc47856e5 100644
--- a/module/plugins/hoster/FilepostCom.py
+++ b/pyload/plugins/hoster/FilepostCom.py
diff --git a/module/plugins/hoster/FilerNet.py b/pyload/plugins/hoster/FilerNet.py
index 9693723f9..9693723f9 100644
--- a/module/plugins/hoster/FilerNet.py
+++ b/pyload/plugins/hoster/FilerNet.py
diff --git a/module/plugins/hoster/FilerioCom.py b/pyload/plugins/hoster/FilerioCom.py
index 7be0fa4f6..7be0fa4f6 100644
--- a/module/plugins/hoster/FilerioCom.py
+++ b/pyload/plugins/hoster/FilerioCom.py
diff --git a/module/plugins/hoster/FilesMailRu.py b/pyload/plugins/hoster/FilesMailRu.py
index ee4ea4953..ee4ea4953 100644
--- a/module/plugins/hoster/FilesMailRu.py
+++ b/pyload/plugins/hoster/FilesMailRu.py
diff --git a/module/plugins/hoster/FileserveCom.py b/pyload/plugins/hoster/FileserveCom.py
index 04c297661..04c297661 100644
--- a/module/plugins/hoster/FileserveCom.py
+++ b/pyload/plugins/hoster/FileserveCom.py
diff --git a/module/plugins/hoster/FileshareInUa.py b/pyload/plugins/hoster/FileshareInUa.py
index 9700b2d0a..9700b2d0a 100644
--- a/module/plugins/hoster/FileshareInUa.py
+++ b/pyload/plugins/hoster/FileshareInUa.py
diff --git a/module/plugins/hoster/FlyFilesNet.py b/pyload/plugins/hoster/FlyFilesNet.py
index 0ffb76191..0ffb76191 100644
--- a/module/plugins/hoster/FlyFilesNet.py
+++ b/pyload/plugins/hoster/FlyFilesNet.py
diff --git a/module/plugins/hoster/FourSharedCom.py b/pyload/plugins/hoster/FourSharedCom.py
index 518ae2ae6..518ae2ae6 100644
--- a/module/plugins/hoster/FourSharedCom.py
+++ b/pyload/plugins/hoster/FourSharedCom.py
diff --git a/module/plugins/hoster/FreakshareCom.py b/pyload/plugins/hoster/FreakshareCom.py
index 56e02cbdc..b03bc436d 100644
--- a/module/plugins/hoster/FreakshareCom.py
+++ b/pyload/plugins/hoster/FreakshareCom.py
@@ -1,167 +1,167 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Hoster import Hoster
-from module.plugins.ReCaptcha import ReCaptcha
-
-class FreakshareCom(Hoster):
- __name__ = "FreakshareCom"
- __type__ = "hoster"
- __pattern__ = r"http://(?:www\.)?freakshare\.(net|com)/files/\S*?/"
- __version__ = "0.37"
- __description__ = """Freakshare.com Download Hoster"""
- __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.html = None
- self.wantReconnect = False
- 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(self.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!"})
-
- if check == "bad":
- self.fail("Bad Try.")
- if check == "paralell":
- self.setWait(300, True)
- self.wait()
- self.retry()
- if check == "empty":
- self.fail("File not downloadable")
- if check == "wrong_captcha":
- self.invalidCaptcha()
- self.retry()
-
- 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 self.html is None:
- 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 self.html is None:
- 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 self.html is None:
- 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 self.html is None:
- self.download_html()
-
- if "Your Traffic is used up for today" in self.html:
- self.wantReconnect = True
- return 24*3600
-
- 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 self.html is None:
- 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
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+from module.plugins.Hoster import Hoster
+from module.plugins.ReCaptcha import ReCaptcha
+
+class FreakshareCom(Hoster):
+ __name__ = "FreakshareCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://(?:www\.)?freakshare\.(net|com)/files/\S*?/"
+ __version__ = "0.37"
+ __description__ = """Freakshare.com Download Hoster"""
+ __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.html = None
+ self.wantReconnect = False
+ 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(self.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!"})
+
+ if check == "bad":
+ self.fail("Bad Try.")
+ if check == "paralell":
+ self.setWait(300, True)
+ self.wait()
+ self.retry()
+ if check == "empty":
+ self.fail("File not downloadable")
+ if check == "wrong_captcha":
+ self.invalidCaptcha()
+ self.retry()
+
+ 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 self.html is None:
+ 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 self.html is None:
+ 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 self.html is None:
+ 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 self.html is None:
+ self.download_html()
+
+ if "Your Traffic is used up for today" in self.html:
+ self.wantReconnect = True
+ return 24*3600
+
+ 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 self.html is None:
+ 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/FreevideoCz.py b/pyload/plugins/hoster/FreevideoCz.py
index 19eb77470..19eb77470 100644
--- a/module/plugins/hoster/FreevideoCz.py
+++ b/pyload/plugins/hoster/FreevideoCz.py
diff --git a/module/plugins/hoster/FshareVn.py b/pyload/plugins/hoster/FshareVn.py
index 926781b40..926781b40 100644
--- a/module/plugins/hoster/FshareVn.py
+++ b/pyload/plugins/hoster/FshareVn.py
diff --git a/module/plugins/hoster/Ftp.py b/pyload/plugins/hoster/Ftp.py
index 3bda3b32e..c68f3b237 100644
--- a/module/plugins/hoster/Ftp.py
+++ b/pyload/plugins/hoster/Ftp.py
@@ -1,91 +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: jeix
- @author: mkaay
-"""
-from urlparse import urlparse, urljoin
-from urllib import quote, unquote
-import pycurl, re
-
-from module.plugins.Hoster import Hoster
-from module.network.HTTPRequest import BadHeader
-
-class Ftp(Hoster):
- __name__ = "Ftp"
- __version__ = "0.41"
- __pattern__ = r'(ftps?|sftp)://(.*?:.*?@)?.*?/.*' # ftp://user:password@ftp.server.org/path/to/file
- __type__ = "hoster"
- __description__ = """A Plugin that allows you to download from an from an 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)
-
- found = re.search(r"Content-Length:\s*(\d+)", response)
- if found:
- pyfile.size = int(found.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, 1)
- #self.core.files.addLinks(links, pyfile.package().id)
- else:
- self.fail("Unexpected server response")
-
+# -*- 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
+ @author: mkaay
+"""
+from urlparse import urlparse, urljoin
+from urllib import quote, unquote
+import pycurl, re
+
+from module.plugins.Hoster import Hoster
+from module.network.HTTPRequest import BadHeader
+
+class Ftp(Hoster):
+ __name__ = "Ftp"
+ __version__ = "0.41"
+ __pattern__ = r'(ftps?|sftp)://(.*?:.*?@)?.*?/.*' # ftp://user:password@ftp.server.org/path/to/file
+ __type__ = "hoster"
+ __description__ = """A Plugin that allows you to download from an from an 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)
+
+ found = re.search(r"Content-Length:\s*(\d+)", response)
+ if found:
+ pyfile.size = int(found.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, 1)
+ #self.core.files.addLinks(links, pyfile.package().id)
+ else:
+ self.fail("Unexpected server response")
+
\ No newline at end of file
diff --git a/module/plugins/hoster/GamefrontCom.py b/pyload/plugins/hoster/GamefrontCom.py
index 34fda09d2..34fda09d2 100644
--- a/module/plugins/hoster/GamefrontCom.py
+++ b/pyload/plugins/hoster/GamefrontCom.py
diff --git a/module/plugins/hoster/GigapetaCom.py b/pyload/plugins/hoster/GigapetaCom.py
index 28ba35abe..28ba35abe 100644
--- a/module/plugins/hoster/GigapetaCom.py
+++ b/pyload/plugins/hoster/GigapetaCom.py
diff --git a/module/plugins/hoster/HellshareCz.py b/pyload/plugins/hoster/HellshareCz.py
index aa494e34e..aa494e34e 100644
--- a/module/plugins/hoster/HellshareCz.py
+++ b/pyload/plugins/hoster/HellshareCz.py
diff --git a/module/plugins/hoster/HellspyCz.py b/pyload/plugins/hoster/HellspyCz.py
index 9858c82b7..9858c82b7 100644
--- a/module/plugins/hoster/HellspyCz.py
+++ b/pyload/plugins/hoster/HellspyCz.py
diff --git a/module/plugins/hoster/HotfileCom.py b/pyload/plugins/hoster/HotfileCom.py
index 2caf1ffbc..2caf1ffbc 100644
--- a/module/plugins/hoster/HotfileCom.py
+++ b/pyload/plugins/hoster/HotfileCom.py
diff --git a/module/plugins/hoster/IFileWs.py b/pyload/plugins/hoster/IFileWs.py
index 160fe641c..160fe641c 100644
--- a/module/plugins/hoster/IFileWs.py
+++ b/pyload/plugins/hoster/IFileWs.py
diff --git a/module/plugins/hoster/IcyFilesCom.py b/pyload/plugins/hoster/IcyFilesCom.py
index 34737e560..34737e560 100644
--- a/module/plugins/hoster/IcyFilesCom.py
+++ b/pyload/plugins/hoster/IcyFilesCom.py
diff --git a/module/plugins/hoster/IfileIt.py b/pyload/plugins/hoster/IfileIt.py
index bf394f340..bf394f340 100644
--- a/module/plugins/hoster/IfileIt.py
+++ b/pyload/plugins/hoster/IfileIt.py
diff --git a/module/plugins/hoster/IfolderRu.py b/pyload/plugins/hoster/IfolderRu.py
index 6accbc524..6accbc524 100644
--- a/module/plugins/hoster/IfolderRu.py
+++ b/pyload/plugins/hoster/IfolderRu.py
diff --git a/module/plugins/hoster/JumbofilesCom.py b/pyload/plugins/hoster/JumbofilesCom.py
index 9e8adb512..9e8adb512 100644
--- a/module/plugins/hoster/JumbofilesCom.py
+++ b/pyload/plugins/hoster/JumbofilesCom.py
diff --git a/module/plugins/hoster/LetitbitNet.py b/pyload/plugins/hoster/LetitbitNet.py
index c63272f27..c63272f27 100644
--- a/module/plugins/hoster/LetitbitNet.py
+++ b/pyload/plugins/hoster/LetitbitNet.py
diff --git a/module/plugins/hoster/LoadTo.py b/pyload/plugins/hoster/LoadTo.py
index babf354a9..babf354a9 100644
--- a/module/plugins/hoster/LoadTo.py
+++ b/pyload/plugins/hoster/LoadTo.py
diff --git a/module/plugins/hoster/LuckyShareNet.py b/pyload/plugins/hoster/LuckyShareNet.py
index a1e866089..cb29d044f 100644
--- a/module/plugins/hoster/LuckyShareNet.py
+++ b/pyload/plugins/hoster/LuckyShareNet.py
@@ -1,72 +1,72 @@
-# -*- coding: utf-8 -*-
-
-import re
-from module.lib.bottle import json_loads
-
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.plugins.ReCaptcha import ReCaptcha
-
-
-class LuckyShareNet(SimpleHoster):
- __name__ = "LuckyShareNet"
- __type__ = "hoster"
- __pattern__ = r"https?://(www\.)?luckyshare.net/(?P<ID>\d{10,})"
- __version__ = "0.02"
- __description__ = """LuckyShare.net Download Hoster"""
- __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>"
- FILE_OFFLINE_PATTERN = '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.search(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.setWait(int(json['time']))
- self.wait()
-
- recaptcha = ReCaptcha(self)
- for i 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)
+# -*- coding: utf-8 -*-
+
+import re
+from module.lib.bottle import json_loads
+
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.ReCaptcha import ReCaptcha
+
+
+class LuckyShareNet(SimpleHoster):
+ __name__ = "LuckyShareNet"
+ __type__ = "hoster"
+ __pattern__ = r"https?://(www\.)?luckyshare.net/(?P<ID>\d{10,})"
+ __version__ = "0.02"
+ __description__ = """LuckyShare.net Download Hoster"""
+ __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>"
+ FILE_OFFLINE_PATTERN = '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.search(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.setWait(int(json['time']))
+ self.wait()
+
+ recaptcha = ReCaptcha(self)
+ for i 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/pyload/plugins/hoster/MediafireCom.py
index 1e856c41d..1e856c41d 100644
--- a/module/plugins/hoster/MediafireCom.py
+++ b/pyload/plugins/hoster/MediafireCom.py
diff --git a/module/plugins/hoster/MegaNz.py b/pyload/plugins/hoster/MegaNz.py
index e5be4eeb7..e5be4eeb7 100644
--- a/module/plugins/hoster/MegaNz.py
+++ b/pyload/plugins/hoster/MegaNz.py
diff --git a/module/plugins/hoster/MegasharesCom.py b/pyload/plugins/hoster/MegasharesCom.py
index 3fac633bc..3fac633bc 100644
--- a/module/plugins/hoster/MegasharesCom.py
+++ b/pyload/plugins/hoster/MegasharesCom.py
diff --git a/module/plugins/hoster/MovReelCom.py b/pyload/plugins/hoster/MovReelCom.py
index 6f5f1d3f1..6f5f1d3f1 100644
--- a/module/plugins/hoster/MovReelCom.py
+++ b/pyload/plugins/hoster/MovReelCom.py
diff --git a/module/plugins/hoster/MultiDebridCom.py b/pyload/plugins/hoster/MultiDebridCom.py
index ca98e8a0e..ca98e8a0e 100644
--- a/module/plugins/hoster/MultiDebridCom.py
+++ b/pyload/plugins/hoster/MultiDebridCom.py
diff --git a/module/plugins/hoster/MultishareCz.py b/pyload/plugins/hoster/MultishareCz.py
index af7aa94cf..af7aa94cf 100644
--- a/module/plugins/hoster/MultishareCz.py
+++ b/pyload/plugins/hoster/MultishareCz.py
diff --git a/module/plugins/hoster/MyvideoDe.py b/pyload/plugins/hoster/MyvideoDe.py
index f2d2082a7..f2d2082a7 100644
--- a/module/plugins/hoster/MyvideoDe.py
+++ b/pyload/plugins/hoster/MyvideoDe.py
diff --git a/module/plugins/hoster/NarodRu.py b/pyload/plugins/hoster/NarodRu.py
index 335860de9..335860de9 100644
--- a/module/plugins/hoster/NarodRu.py
+++ b/pyload/plugins/hoster/NarodRu.py
diff --git a/module/plugins/hoster/NetloadIn.py b/pyload/plugins/hoster/NetloadIn.py
index 39338c88d..39338c88d 100644
--- a/module/plugins/hoster/NetloadIn.py
+++ b/pyload/plugins/hoster/NetloadIn.py
diff --git a/module/plugins/hoster/NovafileCom.py b/pyload/plugins/hoster/NovafileCom.py
index dfd18761c..dfd18761c 100644
--- a/module/plugins/hoster/NovafileCom.py
+++ b/pyload/plugins/hoster/NovafileCom.py
diff --git a/module/plugins/hoster/NowDownloadEu.py b/pyload/plugins/hoster/NowDownloadEu.py
index 126ca3d89..126ca3d89 100644
--- a/module/plugins/hoster/NowDownloadEu.py
+++ b/pyload/plugins/hoster/NowDownloadEu.py
diff --git a/module/plugins/hoster/OneFichierCom.py b/pyload/plugins/hoster/OneFichierCom.py
index c7c3384e9..c7c3384e9 100644
--- a/module/plugins/hoster/OneFichierCom.py
+++ b/pyload/plugins/hoster/OneFichierCom.py
diff --git a/module/plugins/hoster/PornhostCom.py b/pyload/plugins/hoster/PornhostCom.py
index a4124c4a4..ef7961d81 100644
--- a/module/plugins/hoster/PornhostCom.py
+++ b/pyload/plugins/hoster/PornhostCom.py
@@ -1,76 +1,76 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Hoster import Hoster
-
-class PornhostCom(Hoster):
- __name__ = "PornhostCom"
- __type__ = "hoster"
- __pattern__ = r'http://[\w\.]*?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)'
- __version__ = "0.2"
- __description__ = """Pornhost.com Download Hoster"""
- __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 self.html is None:
- self.download_html()
-
- file_url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html)
- if not file_url:
- file_url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html)
- if not file_url:
- file_url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html)
- if not file_url:
- file_url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"', self.html) # TODO: fix this one since it doesn't match
-
- file_url = file_url.group(1).strip()
-
- return file_url
-
- def get_file_name(self):
- if self.html is None:
- self.download_html()
-
- name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html)
- if not name:
- name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html)
- if not name:
- name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html)
- if not name:
- 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 self.html is None:
- 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
-
-
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+from module.plugins.Hoster import Hoster
+
+class PornhostCom(Hoster):
+ __name__ = "PornhostCom"
+ __type__ = "hoster"
+ __pattern__ = r'http://[\w\.]*?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)'
+ __version__ = "0.2"
+ __description__ = """Pornhost.com Download Hoster"""
+ __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 self.html is None:
+ self.download_html()
+
+ file_url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html)
+ if not file_url:
+ file_url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html)
+ if not file_url:
+ file_url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html)
+ if not file_url:
+ file_url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"', self.html) # TODO: fix this one since it doesn't match
+
+ file_url = file_url.group(1).strip()
+
+ return file_url
+
+ def get_file_name(self):
+ if self.html is None:
+ self.download_html()
+
+ name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html)
+ if not name:
+ name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html)
+ if not name:
+ name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html)
+ if not name:
+ 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 self.html is None:
+ 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/pyload/plugins/hoster/PornhubCom.py
index e1ed612b9..c431004d8 100644
--- a/module/plugins/hoster/PornhubCom.py
+++ b/pyload/plugins/hoster/PornhubCom.py
@@ -1,83 +1,83 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Hoster import Hoster
-
-class PornhubCom(Hoster):
- __name__ = "PornhubCom"
- __type__ = "hoster"
- __pattern__ = r'http://[\w\.]*?pornhub\.com/view_video\.php\?viewkey=[\w\d]+'
- __version__ = "0.5"
- __description__ = """Pornhub.com Download Hoster"""
- __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 self.html is None:
- 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
-
- file_url = re.search(r'flv_url.*(http.*?)##post_roll', content).group(1)
-
- return file_url
-
- def get_file_name(self):
- if self.html is None:
- self.download_html()
-
- match = re.search(r'<title[^>]+>([^<]+) - ', self.html)
- if match:
- name = match.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 self.html is None:
- 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
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+from module.plugins.Hoster import Hoster
+
+class PornhubCom(Hoster):
+ __name__ = "PornhubCom"
+ __type__ = "hoster"
+ __pattern__ = r'http://[\w\.]*?pornhub\.com/view_video\.php\?viewkey=[\w\d]+'
+ __version__ = "0.5"
+ __description__ = """Pornhub.com Download Hoster"""
+ __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 self.html is None:
+ 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
+
+ file_url = re.search(r'flv_url.*(http.*?)##post_roll', content).group(1)
+
+ return file_url
+
+ def get_file_name(self):
+ if self.html is None:
+ self.download_html()
+
+ match = re.search(r'<title[^>]+>([^<]+) - ', self.html)
+ if match:
+ name = match.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 self.html is None:
+ 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/Premium4Me.py b/pyload/plugins/hoster/Premium4Me.py
index 5dd907b9f..c93084d5d 100644
--- a/module/plugins/hoster/Premium4Me.py
+++ b/pyload/plugins/hoster/Premium4Me.py
@@ -1,70 +1,70 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from urllib import quote
-from os.path import exists
-from os import remove
-
-from module.plugins.Hoster import Hoster
-from module.utils import fs_encode
-
-
-class Premium4Me(Hoster):
- __name__ = "Premium4Me"
- __version__ = "0.05"
- __type__ = "hoster"
-
- __pattern__ = r"http://premium4.me/.*"
- __description__ = """premium4.me 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 premium4.me account or deactivate this plugin"))
- self.fail("No premium4.me account provided")
-
- self.logDebug("premium4.me: Old URL: %s" % pyfile.url)
-
- tra = self.getTraffic()
-
- #raise timeout to 2min
- self.req.setOption("timeout", 120)
-
- self.download(
- "http://premium4.me/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(3, 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://premium4.me/api/traffic.php?authcode=%s" % self.account.authcode))
- except:
- traffic = 0
- return traffic
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from urllib import quote
+from os.path import exists
+from os import remove
+
+from module.plugins.Hoster import Hoster
+from module.utils import fs_encode
+
+
+class Premium4Me(Hoster):
+ __name__ = "Premium4Me"
+ __version__ = "0.05"
+ __type__ = "hoster"
+
+ __pattern__ = r"http://premium4.me/.*"
+ __description__ = """premium4.me 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 premium4.me account or deactivate this plugin"))
+ self.fail("No premium4.me account provided")
+
+ self.logDebug("premium4.me: Old URL: %s" % pyfile.url)
+
+ tra = self.getTraffic()
+
+ #raise timeout to 2min
+ self.req.setOption("timeout", 120)
+
+ self.download(
+ "http://premium4.me/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(3, 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://premium4.me/api/traffic.php?authcode=%s" % self.account.authcode))
+ except:
+ traffic = 0
+ return traffic
diff --git a/module/plugins/hoster/PremiumizeMe.py b/pyload/plugins/hoster/PremiumizeMe.py
index 4ae59d198..e72ade08f 100644
--- a/module/plugins/hoster/PremiumizeMe.py
+++ b/pyload/plugins/hoster/PremiumizeMe.py
@@ -1,50 +1,50 @@
-from module.plugins.Hoster import Hoster
-
-from module.common.json_layer import json_loads
-
-class PremiumizeMe(Hoster):
- __name__ = "PremiumizeMe"
- __version__ = "0.11"
- __type__ = "hoster"
- __description__ = """Premiumize.Me hoster plugin"""
-
- # Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady create the regex patterns for us using getHosters in our PremiumizeMe hook.
- __pattern__ = None
-
- __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 a valid premiumize.me account or deactivate this plugin"))
- 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)
- self.pyfile.name = self.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 = self.pyfile.name.split('.')
- if temp.pop() in suffix_to_remove:
- self.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'], self.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'])
+from module.plugins.Hoster import Hoster
+
+from module.common.json_layer import json_loads
+
+class PremiumizeMe(Hoster):
+ __name__ = "PremiumizeMe"
+ __version__ = "0.11"
+ __type__ = "hoster"
+ __description__ = """Premiumize.Me hoster plugin"""
+
+ # Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady create the regex patterns for us using getHosters in our PremiumizeMe hook.
+ __pattern__ = None
+
+ __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 a valid premiumize.me account or deactivate this plugin"))
+ 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)
+ self.pyfile.name = self.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 = self.pyfile.name.split('.')
+ if temp.pop() in suffix_to_remove:
+ self.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'], self.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/PutlockerCom.py b/pyload/plugins/hoster/PutlockerCom.py
index b2016472d..b2016472d 100644
--- a/module/plugins/hoster/PutlockerCom.py
+++ b/pyload/plugins/hoster/PutlockerCom.py
diff --git a/module/plugins/hoster/QuickshareCz.py b/pyload/plugins/hoster/QuickshareCz.py
index 4932c4702..4932c4702 100644
--- a/module/plugins/hoster/QuickshareCz.py
+++ b/pyload/plugins/hoster/QuickshareCz.py
diff --git a/module/plugins/hoster/RapidgatorNet.py b/pyload/plugins/hoster/RapidgatorNet.py
index d2ca77e0f..d2ca77e0f 100644
--- a/module/plugins/hoster/RapidgatorNet.py
+++ b/pyload/plugins/hoster/RapidgatorNet.py
diff --git a/module/plugins/hoster/RapidshareCom.py b/pyload/plugins/hoster/RapidshareCom.py
index 6aacd684e..6aacd684e 100644
--- a/module/plugins/hoster/RapidshareCom.py
+++ b/pyload/plugins/hoster/RapidshareCom.py
diff --git a/module/plugins/hoster/RarefileNet.py b/pyload/plugins/hoster/RarefileNet.py
index a0f5930b5..a0f5930b5 100644
--- a/module/plugins/hoster/RarefileNet.py
+++ b/pyload/plugins/hoster/RarefileNet.py
diff --git a/module/plugins/hoster/RealdebridCom.py b/pyload/plugins/hoster/RealdebridCom.py
index 3c796232e..3c796232e 100644
--- a/module/plugins/hoster/RealdebridCom.py
+++ b/pyload/plugins/hoster/RealdebridCom.py
diff --git a/module/plugins/hoster/RedtubeCom.py b/pyload/plugins/hoster/RedtubeCom.py
index 9ffafd905..c2083e679 100644
--- a/module/plugins/hoster/RedtubeCom.py
+++ b/pyload/plugins/hoster/RedtubeCom.py
@@ -1,56 +1,56 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-from module.plugins.Hoster import Hoster
-from module.unescape import unescape
-
-class RedtubeCom(Hoster):
- __name__ = "RedtubeCom"
- __type__ = "hoster"
- __pattern__ = r'http://[\w\.]*?redtube\.com/\d+'
- __version__ = "0.2"
- __description__ = """Redtube.com Download Hoster"""
- __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 self.html is None:
- self.download_html()
-
- file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1))
-
- return file_url
-
- def get_file_name(self):
- if self.html is None:
- self.download_html()
-
- name = re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv"
- return name
-
- def file_exists(self):
- """ returns True or False
- """
- if self.html is None:
- self.download_html()
-
- if re.search(r'This video has been removed.', self.html) is not None:
- return False
- else:
- return True
-
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+from module.plugins.Hoster import Hoster
+from module.unescape import unescape
+
+class RedtubeCom(Hoster):
+ __name__ = "RedtubeCom"
+ __type__ = "hoster"
+ __pattern__ = r'http://[\w\.]*?redtube\.com/\d+'
+ __version__ = "0.2"
+ __description__ = """Redtube.com Download Hoster"""
+ __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 self.html is None:
+ self.download_html()
+
+ file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1))
+
+ return file_url
+
+ def get_file_name(self):
+ if self.html is None:
+ self.download_html()
+
+ name = re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv"
+ return name
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if self.html is None:
+ 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/pyload/plugins/hoster/RehostTo.py
index 141dcb8c8..141dcb8c8 100644
--- a/module/plugins/hoster/RehostTo.py
+++ b/pyload/plugins/hoster/RehostTo.py
diff --git a/module/plugins/hoster/ReloadCc.py b/pyload/plugins/hoster/ReloadCc.py
index 7dc6d9bb6..7dc6d9bb6 100644
--- a/module/plugins/hoster/ReloadCc.py
+++ b/pyload/plugins/hoster/ReloadCc.py
diff --git a/module/plugins/hoster/RyushareCom.py b/pyload/plugins/hoster/RyushareCom.py
index 7bfe4e8fe..7bfe4e8fe 100644
--- a/module/plugins/hoster/RyushareCom.py
+++ b/pyload/plugins/hoster/RyushareCom.py
diff --git a/module/plugins/hoster/SecureUploadEu.py b/pyload/plugins/hoster/SecureUploadEu.py
index b9a900d96..b9a900d96 100644
--- a/module/plugins/hoster/SecureUploadEu.py
+++ b/pyload/plugins/hoster/SecureUploadEu.py
diff --git a/module/plugins/hoster/SendmywayCom.py b/pyload/plugins/hoster/SendmywayCom.py
index fcbac850a..fcbac850a 100644
--- a/module/plugins/hoster/SendmywayCom.py
+++ b/pyload/plugins/hoster/SendmywayCom.py
diff --git a/module/plugins/hoster/SendspaceCom.py b/pyload/plugins/hoster/SendspaceCom.py
index 22abaff56..22abaff56 100644
--- a/module/plugins/hoster/SendspaceCom.py
+++ b/pyload/plugins/hoster/SendspaceCom.py
diff --git a/module/plugins/hoster/Share4webCom.py b/pyload/plugins/hoster/Share4webCom.py
index ef9c2acf8..ef9c2acf8 100644
--- a/module/plugins/hoster/Share4webCom.py
+++ b/pyload/plugins/hoster/Share4webCom.py
diff --git a/module/plugins/hoster/Share76Com.py b/pyload/plugins/hoster/Share76Com.py
index db850cb73..db850cb73 100644
--- a/module/plugins/hoster/Share76Com.py
+++ b/pyload/plugins/hoster/Share76Com.py
diff --git a/module/plugins/hoster/ShareFilesCo.py b/pyload/plugins/hoster/ShareFilesCo.py
index ee44b0a1f..ee44b0a1f 100644
--- a/module/plugins/hoster/ShareFilesCo.py
+++ b/pyload/plugins/hoster/ShareFilesCo.py
diff --git a/module/plugins/hoster/ShareRapidCom.py b/pyload/plugins/hoster/ShareRapidCom.py
index 5a08fed1f..5a08fed1f 100644
--- a/module/plugins/hoster/ShareRapidCom.py
+++ b/pyload/plugins/hoster/ShareRapidCom.py
diff --git a/module/plugins/hoster/SharebeesCom.py b/pyload/plugins/hoster/SharebeesCom.py
index f5bacc5b0..f5bacc5b0 100644
--- a/module/plugins/hoster/SharebeesCom.py
+++ b/pyload/plugins/hoster/SharebeesCom.py
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/pyload/plugins/hoster/ShareonlineBiz.py
index e1867168b..e1867168b 100644
--- a/module/plugins/hoster/ShareonlineBiz.py
+++ b/pyload/plugins/hoster/ShareonlineBiz.py
diff --git a/module/plugins/hoster/ShareplaceCom.py b/pyload/plugins/hoster/ShareplaceCom.py
index 7f0dee0e5..1d4441925 100644
--- a/module/plugins/hoster/ShareplaceCom.py
+++ b/pyload/plugins/hoster/ShareplaceCom.py
@@ -1,84 +1,84 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-import urllib
-from module.plugins.Hoster import Hoster
-
-class ShareplaceCom(Hoster):
- __name__ = "ShareplaceCom"
- __type__ = "hoster"
- __pattern__ = r"(http://)?(www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+"
- __version__ = "0.1"
- __description__ = """Shareplace.com Download Hoster"""
- __author_name__ = ("ACCakut, based on YourfilesTo by jeix and skydancer")
- __author_mail__ = ("none")
-
- def setup(self):
- self.html = None
- self.multiDL = True
-
- 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.log.debug("%s: Waiting %d seconds." % (self.__name__,wait_time))
- self.wait()
-
- def get_waiting_time(self):
- if self.html is None:
- 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 = urllib.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 self.html is None:
- self.download_html()
-
- return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1)
-
- def file_exists(self):
- """ returns True or False
- """
- if self.html is None:
- self.download_html()
-
- if re.search(r"HTTP Status 404", self.html) is not None:
- return False
- else:
- return True
-
-
-
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+import urllib
+from module.plugins.Hoster import Hoster
+
+class ShareplaceCom(Hoster):
+ __name__ = "ShareplaceCom"
+ __type__ = "hoster"
+ __pattern__ = r"(http://)?(www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+"
+ __version__ = "0.1"
+ __description__ = """Shareplace.com Download Hoster"""
+ __author_name__ = ("ACCakut, based on YourfilesTo by jeix and skydancer")
+ __author_mail__ = ("none")
+
+ def setup(self):
+ self.html = None
+ self.multiDL = True
+
+ 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.log.debug("%s: Waiting %d seconds." % (self.__name__,wait_time))
+ self.wait()
+
+ def get_waiting_time(self):
+ if self.html is None:
+ 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 = urllib.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 self.html is None:
+ self.download_html()
+
+ return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1)
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if self.html is None:
+ 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/pyload/plugins/hoster/ShragleCom.py
index 99f9f2366..99f9f2366 100644
--- a/module/plugins/hoster/ShragleCom.py
+++ b/pyload/plugins/hoster/ShragleCom.py
diff --git a/module/plugins/hoster/SpeedLoadOrg.py b/pyload/plugins/hoster/SpeedLoadOrg.py
index 32e7baf13..32e7baf13 100644
--- a/module/plugins/hoster/SpeedLoadOrg.py
+++ b/pyload/plugins/hoster/SpeedLoadOrg.py
diff --git a/module/plugins/hoster/SpeedfileCz.py b/pyload/plugins/hoster/SpeedfileCz.py
index bfd316dfa..bfd316dfa 100644
--- a/module/plugins/hoster/SpeedfileCz.py
+++ b/pyload/plugins/hoster/SpeedfileCz.py
diff --git a/module/plugins/hoster/StreamCz.py b/pyload/plugins/hoster/StreamCz.py
index ca1033502..ca1033502 100644
--- a/module/plugins/hoster/StreamCz.py
+++ b/pyload/plugins/hoster/StreamCz.py
diff --git a/module/plugins/hoster/TurbobitNet.py b/pyload/plugins/hoster/TurbobitNet.py
index b429d5510..b429d5510 100644
--- a/module/plugins/hoster/TurbobitNet.py
+++ b/pyload/plugins/hoster/TurbobitNet.py
diff --git a/module/plugins/hoster/TurbouploadCom.py b/pyload/plugins/hoster/TurbouploadCom.py
index 6e81c6319..6e81c6319 100644
--- a/module/plugins/hoster/TurbouploadCom.py
+++ b/pyload/plugins/hoster/TurbouploadCom.py
diff --git a/module/plugins/hoster/TusfilesNet.py b/pyload/plugins/hoster/TusfilesNet.py
index 517df8561..517df8561 100644
--- a/module/plugins/hoster/TusfilesNet.py
+++ b/pyload/plugins/hoster/TusfilesNet.py
diff --git a/module/plugins/hoster/TwoSharedCom.py b/pyload/plugins/hoster/TwoSharedCom.py
index 8401e0cb0..8401e0cb0 100644
--- a/module/plugins/hoster/TwoSharedCom.py
+++ b/pyload/plugins/hoster/TwoSharedCom.py
diff --git a/module/plugins/hoster/UlozTo.py b/pyload/plugins/hoster/UlozTo.py
index 5c38fdaad..5c38fdaad 100644
--- a/module/plugins/hoster/UlozTo.py
+++ b/pyload/plugins/hoster/UlozTo.py
diff --git a/module/plugins/hoster/UloziskoSk.py b/pyload/plugins/hoster/UloziskoSk.py
index c607e7a5b..c607e7a5b 100644
--- a/module/plugins/hoster/UloziskoSk.py
+++ b/pyload/plugins/hoster/UloziskoSk.py
diff --git a/module/plugins/hoster/UnibytesCom.py b/pyload/plugins/hoster/UnibytesCom.py
index 3c8552271..3c8552271 100644
--- a/module/plugins/hoster/UnibytesCom.py
+++ b/pyload/plugins/hoster/UnibytesCom.py
diff --git a/module/plugins/hoster/UploadStationCom.py b/pyload/plugins/hoster/UploadStationCom.py
index d24682e4d..96dc7b577 100644
--- a/module/plugins/hoster/UploadStationCom.py
+++ b/pyload/plugins/hoster/UploadStationCom.py
@@ -1,21 +1,21 @@
-# -*- coding: utf-8 -*-
-from module.plugins.hoster.FileserveCom import FileserveCom, checkFile
-from module.plugins.Plugin import chunks
-
-class UploadStationCom(FileserveCom):
- __name__ = "UploadStationCom"
- __type__ = "hoster"
- __pattern__ = r"http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)"
- __version__ = "0.51"
- __description__ = """UploadStation.Com File Download Hoster"""
- __author_name__ = ("fragonib", "zoidberg")
- __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz")
-
- URLS = ['http://www.uploadstation.com/file/', 'http://www.uploadstation.com/check-links.php', 'http://www.uploadstation.com/checkReCaptcha.php']
- LINKCHECK_TR = r'<div class="details (?:white|grey)">(.*?)\t{9}</div>'
- LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>|&nbsp;)*([^<]*)'
-
- LONG_WAIT_PATTERN = r'<h1>You have to wait (\d+) (\w+) to download the next file\.</h1>'
-
-def getInfo(urls):
+# -*- coding: utf-8 -*-
+from module.plugins.hoster.FileserveCom import FileserveCom, checkFile
+from module.plugins.Plugin import chunks
+
+class UploadStationCom(FileserveCom):
+ __name__ = "UploadStationCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)"
+ __version__ = "0.51"
+ __description__ = """UploadStation.Com File Download Hoster"""
+ __author_name__ = ("fragonib", "zoidberg")
+ __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz")
+
+ URLS = ['http://www.uploadstation.com/file/', 'http://www.uploadstation.com/check-links.php', 'http://www.uploadstation.com/checkReCaptcha.php']
+ LINKCHECK_TR = r'<div class="details (?:white|grey)">(.*?)\t{9}</div>'
+ LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>|&nbsp;)*([^<]*)'
+
+ LONG_WAIT_PATTERN = r'<h1>You have to wait (\d+) (\w+) to download the next file\.</h1>'
+
+def getInfo(urls):
for chunk in chunks(urls, 100): yield checkFile(UploadStationCom, chunk) \ No newline at end of file
diff --git a/module/plugins/hoster/UploadedTo.py b/pyload/plugins/hoster/UploadedTo.py
index 5aa08891e..5aa08891e 100644
--- a/module/plugins/hoster/UploadedTo.py
+++ b/pyload/plugins/hoster/UploadedTo.py
diff --git a/module/plugins/hoster/UploadheroCom.py b/pyload/plugins/hoster/UploadheroCom.py
index 502f849af..502f849af 100644
--- a/module/plugins/hoster/UploadheroCom.py
+++ b/pyload/plugins/hoster/UploadheroCom.py
diff --git a/module/plugins/hoster/UploadingCom.py b/pyload/plugins/hoster/UploadingCom.py
index 4a157a787..84040eb4d 100644
--- a/module/plugins/hoster/UploadingCom.py
+++ b/pyload/plugins/hoster/UploadingCom.py
@@ -1,110 +1,110 @@
-#!/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: jeix
-"""
-
-import re
-from pycurl import HTTPHEADER
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
-from module.common.json_layer import json_loads
-
-class UploadingCom(SimpleHoster):
- __name__ = "UploadingCom"
- __type__ = "hoster"
- __pattern__ = r"http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)"
- __version__ = "0.32"
- __description__ = """Uploading.Com File Download Hoster"""
- __author_name__ = ("jeix", "mkaay", "zoidberg")
- __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
-
- FILE_NAME_PATTERN = r'<title>Download (?P<N>.*?) for free on uploading.com</title>'
- FILE_SIZE_PATTERN = r'<span>File size: (?P<S>.*?)</span>'
- FILE_OFFLINE_PATTERN = r'<h2.*?>The requested file is not found</h2>'
-
- 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 self.pyfile.url:
- self.pyfile.url = self.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):
- found = re.search('<h2>((Daily )?Download Limit)</h2>', self.html)
- if found:
- self.pyfile.error = found.group(1)
- self.logWarning(self.pyfile.error)
- self.retry(max_tries=6, wait_time = 21600 if found.group(2) else 900, 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.log.info("%s: Waiting %d seconds." % (self.__name__, wait_time))
- self.setWait(wait_time)
- self.wait()
- else:
- self.pluginParseError("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.pluginParseError("AJAX/URL")
-
- self.html = self.load(url)
- found = re.search(r'<form id="file_form" action="(.*?)"', self.html)
- if found:
- url = found.group(1)
- else:
- self.pluginParseError("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.setWait(600, True)
- self.wait()
-
+#!/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: jeix
+"""
+
+import re
+from pycurl import HTTPHEADER
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+from module.common.json_layer import json_loads
+
+class UploadingCom(SimpleHoster):
+ __name__ = "UploadingCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)"
+ __version__ = "0.32"
+ __description__ = """Uploading.Com File Download Hoster"""
+ __author_name__ = ("jeix", "mkaay", "zoidberg")
+ __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz")
+
+ FILE_NAME_PATTERN = r'<title>Download (?P<N>.*?) for free on uploading.com</title>'
+ FILE_SIZE_PATTERN = r'<span>File size: (?P<S>.*?)</span>'
+ FILE_OFFLINE_PATTERN = r'<h2.*?>The requested file is not found</h2>'
+
+ 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 self.pyfile.url:
+ self.pyfile.url = self.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):
+ found = re.search('<h2>((Daily )?Download Limit)</h2>', self.html)
+ if found:
+ self.pyfile.error = found.group(1)
+ self.logWarning(self.pyfile.error)
+ self.retry(max_tries=6, wait_time = 21600 if found.group(2) else 900, 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.log.info("%s: Waiting %d seconds." % (self.__name__, wait_time))
+ self.setWait(wait_time)
+ self.wait()
+ else:
+ self.pluginParseError("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.pluginParseError("AJAX/URL")
+
+ self.html = self.load(url)
+ found = re.search(r'<form id="file_form" action="(.*?)"', self.html)
+ if found:
+ url = found.group(1)
+ else:
+ self.pluginParseError("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.setWait(600, True)
+ self.wait()
+
getInfo = create_getInfo(UploadingCom) \ No newline at end of file
diff --git a/module/plugins/hoster/UptoboxCom.py b/pyload/plugins/hoster/UptoboxCom.py
index 60a93c1e5..60a93c1e5 100644
--- a/module/plugins/hoster/UptoboxCom.py
+++ b/pyload/plugins/hoster/UptoboxCom.py
diff --git a/module/plugins/hoster/VeehdCom.py b/pyload/plugins/hoster/VeehdCom.py
index 23048b831..23048b831 100644
--- a/module/plugins/hoster/VeehdCom.py
+++ b/pyload/plugins/hoster/VeehdCom.py
diff --git a/module/plugins/hoster/WarserverCz.py b/pyload/plugins/hoster/WarserverCz.py
index b256f8d1b..b256f8d1b 100644
--- a/module/plugins/hoster/WarserverCz.py
+++ b/pyload/plugins/hoster/WarserverCz.py
diff --git a/module/plugins/hoster/WebshareCz.py b/pyload/plugins/hoster/WebshareCz.py
index 195e65a93..195e65a93 100644
--- a/module/plugins/hoster/WebshareCz.py
+++ b/pyload/plugins/hoster/WebshareCz.py
diff --git a/module/plugins/hoster/WrzucTo.py b/pyload/plugins/hoster/WrzucTo.py
index 4a5e89f22..4a5e89f22 100644
--- a/module/plugins/hoster/WrzucTo.py
+++ b/pyload/plugins/hoster/WrzucTo.py
diff --git a/module/plugins/hoster/WuploadCom.py b/pyload/plugins/hoster/WuploadCom.py
index 1a0eb442b..1a0eb442b 100644
--- a/module/plugins/hoster/WuploadCom.py
+++ b/pyload/plugins/hoster/WuploadCom.py
diff --git a/module/plugins/hoster/X7To.py b/pyload/plugins/hoster/X7To.py
index 79adf2a3f..965d84543 100644
--- a/module/plugins/hoster/X7To.py
+++ b/pyload/plugins/hoster/X7To.py
@@ -1,93 +1,93 @@
-# -*- coding: utf-8 -*-
-import re
-
-from module.plugins.Hoster import Hoster
-
-from module.network.RequestFactory import getURL
-
-def getInfo(urls):
- yield [(url, 0, 1, url) for url in urls]
-
-
-class X7To(Hoster):
- __name__ = "X7To"
- __type__ = "hoster"
- __pattern__ = r"http://(?:www.)?x7.to/"
- __version__ = "0.3"
- __description__ = """X7.To File Download Hoster"""
- __author_name__ = ("ernieb")
- __author_mail__ = ("ernieb")
-
- FILE_INFO_PATTERN=r'<meta name="description" content="Download: (.*?) \(([0-9,.]+) (KB|MB|GB)\)'
-
- def init(self):
- if self.premium:
- self.multiDL = False
- self.resumeDownload = False
- self.chunkLimit = 1
- else:
- self.multiDL = False
-
- self.file_id = re.search(r"http://x7.to/([a-zA-Z0-9]+)", self.pyfile.url).group(1)
- self.logDebug("file id is %s" % self.file_id)
- self.pyfile.url = "http://x7.to/" + self.file_id
-
- def process(self, pyfile):
- self.fail("Hoster not longer available")
-
- def handlePremium(self):
- # check if over limit first
- overLimit = re.search(r'<a onClick="cUser.buyTraffic\(\)" id="DL">', self.html)
- if overLimit:
- self.logDebug("over limit, falling back to free")
- self.handleFree()
- else:
- realurl = re.search(r'<a href="(http://stor.*?)" id="DL">', self.html)
- if realurl:
- realurl = realurl.group(1)
- self.logDebug("premium url found %s" % realurl)
- else:
- self.logDebug("premium link not found")
- self.download(realurl)
-
- def handleFree(self):
- # find file id
- file_id = re.search(r"var dlID = '(.*?)'", self.html)
- if not file_id:
- self.fail("Free download id not found")
-
- file_url = "http://x7.to/james/ticket/dl/" + file_id.group(1)
- self.logDebug("download id %s" % file_id.group(1))
-
- self.html = self.load(file_url, ref=False, decode=True)
-
- # deal with errors
- if "limit-dl" in self.html:
- self.logDebug("Limit reached ... waiting")
- self.setWait(900,True)
- self.wait()
- self.retry()
-
- if "limit-parallel" in self.html:
- self.fail("Cannot download in parallel")
-
- # no waiting required, go to download
- waitCheck = re.search(r"wait:(\d*),", self.html)
- if waitCheck:
- waitCheck = int(waitCheck.group(1))
- self.setWait(waitCheck)
- self.wait()
-
- urlCheck = re.search(r"url:'(.*?)'", self.html)
- url = None
- if urlCheck:
- url = urlCheck.group(1)
- self.logDebug("free url found %s" % url)
-
- if url:
- try:
- self.download(url)
- except:
- self.logDebug("downloading url failed: %s" % url)
- else:
- self.fail("Free download url found")
+# -*- coding: utf-8 -*-
+import re
+
+from module.plugins.Hoster import Hoster
+
+from module.network.RequestFactory import getURL
+
+def getInfo(urls):
+ yield [(url, 0, 1, url) for url in urls]
+
+
+class X7To(Hoster):
+ __name__ = "X7To"
+ __type__ = "hoster"
+ __pattern__ = r"http://(?:www.)?x7.to/"
+ __version__ = "0.3"
+ __description__ = """X7.To File Download Hoster"""
+ __author_name__ = ("ernieb")
+ __author_mail__ = ("ernieb")
+
+ FILE_INFO_PATTERN=r'<meta name="description" content="Download: (.*?) \(([0-9,.]+) (KB|MB|GB)\)'
+
+ def init(self):
+ if self.premium:
+ self.multiDL = False
+ self.resumeDownload = False
+ self.chunkLimit = 1
+ else:
+ self.multiDL = False
+
+ self.file_id = re.search(r"http://x7.to/([a-zA-Z0-9]+)", self.pyfile.url).group(1)
+ self.logDebug("file id is %s" % self.file_id)
+ self.pyfile.url = "http://x7.to/" + self.file_id
+
+ def process(self, pyfile):
+ self.fail("Hoster not longer available")
+
+ def handlePremium(self):
+ # check if over limit first
+ overLimit = re.search(r'<a onClick="cUser.buyTraffic\(\)" id="DL">', self.html)
+ if overLimit:
+ self.logDebug("over limit, falling back to free")
+ self.handleFree()
+ else:
+ realurl = re.search(r'<a href="(http://stor.*?)" id="DL">', self.html)
+ if realurl:
+ realurl = realurl.group(1)
+ self.logDebug("premium url found %s" % realurl)
+ else:
+ self.logDebug("premium link not found")
+ self.download(realurl)
+
+ def handleFree(self):
+ # find file id
+ file_id = re.search(r"var dlID = '(.*?)'", self.html)
+ if not file_id:
+ self.fail("Free download id not found")
+
+ file_url = "http://x7.to/james/ticket/dl/" + file_id.group(1)
+ self.logDebug("download id %s" % file_id.group(1))
+
+ self.html = self.load(file_url, ref=False, decode=True)
+
+ # deal with errors
+ if "limit-dl" in self.html:
+ self.logDebug("Limit reached ... waiting")
+ self.setWait(900,True)
+ self.wait()
+ self.retry()
+
+ if "limit-parallel" in self.html:
+ self.fail("Cannot download in parallel")
+
+ # no waiting required, go to download
+ waitCheck = re.search(r"wait:(\d*),", self.html)
+ if waitCheck:
+ waitCheck = int(waitCheck.group(1))
+ self.setWait(waitCheck)
+ self.wait()
+
+ urlCheck = re.search(r"url:'(.*?)'", self.html)
+ url = None
+ if urlCheck:
+ url = urlCheck.group(1)
+ self.logDebug("free url found %s" % url)
+
+ if url:
+ try:
+ self.download(url)
+ except:
+ self.logDebug("downloading url failed: %s" % url)
+ else:
+ self.fail("Free download url found")
diff --git a/module/plugins/hoster/XFileSharingPro.py b/pyload/plugins/hoster/XFileSharingPro.py
index 1120a2a8b..1120a2a8b 100644
--- a/module/plugins/hoster/XFileSharingPro.py
+++ b/pyload/plugins/hoster/XFileSharingPro.py
diff --git a/module/plugins/hoster/XHamsterCom.py b/pyload/plugins/hoster/XHamsterCom.py
index 0779a78e6..0779a78e6 100644
--- a/module/plugins/hoster/XHamsterCom.py
+++ b/pyload/plugins/hoster/XHamsterCom.py
diff --git a/module/plugins/hoster/XVideosCom.py b/pyload/plugins/hoster/XVideosCom.py
index b7f3f7b58..b7f3f7b58 100644
--- a/module/plugins/hoster/XVideosCom.py
+++ b/pyload/plugins/hoster/XVideosCom.py
diff --git a/module/plugins/hoster/Xdcc.py b/pyload/plugins/hoster/Xdcc.py
index 6f0a1b176..4870b8ab9 100644
--- a/module/plugins/hoster/Xdcc.py
+++ b/pyload/plugins/hoster/Xdcc.py
@@ -1,229 +1,229 @@
-# -*- 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
-"""
-
-from os.path import join
-from os.path import exists
-from os import makedirs
-import re
-import sys
-import time
-import socket, struct
-from select import select
-from module.utils import save_join
-
-from module.plugins.Hoster import Hoster
-
-
-class Xdcc(Hoster):
- __name__ = "Xdcc"
- __version__ = "0.3"
- __pattern__ = r'xdcc://.*?(/#?.*?)?/.*?/#?\d+/?' # xdcc://irc.Abjects.net/#channel/[XDCC]|Shit/#0004/
- __type__ = "hoster"
- __config__ = [
- ("nick", "str", "Nickname", "pyload"),
- ("ident", "str", "Ident", "pyloadident"),
- ("realname", "str", "Realname", "pyloadreal")
- ]
- __description__ = """A Plugin that allows you to download from an 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 i in range(0,3):
- try:
- nmn = self.doDownload(pyfile.url)
- self.log.debug("%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 in (10054,):
- self.log.debug("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
-
- download_folder = self.config['general']['download_folder']
- location = join(download_folder, self.pyfile.package().folder.decode(sys.getfilesystemencoding()))
- if not exists(location):
- makedirs(location)
-
- m = re.search(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url)
- server = m.group(1)
- chan = m.group(2)
- bot = m.group(3)
- pack = m.group(4)
- nick = self.getConf('nick')
- ident = self.getConf('ident')
- real = self.getConf('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.log.debug("XDCC: Sending CTCP VERSION.")
- sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
- elif msg["text"] == "\x01TIME\x01":
- self.log.debug("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
- filename = save_join(location, packname)
- self.log.info("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.log.info("%(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
-
+# -*- 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
+"""
+
+from os.path import join
+from os.path import exists
+from os import makedirs
+import re
+import sys
+import time
+import socket, struct
+from select import select
+from module.utils import save_join
+
+from module.plugins.Hoster import Hoster
+
+
+class Xdcc(Hoster):
+ __name__ = "Xdcc"
+ __version__ = "0.3"
+ __pattern__ = r'xdcc://.*?(/#?.*?)?/.*?/#?\d+/?' # xdcc://irc.Abjects.net/#channel/[XDCC]|Shit/#0004/
+ __type__ = "hoster"
+ __config__ = [
+ ("nick", "str", "Nickname", "pyload"),
+ ("ident", "str", "Ident", "pyloadident"),
+ ("realname", "str", "Realname", "pyloadreal")
+ ]
+ __description__ = """A Plugin that allows you to download from an 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 i in range(0,3):
+ try:
+ nmn = self.doDownload(pyfile.url)
+ self.log.debug("%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 in (10054,):
+ self.log.debug("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
+
+ download_folder = self.config['general']['download_folder']
+ location = join(download_folder, self.pyfile.package().folder.decode(sys.getfilesystemencoding()))
+ if not exists(location):
+ makedirs(location)
+
+ m = re.search(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url)
+ server = m.group(1)
+ chan = m.group(2)
+ bot = m.group(3)
+ pack = m.group(4)
+ nick = self.getConf('nick')
+ ident = self.getConf('ident')
+ real = self.getConf('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.log.debug("XDCC: Sending CTCP VERSION.")
+ sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface"))
+ elif msg["text"] == "\x01TIME\x01":
+ self.log.debug("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
+ filename = save_join(location, packname)
+ self.log.info("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.log.info("%(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/XvidstageCom.py b/pyload/plugins/hoster/XvidstageCom.py
index 4962c05af..4962c05af 100644
--- a/module/plugins/hoster/XvidstageCom.py
+++ b/pyload/plugins/hoster/XvidstageCom.py
diff --git a/module/plugins/hoster/YibaishiwuCom.py b/pyload/plugins/hoster/YibaishiwuCom.py
index 901225944..901225944 100644
--- a/module/plugins/hoster/YibaishiwuCom.py
+++ b/pyload/plugins/hoster/YibaishiwuCom.py
diff --git a/module/plugins/hoster/YoupornCom.py b/pyload/plugins/hoster/YoupornCom.py
index b17a4ef80..b17a4ef80 100644
--- a/module/plugins/hoster/YoupornCom.py
+++ b/pyload/plugins/hoster/YoupornCom.py
diff --git a/module/plugins/hoster/YourfilesTo.py b/pyload/plugins/hoster/YourfilesTo.py
index b67ccb68d..7a8f327ca 100644
--- a/module/plugins/hoster/YourfilesTo.py
+++ b/pyload/plugins/hoster/YourfilesTo.py
@@ -1,83 +1,83 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import re
-import urllib
-from module.plugins.Hoster import Hoster
-
-class YourfilesTo(Hoster):
- __name__ = "YourfilesTo"
- __type__ = "hoster"
- __pattern__ = r"(http://)?(www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+"
- __version__ = "0.2"
- __description__ = """Youfiles.to Download Hoster"""
- __author_name__ = ("jeix", "skydancer")
- __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de")
-
- def setup(self):
- self.html = None
- self.multiDL = True
-
- 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.log.debug("%s: Waiting %d seconds." % (self.__name__,wait_time))
- self.wait()
-
- def get_waiting_time(self):
- if self.html is None:
- 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 = urllib.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 self.html is None:
- self.download_html()
-
- return re.search("<title>(.*)</title>", self.html).group(1)
-
- def file_exists(self):
- """ returns True or False
- """
- if self.html is None:
- self.download_html()
-
- if re.search(r"HTTP Status 404", self.html) is not None:
- return False
- else:
- return True
-
-
-
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+import urllib
+from module.plugins.Hoster import Hoster
+
+class YourfilesTo(Hoster):
+ __name__ = "YourfilesTo"
+ __type__ = "hoster"
+ __pattern__ = r"(http://)?(www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+"
+ __version__ = "0.2"
+ __description__ = """Youfiles.to Download Hoster"""
+ __author_name__ = ("jeix", "skydancer")
+ __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de")
+
+ def setup(self):
+ self.html = None
+ self.multiDL = True
+
+ 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.log.debug("%s: Waiting %d seconds." % (self.__name__,wait_time))
+ self.wait()
+
+ def get_waiting_time(self):
+ if self.html is None:
+ 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 = urllib.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 self.html is None:
+ self.download_html()
+
+ return re.search("<title>(.*)</title>", self.html).group(1)
+
+ def file_exists(self):
+ """ returns True or False
+ """
+ if self.html is None:
+ 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/pyload/plugins/hoster/YoutubeCom.py
index 70db597cf..70db597cf 100644
--- a/module/plugins/hoster/YoutubeCom.py
+++ b/pyload/plugins/hoster/YoutubeCom.py
diff --git a/module/plugins/hoster/ZDF.py b/pyload/plugins/hoster/ZDF.py
index ea45f4fd8..ea45f4fd8 100644
--- a/module/plugins/hoster/ZDF.py
+++ b/pyload/plugins/hoster/ZDF.py
diff --git a/module/plugins/hoster/ZeveraCom.py b/pyload/plugins/hoster/ZeveraCom.py
index 8be725d2f..8be725d2f 100644
--- a/module/plugins/hoster/ZeveraCom.py
+++ b/pyload/plugins/hoster/ZeveraCom.py
diff --git a/module/plugins/hoster/ZippyshareCom.py b/pyload/plugins/hoster/ZippyshareCom.py
index 84974e7ba..84974e7ba 100644
--- a/module/plugins/hoster/ZippyshareCom.py
+++ b/pyload/plugins/hoster/ZippyshareCom.py
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 3cd635eff..3cd635eff 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 b912436a7..b912436a7 100644
--- a/module/plugins/internal/CaptchaService.py
+++ b/pyload/plugins/internal/CaptchaService.py
diff --git a/module/plugins/internal/DeadHoster.py b/pyload/plugins/internal/DeadHoster.py
index e180e2384..e180e2384 100644
--- a/module/plugins/internal/DeadHoster.py
+++ b/pyload/plugins/internal/DeadHoster.py
diff --git a/module/plugins/internal/NetloadInOCR.py b/pyload/plugins/internal/NetloadInOCR.py
index e50978701..e50978701 100644
--- a/module/plugins/internal/NetloadInOCR.py
+++ b/pyload/plugins/internal/NetloadInOCR.py
diff --git a/module/plugins/internal/OCR.py b/pyload/plugins/internal/OCR.py
index 9f8b7ef8c..9f8b7ef8c 100644
--- a/module/plugins/internal/OCR.py
+++ b/pyload/plugins/internal/OCR.py
diff --git a/module/plugins/internal/ShareonlineBizOCR.py b/pyload/plugins/internal/ShareonlineBizOCR.py
index c5c2e92e8..c5c2e92e8 100644
--- a/module/plugins/internal/ShareonlineBizOCR.py
+++ b/pyload/plugins/internal/ShareonlineBizOCR.py
diff --git a/module/plugins/internal/SimpleCrypter.py b/pyload/plugins/internal/SimpleCrypter.py
index d935bf1da..d935bf1da 100644
--- a/module/plugins/internal/SimpleCrypter.py
+++ b/pyload/plugins/internal/SimpleCrypter.py
diff --git a/module/plugins/internal/SimpleHoster.py b/pyload/plugins/internal/SimpleHoster.py
index 7b1d7323a..7b1d7323a 100644
--- a/module/plugins/internal/SimpleHoster.py
+++ b/pyload/plugins/internal/SimpleHoster.py
diff --git a/module/plugins/internal/UnRar.py b/pyload/plugins/internal/UnRar.py
index 7becd663c..7becd663c 100644
--- a/module/plugins/internal/UnRar.py
+++ b/pyload/plugins/internal/UnRar.py
diff --git a/module/plugins/internal/UnZip.py b/pyload/plugins/internal/UnZip.py
index 9aa9ac75c..9aa9ac75c 100644
--- a/module/plugins/internal/UnZip.py
+++ b/pyload/plugins/internal/UnZip.py
diff --git a/module/plugins/internal/XFSPAccount.py b/pyload/plugins/internal/XFSPAccount.py
index 8333c7265..8333c7265 100644
--- a/module/plugins/internal/XFSPAccount.py
+++ b/pyload/plugins/internal/XFSPAccount.py
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/module/remote/ClickAndLoadBackend.py b/pyload/remote/ClickAndLoadBackend.py
index ad8031587..ad8031587 100644
--- a/module/remote/ClickAndLoadBackend.py
+++ b/pyload/remote/ClickAndLoadBackend.py
diff --git a/module/remote/JSONClient.py b/pyload/remote/JSONClient.py
index a2c07a132..a2c07a132 100644
--- a/module/remote/JSONClient.py
+++ b/pyload/remote/JSONClient.py
diff --git a/module/remote/RemoteManager.py b/pyload/remote/RemoteManager.py
index dd567653b..7aeeb8a7a 100644
--- a/module/remote/RemoteManager.py
+++ b/pyload/remote/RemoteManager.py
@@ -71,7 +71,7 @@ class RemoteManager():
port = self.core.config["remote"]["port"]
for b in self.available:
- klass = getattr(__import__("module.remote.%s" % b, globals(), locals(), [b], -1), b)
+ klass = getattr(__import__("pyload.remote.%s" % b, globals(), locals(), [b], -1), b)
backend = klass(self)
if not backend.checkDeps():
continue
diff --git a/module/remote/WSClient.py b/pyload/remote/WSClient.py
index 793a6ef28..793a6ef28 100644
--- a/module/remote/WSClient.py
+++ b/pyload/remote/WSClient.py
diff --git a/module/remote/WebSocketBackend.py b/pyload/remote/WebSocketBackend.py
index 2d22664c6..d29470067 100644
--- a/module/remote/WebSocketBackend.py
+++ b/pyload/remote/WebSocketBackend.py
@@ -18,7 +18,7 @@
import logging
-from module.remote.RemoteManager import BackendBase
+from RemoteManager import BackendBase
from mod_pywebsocket import util
def get_class_logger(o=None):
diff --git a/module/remote/__init__.py b/pyload/remote/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/remote/__init__.py
+++ b/pyload/remote/__init__.py
diff --git a/module/remote/apitypes.py b/pyload/remote/apitypes.py
index 196491083..196491083 100644
--- a/module/remote/apitypes.py
+++ b/pyload/remote/apitypes.py
diff --git a/module/remote/apitypes_debug.py b/pyload/remote/apitypes_debug.py
index 96673cc99..96673cc99 100644
--- a/module/remote/apitypes_debug.py
+++ b/pyload/remote/apitypes_debug.py
diff --git a/module/remote/create_apitypes.py b/pyload/remote/create_apitypes.py
index d596f07ac..d596f07ac 100644
--- a/module/remote/create_apitypes.py
+++ b/pyload/remote/create_apitypes.py
diff --git a/module/remote/create_jstypes.py b/pyload/remote/create_jstypes.py
index 90afa4c96..90afa4c96 100644
--- a/module/remote/create_jstypes.py
+++ b/pyload/remote/create_jstypes.py
diff --git a/module/remote/json_converter.py b/pyload/remote/json_converter.py
index 50f0309bd..3e6c7f797 100644
--- a/module/remote/json_converter.py
+++ b/pyload/remote/json_converter.py
@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
try:
- from module.common.json_layer import json
+ from pyload.utils import json
except ImportError:
import json
diff --git a/module/remote/pyload.thrift b/pyload/remote/pyload.thrift
index 57d7e0a0a..57d7e0a0a 100644
--- a/module/remote/pyload.thrift
+++ b/pyload/remote/pyload.thrift
diff --git a/module/remote/ttypes.py b/pyload/remote/ttypes.py
index 1f91403d5..1f91403d5 100644
--- a/module/remote/ttypes.py
+++ b/pyload/remote/ttypes.py
diff --git a/module/remote/wsbackend/AbstractHandler.py b/pyload/remote/wsbackend/AbstractHandler.py
index 07cc79c74..8012d6cd8 100644
--- a/module/remote/wsbackend/AbstractHandler.py
+++ b/pyload/remote/wsbackend/AbstractHandler.py
@@ -18,7 +18,7 @@
from mod_pywebsocket.msgutil import send_message
from mod_pywebsocket.util import get_class_logger
-from module.remote.json_converter import loads, dumps
+from pyload.remote.json_converter import loads, dumps
class AbstractHandler:
@@ -60,7 +60,7 @@ class AbstractHandler:
def load_session(self, cookies):
from Cookie import SimpleCookie
from beaker.session import Session
- from module.web.webinterface import session
+ from pyload.web.webinterface import session
cookies = SimpleCookie(cookies)
sid = cookies.get(session.options['key'])
diff --git a/module/remote/wsbackend/ApiHandler.py b/pyload/remote/wsbackend/ApiHandler.py
index e985e10be..4685121d4 100644
--- a/module/remote/wsbackend/ApiHandler.py
+++ b/pyload/remote/wsbackend/ApiHandler.py
@@ -18,7 +18,7 @@
from mod_pywebsocket.msgutil import receive_message
-from module.Api import ExceptionObject
+from pyload.Api import ExceptionObject
from AbstractHandler import AbstractHandler
diff --git a/module/remote/wsbackend/AsyncHandler.py b/pyload/remote/wsbackend/AsyncHandler.py
index 158033ee8..88bd371b0 100644
--- a/module/remote/wsbackend/AsyncHandler.py
+++ b/pyload/remote/wsbackend/AsyncHandler.py
@@ -23,8 +23,8 @@ from time import time
from mod_pywebsocket.msgutil import receive_message
-from module.Api import EventInfo, Interaction
-from module.utils import lock
+from pyload.Api import EventInfo, Interaction
+from pyload.utils import lock
from AbstractHandler import AbstractHandler
class Mode:
diff --git a/module/remote/wsbackend/Dispatcher.py b/pyload/remote/wsbackend/Dispatcher.py
index 44cc7555e..44cc7555e 100644
--- a/module/remote/wsbackend/Dispatcher.py
+++ b/pyload/remote/wsbackend/Dispatcher.py
diff --git a/module/remote/wsbackend/Server.py b/pyload/remote/wsbackend/Server.py
index af5e1cf19..af5e1cf19 100644
--- a/module/remote/wsbackend/Server.py
+++ b/pyload/remote/wsbackend/Server.py
diff --git a/module/threads/__init__.py b/pyload/remote/wsbackend/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/threads/__init__.py
+++ b/pyload/remote/wsbackend/__init__.py
diff --git a/module/setup/System_Checks.py b/pyload/setup/System_Checks.py
index cef46956b..cef46956b 100644
--- a/module/setup/System_Checks.py
+++ b/pyload/setup/System_Checks.py
diff --git a/module/threads/AddonThread.py b/pyload/threads/AddonThread.py
index afb56f66b..afb56f66b 100644
--- a/module/threads/AddonThread.py
+++ b/pyload/threads/AddonThread.py
diff --git a/module/threads/BaseThread.py b/pyload/threads/BaseThread.py
index c64678a72..deaf03461 100644
--- a/module/threads/BaseThread.py
+++ b/pyload/threads/BaseThread.py
@@ -8,8 +8,8 @@ from types import MethodType
from pprint import pformat
from traceback import format_exc
-from module.utils import primary_uid
-from module.utils.fs import listdir, join, save_join, stat, exists
+from pyload.utils import primary_uid
+from pyload.utils.fs import listdir, join, save_join, stat, exists
class BaseThread(Thread):
"""abstract base class for thread types"""
diff --git a/module/threads/DecrypterThread.py b/pyload/threads/DecrypterThread.py
index 39448a620..77502569c 100644
--- a/module/threads/DecrypterThread.py
+++ b/pyload/threads/DecrypterThread.py
@@ -4,9 +4,9 @@
from time import sleep
from traceback import print_exc
-from module.utils import uniqify
-from module.plugins.Base import Retry
-from module.plugins.Crypter import Package
+from pyload.utils import uniqify
+from pyload.plugins.Base import Retry
+from pyload.plugins.Crypter import Package
from BaseThread import BaseThread
diff --git a/module/threads/DownloadThread.py b/pyload/threads/DownloadThread.py
index cf59c5639..b5a45185f 100644
--- a/module/threads/DownloadThread.py
+++ b/pyload/threads/DownloadThread.py
@@ -24,9 +24,9 @@ from traceback import print_exc
from sys import exc_clear
from pycurl import error
-from module.plugins.Base import Fail, Retry, Abort
-from module.plugins.Hoster import Reconnect, SkipDownload
-from module.network.HTTPRequest import BadHeader
+from pyload.plugins.Base import Fail, Retry, Abort
+from pyload.plugins.Hoster import Reconnect, SkipDownload
+from pyload.network.HTTPRequest import BadHeader
from BaseThread import BaseThread
diff --git a/module/threads/InfoThread.py b/pyload/threads/InfoThread.py
index bf5bb5777..fba2a9056 100644
--- a/module/threads/InfoThread.py
+++ b/pyload/threads/InfoThread.py
@@ -4,9 +4,9 @@
from time import time
from traceback import print_exc
-from module.Api import LinkStatus
-from module.utils.packagetools import parseNames
-from module.utils import has_method, accumulate
+from pyload.Api import LinkStatus
+from pyload.utils.packagetools import parseNames
+from pyload.utils import has_method, accumulate
from BaseThread import BaseThread
diff --git a/module/threads/ThreadManager.py b/pyload/threads/ThreadManager.py
index f67179d08..0044ebcb2 100644
--- a/module/threads/ThreadManager.py
+++ b/pyload/threads/ThreadManager.py
@@ -26,10 +26,10 @@ from random import choice
import pycurl
-from module.datatypes.PyFile import PyFile
-from module.network.RequestFactory import getURL
-from module.utils import lock, uniqify
-from module.utils.fs import free_space
+from pyload.datatypes.PyFile import PyFile
+from pyload.network.RequestFactory import getURL
+from pyload.utils import lock, uniqify
+from pyload.utils.fs import free_space
from DecrypterThread import DecrypterThread
from DownloadThread import DownloadThread
diff --git a/module/web/__init__.py b/pyload/threads/__init__.py
index e69de29bb..e69de29bb 100644
--- a/module/web/__init__.py
+++ b/pyload/threads/__init__.py
diff --git a/module/utils/ImportDebugger.py b/pyload/utils/ImportDebugger.py
index a997f7b0c..a997f7b0c 100644
--- a/module/utils/ImportDebugger.py
+++ b/pyload/utils/ImportDebugger.py
diff --git a/module/utils/JsEngine.py b/pyload/utils/JsEngine.py
index ef7494d16..ef7494d16 100644
--- a/module/utils/JsEngine.py
+++ b/pyload/utils/JsEngine.py
diff --git a/module/utils/__init__.py b/pyload/utils/__init__.py
index ca00f9abe..ca00f9abe 100644
--- a/module/utils/__init__.py
+++ b/pyload/utils/__init__.py
diff --git a/module/utils/fs.py b/pyload/utils/fs.py
index 92cc605e7..92cc605e7 100644
--- a/module/utils/fs.py
+++ b/pyload/utils/fs.py
diff --git a/module/utils/json_layer.py b/pyload/utils/json_layer.py
index cf9743603..cf9743603 100644
--- a/module/utils/json_layer.py
+++ b/pyload/utils/json_layer.py
diff --git a/module/utils/packagetools.py b/pyload/utils/packagetools.py
index 791a46d51..791a46d51 100644
--- a/module/utils/packagetools.py
+++ b/pyload/utils/packagetools.py
diff --git a/module/utils/pylgettext.py b/pyload/utils/pylgettext.py
index fb36fecee..fb36fecee 100644
--- a/module/utils/pylgettext.py
+++ b/pyload/utils/pylgettext.py
diff --git a/module/web/.bowerrc b/pyload/web/.bowerrc
index f594df7a7..f594df7a7 100644
--- a/module/web/.bowerrc
+++ b/pyload/web/.bowerrc
diff --git a/module/web/.jshintrc b/pyload/web/.jshintrc
index 0cff430d9..0cff430d9 100644
--- a/module/web/.jshintrc
+++ b/pyload/web/.jshintrc
diff --git a/module/web/Gruntfile.js b/pyload/web/Gruntfile.js
index 4799afb01..4799afb01 100644
--- a/module/web/Gruntfile.js
+++ b/pyload/web/Gruntfile.js
diff --git a/module/web/ServerThread.py b/pyload/web/ServerThread.py
index a86ecca70..95a09bd80 100644
--- a/module/web/ServerThread.py
+++ b/pyload/web/ServerThread.py
@@ -5,7 +5,7 @@ from time import time, sleep
import threading
import logging
-from module.utils.fs import exists
+from pyload.utils.fs import exists
core = None
setup = None
diff --git a/pyload/web/__init__.py b/pyload/web/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/pyload/web/__init__.py
diff --git a/module/web/api_app.py b/pyload/web/api_app.py
index 3874b38a3..3ffc507aa 100644
--- a/module/web/api_app.py
+++ b/pyload/web/api_app.py
@@ -10,9 +10,9 @@ from bottle import route, request, response, HTTPError, parse_auth
from utils import set_session, get_user_api
from webinterface import PYLOAD
-from module.Api import ExceptionObject
-from module.remote.json_converter import loads, dumps
-from module.utils import remove_chars
+from pyload.Api import ExceptionObject
+from pyload.remote.json_converter import loads, dumps
+from pyload.utils import remove_chars
def add_header(r):
r.headers.replace("Content-type", "application/json")
diff --git a/module/web/app/favicon.ico b/pyload/web/app/favicon.ico
index d7f9f1857..d7f9f1857 100644
--- a/module/web/app/favicon.ico
+++ b/pyload/web/app/favicon.ico
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Bold-webfont.eot b/pyload/web/app/fonts/Sansation_Bold-webfont.eot
index 43ed2ee31..43ed2ee31 100644
--- a/module/web/app/fonts/Sansation_Bold-webfont.eot
+++ b/pyload/web/app/fonts/Sansation_Bold-webfont.eot
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Bold-webfont.ttf b/pyload/web/app/fonts/Sansation_Bold-webfont.ttf
index d2e7c4c2a..d2e7c4c2a 100644
--- a/module/web/app/fonts/Sansation_Bold-webfont.ttf
+++ b/pyload/web/app/fonts/Sansation_Bold-webfont.ttf
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Bold-webfont.woff b/pyload/web/app/fonts/Sansation_Bold-webfont.woff
index 9ee938d55..9ee938d55 100644
--- a/module/web/app/fonts/Sansation_Bold-webfont.woff
+++ b/pyload/web/app/fonts/Sansation_Bold-webfont.woff
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Light-webfont.eot b/pyload/web/app/fonts/Sansation_Light-webfont.eot
index d83fa9cf6..d83fa9cf6 100644
--- a/module/web/app/fonts/Sansation_Light-webfont.eot
+++ b/pyload/web/app/fonts/Sansation_Light-webfont.eot
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Light-webfont.ttf b/pyload/web/app/fonts/Sansation_Light-webfont.ttf
index 64d734bec..64d734bec 100644
--- a/module/web/app/fonts/Sansation_Light-webfont.ttf
+++ b/pyload/web/app/fonts/Sansation_Light-webfont.ttf
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Light-webfont.woff b/pyload/web/app/fonts/Sansation_Light-webfont.woff
index 5f3dce493..5f3dce493 100644
--- a/module/web/app/fonts/Sansation_Light-webfont.woff
+++ b/pyload/web/app/fonts/Sansation_Light-webfont.woff
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Regular-webfont.eot b/pyload/web/app/fonts/Sansation_Regular-webfont.eot
index 46219c9ff..46219c9ff 100644
--- a/module/web/app/fonts/Sansation_Regular-webfont.eot
+++ b/pyload/web/app/fonts/Sansation_Regular-webfont.eot
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Regular-webfont.ttf b/pyload/web/app/fonts/Sansation_Regular-webfont.ttf
index 92f686359..92f686359 100644
--- a/module/web/app/fonts/Sansation_Regular-webfont.ttf
+++ b/pyload/web/app/fonts/Sansation_Regular-webfont.ttf
Binary files differ
diff --git a/module/web/app/fonts/Sansation_Regular-webfont.woff b/pyload/web/app/fonts/Sansation_Regular-webfont.woff
index 524b67992..524b67992 100644
--- a/module/web/app/fonts/Sansation_Regular-webfont.woff
+++ b/pyload/web/app/fonts/Sansation_Regular-webfont.woff
Binary files differ
diff --git a/module/web/app/images/default/bgpattern.png b/pyload/web/app/images/default/bgpattern.png
index 5111e6bdf..5111e6bdf 100644
--- a/module/web/app/images/default/bgpattern.png
+++ b/pyload/web/app/images/default/bgpattern.png
Binary files differ
diff --git a/module/web/app/images/default/checks_sheet.png b/pyload/web/app/images/default/checks_sheet.png
index 9662b8070..9662b8070 100644
--- a/module/web/app/images/default/checks_sheet.png
+++ b/pyload/web/app/images/default/checks_sheet.png
Binary files differ
diff --git a/module/web/app/images/default/fancy_deboss.png b/pyload/web/app/images/default/fancy_deboss.png
index 926a762db..926a762db 100644
--- a/module/web/app/images/default/fancy_deboss.png
+++ b/pyload/web/app/images/default/fancy_deboss.png
Binary files differ
diff --git a/module/web/app/images/default/logo.png b/pyload/web/app/images/default/logo.png
index bb9c13679..bb9c13679 100644
--- a/module/web/app/images/default/logo.png
+++ b/pyload/web/app/images/default/logo.png
Binary files differ
diff --git a/module/web/app/images/default/logo_grey.png b/pyload/web/app/images/default/logo_grey.png
index a4114d832..a4114d832 100644
--- a/module/web/app/images/default/logo_grey.png
+++ b/pyload/web/app/images/default/logo_grey.png
Binary files differ
diff --git a/module/web/app/images/icon.png b/pyload/web/app/images/icon.png
index 1ab4ca081..1ab4ca081 100644
--- a/module/web/app/images/icon.png
+++ b/pyload/web/app/images/icon.png
Binary files differ
diff --git a/module/web/app/index.html b/pyload/web/app/index.html
index 87fd6c612..87fd6c612 100644
--- a/module/web/app/index.html
+++ b/pyload/web/app/index.html
diff --git a/module/web/app/scripts/app.js b/pyload/web/app/scripts/app.js
index 427cb1bc8..427cb1bc8 100644
--- a/module/web/app/scripts/app.js
+++ b/pyload/web/app/scripts/app.js
diff --git a/module/web/app/scripts/collections/AccountList.js b/pyload/web/app/scripts/collections/AccountList.js
index bfc2af5a3..bfc2af5a3 100644
--- a/module/web/app/scripts/collections/AccountList.js
+++ b/pyload/web/app/scripts/collections/AccountList.js
diff --git a/module/web/app/scripts/collections/FileList.js b/pyload/web/app/scripts/collections/FileList.js
index 873f4c0e3..873f4c0e3 100644
--- a/module/web/app/scripts/collections/FileList.js
+++ b/pyload/web/app/scripts/collections/FileList.js
diff --git a/module/web/app/scripts/collections/InteractionList.js b/pyload/web/app/scripts/collections/InteractionList.js
index 24f8b9248..24f8b9248 100644
--- a/module/web/app/scripts/collections/InteractionList.js
+++ b/pyload/web/app/scripts/collections/InteractionList.js
diff --git a/module/web/app/scripts/collections/PackageList.js b/pyload/web/app/scripts/collections/PackageList.js
index 7bee861a4..7bee861a4 100644
--- a/module/web/app/scripts/collections/PackageList.js
+++ b/pyload/web/app/scripts/collections/PackageList.js
diff --git a/module/web/app/scripts/collections/ProgressList.js b/pyload/web/app/scripts/collections/ProgressList.js
index 51849d8de..51849d8de 100644
--- a/module/web/app/scripts/collections/ProgressList.js
+++ b/pyload/web/app/scripts/collections/ProgressList.js
diff --git a/module/web/app/scripts/config.js b/pyload/web/app/scripts/config.js
index 398d97e11..398d97e11 100644
--- a/module/web/app/scripts/config.js
+++ b/pyload/web/app/scripts/config.js
diff --git a/module/web/app/scripts/controller.js b/pyload/web/app/scripts/controller.js
index 05237914d..05237914d 100644
--- a/module/web/app/scripts/controller.js
+++ b/pyload/web/app/scripts/controller.js
diff --git a/module/web/app/scripts/default.js b/pyload/web/app/scripts/default.js
index a337cee21..a337cee21 100644
--- a/module/web/app/scripts/default.js
+++ b/pyload/web/app/scripts/default.js
diff --git a/module/web/app/scripts/helpers/fileHelper.js b/pyload/web/app/scripts/helpers/fileHelper.js
index 156be58f0..156be58f0 100644
--- a/module/web/app/scripts/helpers/fileHelper.js
+++ b/pyload/web/app/scripts/helpers/fileHelper.js
diff --git a/module/web/app/scripts/helpers/formatSize.js b/pyload/web/app/scripts/helpers/formatSize.js
index 3b62e74c7..3b62e74c7 100644
--- a/module/web/app/scripts/helpers/formatSize.js
+++ b/pyload/web/app/scripts/helpers/formatSize.js
diff --git a/module/web/app/scripts/helpers/formatTime.js b/pyload/web/app/scripts/helpers/formatTime.js
index 757ff73ad..757ff73ad 100644
--- a/module/web/app/scripts/helpers/formatTime.js
+++ b/pyload/web/app/scripts/helpers/formatTime.js
diff --git a/module/web/app/scripts/helpers/pluginIcon.js b/pyload/web/app/scripts/helpers/pluginIcon.js
index 6b2fdc67f..6b2fdc67f 100644
--- a/module/web/app/scripts/helpers/pluginIcon.js
+++ b/pyload/web/app/scripts/helpers/pluginIcon.js
diff --git a/module/web/app/scripts/models/Account.js b/pyload/web/app/scripts/models/Account.js
index a2e24b056..a2e24b056 100644
--- a/module/web/app/scripts/models/Account.js
+++ b/pyload/web/app/scripts/models/Account.js
diff --git a/module/web/app/scripts/models/ConfigHolder.js b/pyload/web/app/scripts/models/ConfigHolder.js
index 40efbc7c0..40efbc7c0 100644
--- a/module/web/app/scripts/models/ConfigHolder.js
+++ b/pyload/web/app/scripts/models/ConfigHolder.js
diff --git a/module/web/app/scripts/models/ConfigItem.js b/pyload/web/app/scripts/models/ConfigItem.js
index 2d325c2a2..2d325c2a2 100644
--- a/module/web/app/scripts/models/ConfigItem.js
+++ b/pyload/web/app/scripts/models/ConfigItem.js
diff --git a/module/web/app/scripts/models/File.js b/pyload/web/app/scripts/models/File.js
index 3beb7f270..3beb7f270 100644
--- a/module/web/app/scripts/models/File.js
+++ b/pyload/web/app/scripts/models/File.js
diff --git a/module/web/app/scripts/models/InteractionTask.js b/pyload/web/app/scripts/models/InteractionTask.js
index 54c739d4b..54c739d4b 100644
--- a/module/web/app/scripts/models/InteractionTask.js
+++ b/pyload/web/app/scripts/models/InteractionTask.js
diff --git a/module/web/app/scripts/models/Package.js b/pyload/web/app/scripts/models/Package.js
index a34ec1c69..a34ec1c69 100644
--- a/module/web/app/scripts/models/Package.js
+++ b/pyload/web/app/scripts/models/Package.js
diff --git a/module/web/app/scripts/models/Progress.js b/pyload/web/app/scripts/models/Progress.js
index b0bbb684d..b0bbb684d 100644
--- a/module/web/app/scripts/models/Progress.js
+++ b/pyload/web/app/scripts/models/Progress.js
diff --git a/module/web/app/scripts/models/ServerStatus.js b/pyload/web/app/scripts/models/ServerStatus.js
index 59739b41e..59739b41e 100644
--- a/module/web/app/scripts/models/ServerStatus.js
+++ b/pyload/web/app/scripts/models/ServerStatus.js
diff --git a/module/web/app/scripts/models/TreeCollection.js b/pyload/web/app/scripts/models/TreeCollection.js
index 2f761e6cc..2f761e6cc 100644
--- a/module/web/app/scripts/models/TreeCollection.js
+++ b/pyload/web/app/scripts/models/TreeCollection.js
diff --git a/module/web/app/scripts/models/UserSession.js b/pyload/web/app/scripts/models/UserSession.js
index a7e9aa848..a7e9aa848 100644
--- a/module/web/app/scripts/models/UserSession.js
+++ b/pyload/web/app/scripts/models/UserSession.js
diff --git a/module/web/app/scripts/router.js b/pyload/web/app/scripts/router.js
index 68ea5575d..68ea5575d 100644
--- a/module/web/app/scripts/router.js
+++ b/pyload/web/app/scripts/router.js
diff --git a/module/web/app/scripts/routers/defaultRouter.js b/pyload/web/app/scripts/routers/defaultRouter.js
index 4b00d160c..4b00d160c 100644
--- a/module/web/app/scripts/routers/defaultRouter.js
+++ b/pyload/web/app/scripts/routers/defaultRouter.js
diff --git a/module/web/app/scripts/routers/mobileRouter.js b/pyload/web/app/scripts/routers/mobileRouter.js
index e24cb7a34..e24cb7a34 100644
--- a/module/web/app/scripts/routers/mobileRouter.js
+++ b/pyload/web/app/scripts/routers/mobileRouter.js
diff --git a/module/web/app/scripts/utils/animations.js b/pyload/web/app/scripts/utils/animations.js
index 7f89afef1..7f89afef1 100644
--- a/module/web/app/scripts/utils/animations.js
+++ b/pyload/web/app/scripts/utils/animations.js
diff --git a/module/web/app/scripts/utils/apitypes.js b/pyload/web/app/scripts/utils/apitypes.js
index cbbc9064f..cbbc9064f 100644
--- a/module/web/app/scripts/utils/apitypes.js
+++ b/pyload/web/app/scripts/utils/apitypes.js
diff --git a/module/web/app/scripts/utils/dialogs.js b/pyload/web/app/scripts/utils/dialogs.js
index 4933b7ed2..4933b7ed2 100644
--- a/module/web/app/scripts/utils/dialogs.js
+++ b/pyload/web/app/scripts/utils/dialogs.js
diff --git a/module/web/app/scripts/utils/initHB.js b/pyload/web/app/scripts/utils/initHB.js
index d7f582521..d7f582521 100644
--- a/module/web/app/scripts/utils/initHB.js
+++ b/pyload/web/app/scripts/utils/initHB.js
diff --git a/module/web/app/scripts/utils/lazyRequire.js b/pyload/web/app/scripts/utils/lazyRequire.js
index 96c07aa24..96c07aa24 100644
--- a/module/web/app/scripts/utils/lazyRequire.js
+++ b/pyload/web/app/scripts/utils/lazyRequire.js
diff --git a/module/web/app/scripts/vendor/Handlebars-1.0rc1.js b/pyload/web/app/scripts/vendor/Handlebars-1.0rc1.js
index 991242461..991242461 100644
--- a/module/web/app/scripts/vendor/Handlebars-1.0rc1.js
+++ b/pyload/web/app/scripts/vendor/Handlebars-1.0rc1.js
diff --git a/module/web/app/scripts/vendor/bootstrap-2.3.2.js b/pyload/web/app/scripts/vendor/bootstrap-2.3.2.js
index 96fed1387..96fed1387 100755
--- a/module/web/app/scripts/vendor/bootstrap-2.3.2.js
+++ b/pyload/web/app/scripts/vendor/bootstrap-2.3.2.js
diff --git a/module/web/app/scripts/vendor/jquery.omniwindow.js b/pyload/web/app/scripts/vendor/jquery.omniwindow.js
index e1f0b8f77..e1f0b8f77 100644
--- a/module/web/app/scripts/vendor/jquery.omniwindow.js
+++ b/pyload/web/app/scripts/vendor/jquery.omniwindow.js
diff --git a/module/web/app/scripts/vendor/remaining.js b/pyload/web/app/scripts/vendor/remaining.js
index d66a2931a..d66a2931a 100644
--- a/module/web/app/scripts/vendor/remaining.js
+++ b/pyload/web/app/scripts/vendor/remaining.js
diff --git a/module/web/app/scripts/views/abstract/itemView.js b/pyload/web/app/scripts/views/abstract/itemView.js
index c37118a4c..c37118a4c 100644
--- a/module/web/app/scripts/views/abstract/itemView.js
+++ b/pyload/web/app/scripts/views/abstract/itemView.js
diff --git a/module/web/app/scripts/views/abstract/modalView.js b/pyload/web/app/scripts/views/abstract/modalView.js
index 9d1d72869..9d1d72869 100644
--- a/module/web/app/scripts/views/abstract/modalView.js
+++ b/pyload/web/app/scripts/views/abstract/modalView.js
diff --git a/module/web/app/scripts/views/accounts/accountListView.js b/pyload/web/app/scripts/views/accounts/accountListView.js
index 4eb5bfe7d..4eb5bfe7d 100644
--- a/module/web/app/scripts/views/accounts/accountListView.js
+++ b/pyload/web/app/scripts/views/accounts/accountListView.js
diff --git a/module/web/app/scripts/views/accounts/accountModal.js b/pyload/web/app/scripts/views/accounts/accountModal.js
index 6c2b226df..6c2b226df 100644
--- a/module/web/app/scripts/views/accounts/accountModal.js
+++ b/pyload/web/app/scripts/views/accounts/accountModal.js
diff --git a/module/web/app/scripts/views/accounts/accountView.js b/pyload/web/app/scripts/views/accounts/accountView.js
index 89f69d7e7..89f69d7e7 100644
--- a/module/web/app/scripts/views/accounts/accountView.js
+++ b/pyload/web/app/scripts/views/accounts/accountView.js
diff --git a/module/web/app/scripts/views/dashboard/dashboardView.js b/pyload/web/app/scripts/views/dashboard/dashboardView.js
index e7adba475..e7adba475 100644
--- a/module/web/app/scripts/views/dashboard/dashboardView.js
+++ b/pyload/web/app/scripts/views/dashboard/dashboardView.js
diff --git a/module/web/app/scripts/views/dashboard/fileView.js b/pyload/web/app/scripts/views/dashboard/fileView.js
index 4e5884ed8..4e5884ed8 100644
--- a/module/web/app/scripts/views/dashboard/fileView.js
+++ b/pyload/web/app/scripts/views/dashboard/fileView.js
diff --git a/module/web/app/scripts/views/dashboard/filterView.js b/pyload/web/app/scripts/views/dashboard/filterView.js
index 64bc56724..64bc56724 100644
--- a/module/web/app/scripts/views/dashboard/filterView.js
+++ b/pyload/web/app/scripts/views/dashboard/filterView.js
diff --git a/module/web/app/scripts/views/dashboard/packageView.js b/pyload/web/app/scripts/views/dashboard/packageView.js
index 2738fcbea..2738fcbea 100644
--- a/module/web/app/scripts/views/dashboard/packageView.js
+++ b/pyload/web/app/scripts/views/dashboard/packageView.js
diff --git a/module/web/app/scripts/views/dashboard/selectionView.js b/pyload/web/app/scripts/views/dashboard/selectionView.js
index 8685fd849..8685fd849 100644
--- a/module/web/app/scripts/views/dashboard/selectionView.js
+++ b/pyload/web/app/scripts/views/dashboard/selectionView.js
diff --git a/module/web/app/scripts/views/headerView.js b/pyload/web/app/scripts/views/headerView.js
index 512c7259b..512c7259b 100644
--- a/module/web/app/scripts/views/headerView.js
+++ b/pyload/web/app/scripts/views/headerView.js
diff --git a/module/web/app/scripts/views/input/inputLoader.js b/pyload/web/app/scripts/views/input/inputLoader.js
index 11665abb4..11665abb4 100644
--- a/module/web/app/scripts/views/input/inputLoader.js
+++ b/pyload/web/app/scripts/views/input/inputLoader.js
diff --git a/module/web/app/scripts/views/input/inputView.js b/pyload/web/app/scripts/views/input/inputView.js
index 1fbe5042d..1fbe5042d 100644
--- a/module/web/app/scripts/views/input/inputView.js
+++ b/pyload/web/app/scripts/views/input/inputView.js
diff --git a/module/web/app/scripts/views/input/textInput.js b/pyload/web/app/scripts/views/input/textInput.js
index 0eebbf91e..0eebbf91e 100644
--- a/module/web/app/scripts/views/input/textInput.js
+++ b/pyload/web/app/scripts/views/input/textInput.js
diff --git a/module/web/app/scripts/views/linkGrabberModal.js b/pyload/web/app/scripts/views/linkGrabberModal.js
index e6f59c134..e6f59c134 100644
--- a/module/web/app/scripts/views/linkGrabberModal.js
+++ b/pyload/web/app/scripts/views/linkGrabberModal.js
diff --git a/module/web/app/scripts/views/loginView.js b/pyload/web/app/scripts/views/loginView.js
index 891b3ec99..891b3ec99 100644
--- a/module/web/app/scripts/views/loginView.js
+++ b/pyload/web/app/scripts/views/loginView.js
diff --git a/module/web/app/scripts/views/notificationView.js b/pyload/web/app/scripts/views/notificationView.js
index abfcd8079..abfcd8079 100644
--- a/module/web/app/scripts/views/notificationView.js
+++ b/pyload/web/app/scripts/views/notificationView.js
diff --git a/module/web/app/scripts/views/progressView.js b/pyload/web/app/scripts/views/progressView.js
index 3a4bb2825..3a4bb2825 100644
--- a/module/web/app/scripts/views/progressView.js
+++ b/pyload/web/app/scripts/views/progressView.js
diff --git a/module/web/app/scripts/views/queryModal.js b/pyload/web/app/scripts/views/queryModal.js
index 7c6439b49..7c6439b49 100644
--- a/module/web/app/scripts/views/queryModal.js
+++ b/pyload/web/app/scripts/views/queryModal.js
diff --git a/module/web/app/scripts/views/settings/configSectionView.js b/pyload/web/app/scripts/views/settings/configSectionView.js
index e05701b2a..e05701b2a 100644
--- a/module/web/app/scripts/views/settings/configSectionView.js
+++ b/pyload/web/app/scripts/views/settings/configSectionView.js
diff --git a/module/web/app/scripts/views/settings/pluginChooserModal.js b/pyload/web/app/scripts/views/settings/pluginChooserModal.js
index 91e9f11b3..91e9f11b3 100644
--- a/module/web/app/scripts/views/settings/pluginChooserModal.js
+++ b/pyload/web/app/scripts/views/settings/pluginChooserModal.js
diff --git a/module/web/app/scripts/views/settings/settingsView.js b/pyload/web/app/scripts/views/settings/settingsView.js
index cad5ab075..cad5ab075 100644
--- a/module/web/app/scripts/views/settings/settingsView.js
+++ b/pyload/web/app/scripts/views/settings/settingsView.js
diff --git a/module/web/app/styles/default/accounts.less b/pyload/web/app/styles/default/accounts.less
index 9b45b64b3..9b45b64b3 100644
--- a/module/web/app/styles/default/accounts.less
+++ b/pyload/web/app/styles/default/accounts.less
diff --git a/module/web/app/styles/default/admin.less b/pyload/web/app/styles/default/admin.less
index 92524c153..92524c153 100644
--- a/module/web/app/styles/default/admin.less
+++ b/pyload/web/app/styles/default/admin.less
diff --git a/module/web/app/styles/default/base.less b/pyload/web/app/styles/default/base.less
index bd318127e..bd318127e 100644
--- a/module/web/app/styles/default/base.less
+++ b/pyload/web/app/styles/default/base.less
diff --git a/module/web/app/styles/default/common.less b/pyload/web/app/styles/default/common.less
index 338ed38e7..338ed38e7 100644
--- a/module/web/app/styles/default/common.less
+++ b/pyload/web/app/styles/default/common.less
diff --git a/module/web/app/styles/default/dashboard.less b/pyload/web/app/styles/default/dashboard.less
index ab61ba29b..ab61ba29b 100644
--- a/module/web/app/styles/default/dashboard.less
+++ b/pyload/web/app/styles/default/dashboard.less
diff --git a/module/web/app/styles/default/main.less b/pyload/web/app/styles/default/main.less
index 15d9943f8..15d9943f8 100644
--- a/module/web/app/styles/default/main.less
+++ b/pyload/web/app/styles/default/main.less
diff --git a/module/web/app/styles/default/settings.less b/pyload/web/app/styles/default/settings.less
index 34bfcb92a..34bfcb92a 100644
--- a/module/web/app/styles/default/settings.less
+++ b/pyload/web/app/styles/default/settings.less
diff --git a/module/web/app/styles/default/style.less b/pyload/web/app/styles/default/style.less
index 6fb5a4857..6fb5a4857 100644
--- a/module/web/app/styles/default/style.less
+++ b/pyload/web/app/styles/default/style.less
diff --git a/module/web/app/styles/font.css b/pyload/web/app/styles/font.css
index ee117d43b..ee117d43b 100644
--- a/module/web/app/styles/font.css
+++ b/pyload/web/app/styles/font.css
diff --git a/module/web/app/templates/default/accounts/account.html b/pyload/web/app/templates/default/accounts/account.html
index c2ded16f6..c2ded16f6 100644
--- a/module/web/app/templates/default/accounts/account.html
+++ b/pyload/web/app/templates/default/accounts/account.html
diff --git a/module/web/app/templates/default/accounts/actionbar.html b/pyload/web/app/templates/default/accounts/actionbar.html
index f4652ec42..f4652ec42 100644
--- a/module/web/app/templates/default/accounts/actionbar.html
+++ b/pyload/web/app/templates/default/accounts/actionbar.html
diff --git a/module/web/app/templates/default/accounts/layout.html b/pyload/web/app/templates/default/accounts/layout.html
index e6627500d..e6627500d 100644
--- a/module/web/app/templates/default/accounts/layout.html
+++ b/pyload/web/app/templates/default/accounts/layout.html
diff --git a/module/web/app/templates/default/admin.html b/pyload/web/app/templates/default/admin.html
index 2eb90d7e0..2eb90d7e0 100644
--- a/module/web/app/templates/default/admin.html
+++ b/pyload/web/app/templates/default/admin.html
diff --git a/module/web/app/templates/default/dashboard/actionbar.html b/pyload/web/app/templates/default/dashboard/actionbar.html
index 815d4593c..815d4593c 100644
--- a/module/web/app/templates/default/dashboard/actionbar.html
+++ b/pyload/web/app/templates/default/dashboard/actionbar.html
diff --git a/module/web/app/templates/default/dashboard/file.html b/pyload/web/app/templates/default/dashboard/file.html
index 6256254da..6256254da 100644
--- a/module/web/app/templates/default/dashboard/file.html
+++ b/pyload/web/app/templates/default/dashboard/file.html
diff --git a/module/web/app/templates/default/dashboard/layout.html b/pyload/web/app/templates/default/dashboard/layout.html
index 945d11762..945d11762 100644
--- a/module/web/app/templates/default/dashboard/layout.html
+++ b/pyload/web/app/templates/default/dashboard/layout.html
diff --git a/module/web/app/templates/default/dashboard/package.html b/pyload/web/app/templates/default/dashboard/package.html
index c0690a9bf..c0690a9bf 100644
--- a/module/web/app/templates/default/dashboard/package.html
+++ b/pyload/web/app/templates/default/dashboard/package.html
diff --git a/module/web/app/templates/default/dashboard/select.html b/pyload/web/app/templates/default/dashboard/select.html
index 73ea391cd..73ea391cd 100644
--- a/module/web/app/templates/default/dashboard/select.html
+++ b/pyload/web/app/templates/default/dashboard/select.html
diff --git a/module/web/app/templates/default/dialogs/addAccount.html b/pyload/web/app/templates/default/dialogs/addAccount.html
index bdc8a609a..bdc8a609a 100755
--- a/module/web/app/templates/default/dialogs/addAccount.html
+++ b/pyload/web/app/templates/default/dialogs/addAccount.html
diff --git a/module/web/app/templates/default/dialogs/addPluginConfig.html b/pyload/web/app/templates/default/dialogs/addPluginConfig.html
index e7a42a208..e7a42a208 100755
--- a/module/web/app/templates/default/dialogs/addPluginConfig.html
+++ b/pyload/web/app/templates/default/dialogs/addPluginConfig.html
diff --git a/module/web/app/templates/default/dialogs/confirmDelete.html b/pyload/web/app/templates/default/dialogs/confirmDelete.html
index 65ae1cb21..65ae1cb21 100644
--- a/module/web/app/templates/default/dialogs/confirmDelete.html
+++ b/pyload/web/app/templates/default/dialogs/confirmDelete.html
diff --git a/module/web/app/templates/default/dialogs/interactionTask.html b/pyload/web/app/templates/default/dialogs/interactionTask.html
index ae325e83d..ae325e83d 100755
--- a/module/web/app/templates/default/dialogs/interactionTask.html
+++ b/pyload/web/app/templates/default/dialogs/interactionTask.html
diff --git a/module/web/app/templates/default/dialogs/linkgrabber.html b/pyload/web/app/templates/default/dialogs/linkgrabber.html
index 08418cf03..08418cf03 100755
--- a/module/web/app/templates/default/dialogs/linkgrabber.html
+++ b/pyload/web/app/templates/default/dialogs/linkgrabber.html
diff --git a/module/web/app/templates/default/dialogs/modal.html b/pyload/web/app/templates/default/dialogs/modal.html
index 1e44cc99c..1e44cc99c 100755
--- a/module/web/app/templates/default/dialogs/modal.html
+++ b/pyload/web/app/templates/default/dialogs/modal.html
diff --git a/module/web/app/templates/default/header/layout.html b/pyload/web/app/templates/default/header/layout.html
index 890a5b018..890a5b018 100644
--- a/module/web/app/templates/default/header/layout.html
+++ b/pyload/web/app/templates/default/header/layout.html
diff --git a/module/web/app/templates/default/header/progress.html b/pyload/web/app/templates/default/header/progress.html
index 65ae9a880..65ae9a880 100644
--- a/module/web/app/templates/default/header/progress.html
+++ b/pyload/web/app/templates/default/header/progress.html
diff --git a/module/web/app/templates/default/header/progressbar.html b/pyload/web/app/templates/default/header/progressbar.html
index 41645c92f..41645c92f 100644
--- a/module/web/app/templates/default/header/progressbar.html
+++ b/pyload/web/app/templates/default/header/progressbar.html
diff --git a/module/web/app/templates/default/header/status.html b/pyload/web/app/templates/default/header/status.html
index 3a22bb75b..3a22bb75b 100644
--- a/module/web/app/templates/default/header/status.html
+++ b/pyload/web/app/templates/default/header/status.html
diff --git a/module/web/app/templates/default/login.html b/pyload/web/app/templates/default/login.html
index 9e8d9eeb6..9e8d9eeb6 100644
--- a/module/web/app/templates/default/login.html
+++ b/pyload/web/app/templates/default/login.html
diff --git a/module/web/app/templates/default/notification.html b/pyload/web/app/templates/default/notification.html
index 0f9b2c9d2..0f9b2c9d2 100644
--- a/module/web/app/templates/default/notification.html
+++ b/pyload/web/app/templates/default/notification.html
diff --git a/module/web/app/templates/default/settings/actionbar.html b/pyload/web/app/templates/default/settings/actionbar.html
index 25b10d463..25b10d463 100644
--- a/module/web/app/templates/default/settings/actionbar.html
+++ b/pyload/web/app/templates/default/settings/actionbar.html
diff --git a/module/web/app/templates/default/settings/config.html b/pyload/web/app/templates/default/settings/config.html
index a9ca6214c..a9ca6214c 100644
--- a/module/web/app/templates/default/settings/config.html
+++ b/pyload/web/app/templates/default/settings/config.html
diff --git a/module/web/app/templates/default/settings/configItem.html b/pyload/web/app/templates/default/settings/configItem.html
index 3ddf16c84..3ddf16c84 100644
--- a/module/web/app/templates/default/settings/configItem.html
+++ b/pyload/web/app/templates/default/settings/configItem.html
diff --git a/module/web/app/templates/default/settings/layout.html b/pyload/web/app/templates/default/settings/layout.html
index 39f1a2ec9..39f1a2ec9 100644
--- a/module/web/app/templates/default/settings/layout.html
+++ b/pyload/web/app/templates/default/settings/layout.html
diff --git a/module/web/app/templates/default/settings/menu.html b/pyload/web/app/templates/default/settings/menu.html
index ef814414a..ef814414a 100644
--- a/module/web/app/templates/default/settings/menu.html
+++ b/pyload/web/app/templates/default/settings/menu.html
diff --git a/module/web/app/templates/default/setup.html b/pyload/web/app/templates/default/setup.html
index e5c9f4b8c..e5c9f4b8c 100644
--- a/module/web/app/templates/default/setup.html
+++ b/pyload/web/app/templates/default/setup.html
diff --git a/module/web/app/unavailable.html b/pyload/web/app/unavailable.html
index 6706a693c..6706a693c 100644
--- a/module/web/app/unavailable.html
+++ b/pyload/web/app/unavailable.html
diff --git a/module/web/bower.json b/pyload/web/bower.json
index 6d8adb8a7..6d8adb8a7 100644
--- a/module/web/bower.json
+++ b/pyload/web/bower.json
diff --git a/module/web/cnl_app.py b/pyload/web/cnl_app.py
index b6a98a0a8..90aa76d72 100644
--- a/module/web/cnl_app.py
+++ b/pyload/web/cnl_app.py
@@ -6,7 +6,7 @@ from urllib import unquote
from base64 import standard_b64decode
from binascii import unhexlify
-from module.utils.fs import save_filename
+from pyload.utils.fs import save_filename
from bottle import route, request, HTTPError
from webinterface import PYLOAD, DL_ROOT, JS
diff --git a/module/web/middlewares.py b/pyload/web/middlewares.py
index ae0911cc3..ae0911cc3 100644
--- a/module/web/middlewares.py
+++ b/pyload/web/middlewares.py
diff --git a/module/web/package.json b/pyload/web/package.json
index aaf1c9a8d..aaf1c9a8d 100644
--- a/module/web/package.json
+++ b/pyload/web/package.json
diff --git a/module/web/pyload_app.py b/pyload/web/pyload_app.py
index 724fddec2..724fddec2 100644
--- a/module/web/pyload_app.py
+++ b/pyload/web/pyload_app.py
diff --git a/module/web/servers.py b/pyload/web/servers.py
index a3c51e36b..a3c51e36b 100644
--- a/module/web/servers.py
+++ b/pyload/web/servers.py
diff --git a/module/web/setup_app.py b/pyload/web/setup_app.py
index cd44ad08e..cd44ad08e 100644
--- a/module/web/setup_app.py
+++ b/pyload/web/setup_app.py
diff --git a/module/web/utils.py b/pyload/web/utils.py
index b5a933b26..b5a933b26 100644
--- a/module/web/utils.py
+++ b/pyload/web/utils.py
diff --git a/module/web/webinterface.py b/pyload/web/webinterface.py
index 30c7d141f..37d06bd68 100644
--- a/module/web/webinterface.py
+++ b/pyload/web/webinterface.py
@@ -26,7 +26,7 @@ PYLOAD_DIR = abspath(join(PROJECT_DIR, "..", ".."))
sys.path.append(PYLOAD_DIR)
-from module import InitHomeDir
+from pyload import InitHomeDir
import bottle
from bottle import run, app
@@ -36,7 +36,7 @@ from middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware
SETUP = None
PYLOAD = None
-from module.web import ServerThread
+import ServerThread
if not ServerThread.core:
if ServerThread.setup:
@@ -48,7 +48,7 @@ else:
PYLOAD = ServerThread.core.api
config = ServerThread.core.config
-from module.utils.JsEngine import JsEngine
+from pyload.utils.JsEngine import JsEngine
JS = JsEngine()